Merge lp:~ericsnowcurrently/fake-juju/python-lib-helpers into lp:~landscape/fake-juju/trunk-old

Proposed by Eric Snow
Status: Merged
Approved by: Eric Snow
Approved revision: 43
Merged at revision: 38
Proposed branch: lp:~ericsnowcurrently/fake-juju/python-lib-helpers
Merge into: lp:~landscape/fake-juju/trunk-old
Prerequisite: lp:~ericsnowcurrently/fake-juju/python-lib-init
Diff against target: 212 lines (+187/-0)
4 files modified
python/fakejuju/__init__.py (+14/-0)
python/fakejuju/fakejuju.py (+32/-0)
python/fakejuju/tests/test___init__.py (+24/-0)
python/fakejuju/tests/test_fakejuju.py (+117/-0)
To merge this branch: bzr merge lp:~ericsnowcurrently/fake-juju/python-lib-helpers
Reviewer Review Type Date Requested Status
🤖 Landscape Builder test results Approve
Free Ekanayaka (community) Approve
Review via email: mp+307892@code.launchpad.net

This proposal supersedes a proposal from 2016-10-06.

Commit message

Add helper functions to the fakejuju.fakejuju module.

Description of the change

Add helper functions to the fakejuju.fakejuju module.

Testing instructions:

Run the unit tests.

To post a comment you must log in.
Revision history for this message
🤖 Landscape Builder (landscape-builder) : Posted in a previous version of this proposal
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) :
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote : Posted in a previous version of this proposal

Command: make ci-test
Result: Success
Revno: 42
Branch: lp:~ericsnowcurrently/fake-juju/python-lib-helpers
Jenkins: https://ci.lscape.net/job/latch-test-xenial/15/

review: Approve (test results)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Command: make ci-test
Result: Success
Revno: 42
Branch: lp:~ericsnowcurrently/fake-juju/python-lib-helpers
Jenkins: https://ci.lscape.net/job/latch-test-xenial/16/

review: Approve (test results)
Revision history for this message
Free Ekanayaka (free.ekanayaka) wrote :

+1 with a couple of comments

review: Approve
37. By Eric Snow

Merge python-lib-init [f=] [r=chad.smith,free.ekanayaka,landscape-builder] [a=Eric Snow]
Init the Python project for a fake-juju library.

Revision history for this message
Eric Snow (ericsnowcurrently) :
Revision history for this message
🤖 Landscape Builder (landscape-builder) :
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Command: make ci-test
Result: Success
Revno: 44
Branch: lp:~ericsnowcurrently/fake-juju/python-lib-helpers
Jenkins: https://ci.lscape.net/job/latch-test-xenial/19/

review: Approve (test results)
42. By Eric Snow

Move get_bootstrap_spec() to __init__.py.

43. By Eric Snow

