Merge lp:~sseman/juju-ci-tools/add-juju1x-to-multi-series into lp:juju-ci-tools

Proposed by Seman
Status: Merged
Merged at revision: 1373
Proposed branch: lp:~sseman/juju-ci-tools/add-juju1x-to-multi-series
Merge into: lp:juju-ci-tools
Diff against target: 260 lines (+98/-31)
4 files modified
assess_multi_series_charms.py (+32/-15)
jujupy.py (+3/-0)
tests/test_assess_multi_series_charms.py (+55/-16)
tests/test_jujupy.py (+8/-0)
To merge this branch: bzr merge lp:~sseman/juju-ci-tools/add-juju1x-to-multi-series
Reviewer Review Type Date Requested Status
Curtis Hovey (community) code Approve
Review via email: mp+292747@code.launchpad.net

Description of the change

Juju version 1.25.5 supports list of series in the charm's metadata.yaml file. It pops the first series in list and use it as a default series.

This branch updates the assess_multi_series_charms to support Juju 1.X tests.

To post a comment you must log in.
Revision history for this message
Curtis Hovey (sinzui) wrote :

Thank you.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'assess_multi_series_charms.py'
2--- assess_multi_series_charms.py 2016-04-15 16:59:14 +0000
3+++ assess_multi_series_charms.py 2016-04-25 06:32:05 +0000
4@@ -36,6 +36,7 @@
5 import argparse
6 from collections import namedtuple
7 import logging
8+import os
9 import subprocess
10 import sys
11
12@@ -43,6 +44,7 @@
13 from utility import (
14 add_basic_testing_arguments,
15 configure_logging,
16+ local_charm_path,
17 make_charm,
18 temp_dir,
19 )
20@@ -55,7 +57,8 @@
21 log = logging.getLogger("assess_multi_series_charms")
22
23
24-Test = namedtuple("Test", ["series", "service", "force", "success", "machine"])
25+Test = namedtuple("Test", ["series", "service", "force", "success", "machine",
26+ "juju1x_supported"])
27
28
29 def assess_multi_series_charms(client):
30@@ -67,28 +70,38 @@
31 """
32 tests = [
33 Test(series="precise", service='test0', force=False, success=False,
34- machine=None),
35+ machine=None, juju1x_supported=False),
36 Test(series=None, service='test1', force=False, success=True,
37- machine='0'),
38+ machine='0', juju1x_supported=True),
39 Test(series="trusty", service='test2', force=False, success=True,
40- machine='1'),
41+ machine='1', juju1x_supported=True),
42 Test(series="xenial", service='test3', force=False, success=True,
43- machine='2'),
44+ machine='2', juju1x_supported=False),
45 Test(series="precise", service='test4', force=True, success=True,
46- machine='3'),
47+ machine='3', juju1x_supported=False),
48 ]
49- with temp_dir() as charm_dir:
50- make_charm(charm_dir, series=['trusty', 'xenial'])
51+ with temp_dir() as repository:
52+ charm_name = 'dummy'
53+ charm_dir = os.path.join(repository, 'trusty', charm_name)
54+ os.makedirs(charm_dir)
55+ make_charm(
56+ charm_dir, min_ver=None, series=['trusty', 'xenial'],
57+ name=charm_name)
58+ charm_path = local_charm_path(
59+ charm=charm_name, juju_ver=client.version, series='trusty',
60+ repository=os.path.dirname(charm_dir))
61 for test in tests:
62+ if client.is_juju1x() and not test.juju1x_supported:
63+ continue
64 log.info(
65 "Assessing multi series charms: test: {} charm_dir:{}".format(
66- test, charm_dir))
67- assert_deploy(client, test, charm_dir)
68+ test, charm_path))
69+ assert_deploy(client, test, charm_path, repository=repository)
70 if test.machine:
71 check_series(client, machine=test.machine, series=test.series)
72
73
74-def assert_deploy(client, test, charm_dir):
75+def assert_deploy(client, test, charm_path, repository=None):
76 """Deploy a charm and assert a success or fail.
77
78 :param client: Juju client
79@@ -97,16 +110,20 @@
80 :type test: Test
81 :param charm_dir:
82 :type charm_dir: str
83+ :param repository: Direcotry path to the repository
84+ :type repository: str
85 :return: None
86 """
87 if test.success:
88- client.deploy(charm=charm_dir, series=test.series,
89- service=test.service, force=test.force)
90+ client.deploy(charm=charm_path, series=test.series,
91+ service=test.service, force=test.force,
92+ repository=repository)
93 client.wait_for_started()
94 else:
95 try:
96- client.deploy(charm=charm_dir, series=test.series,
97- service=test.service, force=test.force)
98+ client.deploy(charm=charm_path, series=test.series,
99+ service=test.service, force=test.force,
100+ repository=repository)
101 except subprocess.CalledProcessError:
102 return
103 raise JujuAssertionError('Assert deploy failed for {}'.format(test))
104
105=== modified file 'jujupy.py'
106--- jujupy.py 2016-04-21 22:09:04 +0000
107+++ jujupy.py 2016-04-25 06:32:05 +0000
108@@ -1114,6 +1114,9 @@
109 def add_subnet(self, subnet, space):
110 self.juju('add-subnet', (subnet, space))
111
112+ def is_juju1x(self):
113+ return self.version.startswith('1.')
114+
115
116 class EnvJujuClient2B2(EnvJujuClient):
117
118
119=== modified file 'tests/test_assess_multi_series_charms.py'
120--- tests/test_assess_multi_series_charms.py 2016-04-14 19:29:39 +0000
121+++ tests/test_assess_multi_series_charms.py 2016-04-25 06:32:05 +0000
122@@ -6,6 +6,7 @@
123 Mock,
124 patch,
125 )
126+import os
127 import StringIO
128 import subprocess
129
130@@ -71,7 +72,10 @@
131
132 def test_assess_multi_series_charms(self):
133 mock_client = Mock(
134- spec=["deploy", "get_juju_output", "wait_for_started"])
135+ spec=["deploy", "get_juju_output", "wait_for_started",
136+ "is_juju1x"])
137+ mock_client.version = '2.0.0'
138+ mock_client.is_juju1x.return_value = False
139 mock_client.get_juju_output.return_value = "Codename: trusty"
140 mock_client.deploy.side_effect = [
141 subprocess.CalledProcessError(None, None),
142@@ -88,16 +92,18 @@
143 autospec=True) as cs_mock:
144 assess_multi_series_charms(mock_client)
145 self.assertEqual(mock_client.wait_for_started.call_count, 4)
146+ charm = os.path.join(charm_dir, 'trusty', 'dummy')
147 calls = [
148- call(charm=charm_dir, force=False, series='precise',
149- service='test0'),
150- call(charm=charm_dir, force=False, series=None, service='test1'),
151- call(charm=charm_dir, force=False, series='trusty',
152- service='test2'),
153- call(charm=charm_dir, force=False, series='xenial',
154- service='test3'),
155- call(charm=charm_dir, force=True, series='precise',
156- service='test4')
157+ call(charm=charm, force=False, repository=charm_dir,
158+ series='precise', service='test0'),
159+ call(charm=charm, force=False, repository=charm_dir,
160+ series=None, service='test1'),
161+ call(charm=charm, force=False, repository=charm_dir,
162+ series='trusty', service='test2'),
163+ call(charm=charm, force=False, repository=charm_dir,
164+ series='xenial', service='test3'),
165+ call(charm=charm, force=True, repository=charm_dir,
166+ series='precise', service='test4')
167 ]
168 self.assertEqual(mock_client.deploy.mock_calls, calls)
169 td_mock.assert_called_once_with()
170@@ -108,33 +114,66 @@
171 call(mock_client, machine='3', series='precise')]
172 self.assertEqual(cs_mock.mock_calls, cs_calls)
173
174+ def test_assess_multi_series_charms_juju1x(self):
175+ mock_client = Mock(
176+ spec=[
177+ "deploy", "get_juju_output", "wait_for_started", "is_juju1x"])
178+ mock_client.version = '1.25.5'
179+ mock_client.is_juju1x.return_value = True
180+ mock_client.get_juju_output.return_value = "Codename: trusty"
181+ mock_client.deploy.return_value = None
182+ with temp_dir() as charm_dir:
183+ with patch('assess_multi_series_charms.temp_dir',
184+ autospec=True) as td_mock:
185+ td_mock.return_value.__enter__.return_value = charm_dir
186+ with patch('assess_multi_series_charms.check_series',
187+ autospec=True) as cs_mock:
188+ assess_multi_series_charms(mock_client)
189+ self.assertEqual(mock_client.wait_for_started.call_count, 2)
190+ charm = os.path.join('local:trusty', 'dummy')
191+ calls = [
192+ call(charm=charm, force=False, repository=charm_dir,
193+ series=None, service='test1'),
194+ call(charm=charm, force=False, repository=charm_dir,
195+ series='trusty', service='test2')
196+ ]
197+ self.assertEqual(mock_client.deploy.mock_calls, calls)
198+ td_mock.assert_called_once_with()
199+ cs_calls = [
200+ call(mock_client, machine='0', series=None),
201+ call(mock_client, machine='1', series='trusty')]
202+ self.assertEqual(cs_mock.mock_calls, cs_calls)
203+
204 def test_assert_deploy(self):
205 test = Test(series='trusty', service='test1', force=False,
206- success=True, machine='0')
207+ success=True, machine='0', juju1x_supported=False)
208 mock_client = Mock(
209 spec=["deploy", "get_juju_output", "wait_for_started"])
210 assert_deploy(mock_client, test, '/tmp/foo')
211 mock_client.deploy.assert_called_once_with(
212- charm='/tmp/foo', force=False, series='trusty', service='test1')
213+ charm='/tmp/foo', force=False, repository=None, series='trusty',
214+ service='test1')
215
216 def test_assert_deploy_success_false(self):
217 test = Test(series='trusty', service='test1', force=False,
218- success=False, machine='0')
219+ success=False, machine='0', juju1x_supported=False)
220 mock_client = Mock(
221 spec=["deploy", "get_juju_output", "wait_for_started"])
222 mock_client.deploy.side_effect = subprocess.CalledProcessError(
223 None, None)
224 assert_deploy(mock_client, test, '/tmp/foo')
225 mock_client.deploy.assert_called_once_with(
226- charm='/tmp/foo', force=False, series='trusty', service='test1')
227+ charm='/tmp/foo', force=False, repository=None, series='trusty',
228+ service='test1')
229
230 def test_assert_deploy_success_false_raises_exception(self):
231 test = Test(series='trusty', service='test1', force=False,
232- success=False, machine='0')
233+ success=False, machine='0', juju1x_supported=False)
234 mock_client = Mock(
235 spec=["deploy", "get_juju_output", "wait_for_started"])
236 with self.assertRaisesRegexp(
237 JujuAssertionError, 'Assert deploy failed for'):
238 assert_deploy(mock_client, test, '/tmp/foo')
239 mock_client.deploy.assert_called_once_with(
240- charm='/tmp/foo', force=False, series='trusty', service='test1')
241+ charm='/tmp/foo', force=False, repository=None, series='trusty',
242+ service='test1')
243
244=== modified file 'tests/test_jujupy.py'
245--- tests/test_jujupy.py 2016-04-22 04:14:41 +0000
246+++ tests/test_jujupy.py 2016-04-25 06:32:05 +0000
247@@ -2806,6 +2806,14 @@
248 client.enable_feature('nomongo')
249 self.assertEqual(str(ctx.exception), "Unknown feature flag: 'nomongo'")
250
251+ def test_is_juju1x(self):
252+ client = EnvJujuClient(None, '1.25.5', None)
253+ self.assertTrue(client.is_juju1x())
254+
255+ def test_is_juju1x_false(self):
256+ client = EnvJujuClient(None, '2.0.0', None)
257+ self.assertFalse(client.is_juju1x())
258+
259
260 class TestEnvJujuClient2B2(ClientTest):
261

Subscribers

People subscribed via source and target branches