Split the helper tests into separate test classes.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'python/fakejuju/__init__.py'
2--- python/fakejuju/__init__.py 2016-10-06 21:43:43 +0000
3+++ python/fakejuju/__init__.py 2016-10-13 18:45:47 +0000
4@@ -45,4 +45,18 @@
5
6 """
7
8+
9 __version__ = "0.9.0b1"
10+
11+
12+def get_bootstrap_spec(name, admin_secret=None):
13+ """Return the BootstrapSpec instance for the given controller.
14+
15+ @param name: The controller name to set up.
16+ @param admin_secret: The admin user password to use.
17+ """
18+ import txjuju.cli
19+
20+ driver = "dummy"
21+ default_series = None # Use the default.
22+ return txjuju.cli.BootstrapSpec(name, driver, default_series, admin_secret)
23
24=== added file 'python/fakejuju/fakejuju.py'
25--- python/fakejuju/fakejuju.py 1970-01-01 00:00:00 +0000
26+++ python/fakejuju/fakejuju.py 2016-10-13 18:45:47 +0000
27@@ -0,0 +1,32 @@
28+# Copyright 2016 Canonical Limited. All rights reserved.
29+
30+import os.path
31+
32+
33+def get_filename(version, bindir=None):
34+ """Return the full path to the fake-juju binary for the given version.
35+
36+ @param version: The Juju version to use.
37+ @param bindir: The directory containing the fake-juju binary.
38+ This defaults to /usr/bin.
39+ """
40+ if not version:
41+ raise ValueError("version not provided")
42+ filename = "fake-juju-{}".format(version)
43+ if bindir is None:
44+ # XXX Search $PATH.
45+ bindir = "/usr/bin"
46+ return os.path.join(bindir, filename)
47+
48+
49+def set_envvars(envvars, failures_filename=None, logsdir=None):
50+ """Return the environment variables with which to run fake-juju.
51+
52+ @param envvars: The env dict to update.
53+ @param failures_filename: The path to the failures file that
54+ fake-juju will use.
55+ @params logsdir: The path to the directory where fake-juju will
56+ write its log files.
57+ """
58+ envvars["FAKE_JUJU_FAILURES"] = failures_filename or ""
59+ envvars["FAKE_JUJU_LOGS_DIR"] = logsdir or ""
60
61=== added directory 'python/fakejuju/tests'
62=== added file 'python/fakejuju/tests/__init__.py'
63=== added file 'python/fakejuju/tests/test___init__.py'
64--- python/fakejuju/tests/test___init__.py 1970-01-01 00:00:00 +0000
65+++ python/fakejuju/tests/test___init__.py 2016-10-13 18:45:47 +0000
66@@ -0,0 +1,24 @@
67+# Copyright 2016 Canonical Limited. All rights reserved.
68+
69+import unittest
70+
71+import txjuju.cli
72+
73+from fakejuju import get_bootstrap_spec
74+
75+
76+class GetBootstrapTests(unittest.TestCase):
77+
78+ def test_get_bootstrap_spec_full(self):
79+ """get_bootstrap_spec() works correctly when given all args."""
80+ spec = get_bootstrap_spec("my-env", "pw")
81+
82+ self.assertEqual(
83+ spec,
84+ txjuju.cli.BootstrapSpec("my-env", "dummy", admin_secret="pw"))
85+
86+ def test_get_bootstrap_spec_minimal(self):
87+ """get_bootstrap_spec() works correctly when given minimal args."""
88+ spec = get_bootstrap_spec("my-env")
89+
90+ self.assertEqual(spec, txjuju.cli.BootstrapSpec("my-env", "dummy"))
91
92=== added file 'python/fakejuju/tests/test_fakejuju.py'
93--- python/fakejuju/tests/test_fakejuju.py 1970-01-01 00:00:00 +0000
94+++ python/fakejuju/tests/test_fakejuju.py 2016-10-13 18:45:47 +0000
95@@ -0,0 +1,117 @@
96+# Copyright 2016 Canonical Limited. All rights reserved.
97+
98+import unittest
99+
100+from fakejuju.fakejuju import get_filename, set_envvars
101+
102+
103+class GetFilenameTests(unittest.TestCase):
104+
105+ def test_all_args(self):
106+ """get_filename() works correctly when given all args."""
107+ filename = get_filename("1.25.6", "/spam")
108+
109+ self.assertEqual(filename, "/spam/fake-juju-1.25.6")
110+
111+ def test_minimal_args(self):
112+ """get_filename() works correctly when given minimal args."""
113+ filename = get_filename("1.25.6")
114+
115+ self.assertEqual(filename, "/usr/bin/fake-juju-1.25.6")
116+
117+ def test_empty_bindir(self):
118+ """get_filename() works correctly when given an empty string
119+ for bindir."""
120+ filename = get_filename("1.25.6", "")
121+
122+ self.assertEqual(filename, "fake-juju-1.25.6")
123+
124+ def test_missing_version(self):
125+ """get_filename() fails if version is None or empty."""
126+ with self.assertRaises(ValueError):
127+ get_filename(None)
128+ with self.assertRaises(ValueError):
129+ get_filename("")
130+
131+
132+class SetEnvvarsTests(unittest.TestCase):
133+
134+ def test_all_args(self):
135+ """set_envvars() works correctly when given all args."""
136+ envvars = {}
137+ set_envvars(envvars, "/spam/failures", "/eggs/logsdir")
138+
139+ self.assertEqual(envvars, {
140+ "FAKE_JUJU_FAILURES": "/spam/failures",
141+ "FAKE_JUJU_LOGS_DIR": "/eggs/logsdir",
142+ })
143+
144+ def test_minimal_args(self):
145+ """set_envvars() works correctly when given minimal args."""
146+ envvars = {}
147+ set_envvars(envvars)
148+
149+ self.assertEqual(envvars, {
150+ "FAKE_JUJU_FAILURES": "",
151+ "FAKE_JUJU_LOGS_DIR": "",
152+ })
153+
154+ def test_start_empty(self):
155+ """set_envvars() sets all values on an empty dict."""
156+ envvars = {}
157+ set_envvars(envvars, "x", "y")
158+
159+ self.assertEqual(envvars, {
160+ "FAKE_JUJU_FAILURES": "x",
161+ "FAKE_JUJU_LOGS_DIR": "y",
162+ })
163+
164+ def test_no_collisions(self):
165+ """set_envvars() sets all values when none are set yet."""
166+ envvars = {"SPAM": "eggs"}
167+ set_envvars(envvars, "x", "y")
168+
169+ self.assertEqual(envvars, {
170+ "SPAM": "eggs",
171+ "FAKE_JUJU_FAILURES": "x",
172+ "FAKE_JUJU_LOGS_DIR": "y",
173+ })
174+
175+ def test_empty_to_nonempty(self):
176+ """set_envvars() updates empty values."""
177+ envvars = {
178+ "FAKE_JUJU_FAILURES": "",
179+ "FAKE_JUJU_LOGS_DIR": "",
180+ }
181+ set_envvars(envvars, "x", "y")
182+
183+ self.assertEqual(envvars, {
184+ "FAKE_JUJU_FAILURES": "x",
185+ "FAKE_JUJU_LOGS_DIR": "y",
186+ })
187+
188+ def test_nonempty_to_nonempty(self):
189+ """set_envvars() overwrites existing values."""
190+ envvars = {
191+ "FAKE_JUJU_FAILURES": "spam",
192+ "FAKE_JUJU_LOGS_DIR": "ham",
193+ }
194+ set_envvars(envvars, "x", "y")
195+
196+ self.assertEqual(envvars, {
197+ "FAKE_JUJU_FAILURES": "x",
198+ "FAKE_JUJU_LOGS_DIR": "y",
199+ })
200+
201+ def test_nonempty_to_empty(self):
202+ """set_envvars() with no args "unsets" existing values."""
203+ envvars = {
204+ "FAKE_JUJU_FAILURES": "x",
205+ "FAKE_JUJU_LOGS_DIR": "y",
206+ }
207+ set_envvars(envvars)
208+
209+ self.assertEqual(envvars, {
210+ "FAKE_JUJU_FAILURES": "",
211+ "FAKE_JUJU_LOGS_DIR": "",
212+ })

Subscribers

People subscribed via source and target branches

to all changes: