Merge lp:~james-page/charms/trusty/neutron-agents-midonet/trunk into lp:~celebdor/charms/trusty/neutron-agents-midonet/split

Proposed by James Page
Status: Superseded
Proposed branch: lp:~james-page/charms/trusty/neutron-agents-midonet/trunk
Merge into: lp:~celebdor/charms/trusty/neutron-agents-midonet/split
Diff against target: 553 lines (+159/-179)
7 files modified
hooks/services.py (+9/-3)
tests/006-minimal-trusty-kilo-mem (+29/-0)
tests/010-basic-trusty-juno (+3/-6)
tests/011-basic-trusty-kilo (+3/-6)
tests/012-basic-trusty-liberty (+22/-0)
tests/basic_deployment.py (+71/-100)
unit_tests/test_context.py (+22/-64)
To merge this branch: bzr merge lp:~james-page/charms/trusty/neutron-agents-midonet/trunk
Reviewer Review Type Date Requested Status
Antoni Segura Puimedon Pending
Review via email: mp+286180@code.launchpad.net

This proposal has been superseded by a proposal from 2016-02-16.

To post a comment you must log in.

Unmerged revisions

51. By James Page

Misc updates

50. By James Page

Tweak charm sources

49. By James Page

Fully mock out unit tests from underlying os

48. By Antoni Segura Puimedon <email address hidden>

amulet: remove old tests and add check for nova-api-metadata

47. By Antoni Segura Puimedon <email address hidden>

Fix unit tests

46. By Antoni Segura Puimedon <email address hidden>

linting fix

45. By Antoni Segura Puimedon <email address hidden>

use the right midonet plugin for Liberty and above

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'hooks/services.py'
--- hooks/services.py 2016-02-04 11:42:36 +0000
+++ hooks/services.py 2016-02-16 14:28:40 +0000
@@ -18,9 +18,9 @@
18from charmhelpers.contrib.openstack import utils18from charmhelpers.contrib.openstack import utils
19from charmhelpers.core import hookenv19from charmhelpers.core import hookenv
20from charmhelpers.core import host20from charmhelpers.core import host
21from charmhelpers.core import unitdata
22from charmhelpers.core.services import base21from charmhelpers.core.services import base
23from charmhelpers.core.services import helpers22from charmhelpers.core.services import helpers
23from charmhelpers.core import unitdata
24from midonet_helpers import puppet24from midonet_helpers import puppet
25from midonet_helpers import relations as common_relations25from midonet_helpers import relations as common_relations
26from midonet_helpers import repositories26from midonet_helpers import repositories
@@ -86,6 +86,10 @@
86 amqp = context.AMQPContext()86 amqp = context.AMQPContext()
87 network_service = MidonetNetworkServiceContext(rel_name='neutron_agents')87 network_service = MidonetNetworkServiceContext(rel_name='neutron_agents')
88 midonet = common_relations.MidonetApiRelation()88 midonet = common_relations.MidonetApiRelation()
89 if ost_release in ('juno', 'kilo'):
90 midonet_plugin = 'python-neutron-plugin-midonet'
91 else:
92 midonet_plugin = 'python-networking-midonet'
8993
90 manager = base.ServiceManager([94 manager = base.ServiceManager([
91 {95 {
@@ -102,7 +106,7 @@
102 source='dhcp_agent.ini',106 source='dhcp_agent.ini',
103 target='/etc/neutron/dhcp_agent.ini'),107 target='/etc/neutron/dhcp_agent.ini'),
104 puppet.InstallPackagesCallback(108 puppet.InstallPackagesCallback(
105 ('python-neutron-plugin-midonet',)),109 (midonet_plugin,)),
106 OSTRenderer('/etc/neutron/neutron.conf',110 OSTRenderer('/etc/neutron/neutron.conf',
107 [amqp]),111 [amqp]),
108 ],112 ],
@@ -127,8 +131,10 @@
127 ],131 ],
128 },132 },
129 ])133 ])
134
130 manager.manage()135 manager.manage()
131 if (host.service_running('neutron-dhcp-agent') and136 if (host.service_running('neutron-dhcp-agent') and
132 host.service_running('neutron-metadata-agent') and137 host.service_running('neutron-metadata-agent') and
133 host.service_running('nova-api-metadata')):138 host.service_running('nova-api-metadata')):
134 hookenv.status_set('active', 'All nova and neutron agents up and running')139 hookenv.status_set('active',
140 'All nova and neutron agents up and running')
135141
=== modified file 'tests/00-setup' (properties changed: +x to -x)
=== added file 'tests/006-minimal-trusty-kilo-mem'
--- tests/006-minimal-trusty-kilo-mem 1970-01-01 00:00:00 +0000
+++ tests/006-minimal-trusty-kilo-mem 2016-02-16 14:28:40 +0000
@@ -0,0 +1,29 @@
1#!/usr/bin/env python
2#
3# Copyright (c) 2015 Midokura SARL, All Rights Reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16import os
17
18import basic_deployment
19
20if __name__ == '__main__':
21 if None in (os.getenv('MEM_USERNAME'), os.getenv('MEM_PWD')):
22 print('Missing MEM_USERNAME and MEM_PWD environment variables for '
23 'running Midokura Enterprise MidoNet tests. Skipping test')
24 else:
25 deployment = basic_deployment.AgentMinimumDeployment(
26 ubuntu_series='trusty',
27 openstack_origin='cloud:trusty-kilo',
28 midonet_origin='mem-1.9')
29 deployment.run_tests()
030
=== modified file 'tests/010-basic-trusty-juno'
--- tests/010-basic-trusty-juno 2016-01-27 17:01:34 +0000
+++ tests/010-basic-trusty-juno 2016-02-16 14:28:40 +0000
@@ -1,4 +1,4 @@
1#!/usr/bin/python1#!/usr/bin/env python
2#2#
3# Copyright (c) 2015 Midokura SARL, All Rights Reserved.3# Copyright (c) 2015 Midokura SARL, All Rights Reserved.
4#4#
@@ -13,13 +13,10 @@
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and14# See the License for the specific language governing permissions and
15# limitations under the License.15# limitations under the License.
1616import basic_deployment
17
18from basic_deployment import MidonetBasicDeployment
1917
20if __name__ == '__main__':18if __name__ == '__main__':
21 deployment = MidonetBasicDeployment(19 deployment = basic_deployment.AgentMinimumDeployment(
22 ubuntu_series='trusty',20 ubuntu_series='trusty',
23 openstack_origin='cloud:trusty-juno',21 openstack_origin='cloud:trusty-juno',
24 midonet_origin='midonet-2015.06')22 midonet_origin='midonet-2015.06')
25 deployment.run_tests()
2623
=== modified file 'tests/011-basic-trusty-kilo'
--- tests/011-basic-trusty-kilo 2016-01-27 17:01:34 +0000
+++ tests/011-basic-trusty-kilo 2016-02-16 14:28:40 +0000
@@ -1,4 +1,4 @@
1#!/usr/bin/python1#!/usr/bin/env python
2#2#
3# Copyright (c) 2015 Midokura SARL, All Rights Reserved.3# Copyright (c) 2015 Midokura SARL, All Rights Reserved.
4#4#
@@ -13,13 +13,10 @@
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and14# See the License for the specific language governing permissions and
15# limitations under the License.15# limitations under the License.
1616import basic_deployment
17
18from basic_deployment import MidonetBasicDeployment
1917
20if __name__ == '__main__':18if __name__ == '__main__':
21 deployment = MidonetBasicDeployment(19 deployment = basic_deployment.AgentMinimumDeployment(
22 ubuntu_series='trusty',20 ubuntu_series='trusty',
23 openstack_origin='cloud:trusty-kilo',21 openstack_origin='cloud:trusty-kilo',
24 midonet_origin='midonet-2015.06')22 midonet_origin='midonet-2015.06')
25 deployment.run_tests()
2623
=== added file 'tests/012-basic-trusty-liberty'
--- tests/012-basic-trusty-liberty 1970-01-01 00:00:00 +0000
+++ tests/012-basic-trusty-liberty 2016-02-16 14:28:40 +0000
@@ -0,0 +1,22 @@
1#!/usr/bin/env python
2#
3# Copyright (c) 2015 Midokura SARL, All Rights Reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16import basic_deployment
17
18if __name__ == '__main__':
19 deployment = basic_deployment.AgentMinimumDeployment(
20 ubuntu_series='trusty',
21 openstack_origin='cloud:trusty-liberty',
22 midonet_origin='midonet-2015.06')
023
=== modified file 'tests/basic_deployment.py'
--- tests/basic_deployment.py 2016-02-04 11:42:36 +0000
+++ tests/basic_deployment.py 2016-02-16 14:28:40 +0000
@@ -31,7 +31,7 @@
31SETUP_TIMEOUT = 960031SETUP_TIMEOUT = 9600
3232
3333
34class MidonetBasicDeployment():34class AgentMinimumDeployment():
35 def __init__(self, ubuntu_series, openstack_origin=None,35 def __init__(self, ubuntu_series, openstack_origin=None,
36 midonet_origin=None):36 midonet_origin=None):
37 self.os_release = openstack_origin37 self.os_release = openstack_origin
@@ -43,6 +43,16 @@
43 self.d = amulet.Deployment(series=self.series)43 self.d = amulet.Deployment(series=self.series)
44 self.d.charm_name = 'neutron-agents-midonet'44 self.d.charm_name = 'neutron-agents-midonet'
4545
46 # Sentries
47 self.zookeeper_sentry = None
48 self.keystone_sentry = None
49 self.cassandra_sentry = None
50 self.nova_compute_sentry = None
51 self.mn_api_sentry = None
52 self.agents_mn_sentry = None
53 self.keystone_api_relation = None
54 self.zookeeper_api_relation = None
55
46 self._add_services()56 self._add_services()
47 self._add_relations()57 self._add_relations()
48 self._configure_services()58 self._configure_services()
@@ -50,37 +60,28 @@
50 self._initialize_tests()60 self._initialize_tests()
5161
52 def _add_services(self):62 def _add_services(self):
53 self.d.add('mysql', charm='cs:trusty/mysql', units=1,63 self.d.add('mysql', charm='mysql', units=1,
54 series=self.series)64 series=self.series)
55 self.d.add('rabbitmq-server', charm='cs:trusty/rabbitmq-server',65 self.d.add('keystone', charm='keystone', units=1, series=self.series)
66 self.d.add('cassandra', charm='cassandra',
56 units=1, series=self.series)67 units=1, series=self.series)
57 self.d.add('cassandra', charm='cassandra', units=1,68 self.d.add('zookeeper', charm='zookeeper', units=1,
58 branch='cs:trusty/cassandra', series=self.series)69 series=self.series)
59 self.d.add('keystone', charm='keystone', units=1, series=self.series,70 self.d.add('rabbitmq', charm='rabbitmq-server', units=1,
60 branch='cs:trusty/keystone')71 series=self.series)
61 self.d.add('compute', charm='nova-compute', units=1,72 self.d.add('nova', charm='nova-cloud-controller', units=1,
62 branch='cs:trusty/nova-compute', series=self.series,73 series=self.series)
63 constraints={'mem': '8G'})74 self.d.add('neutron',
64 self.d.add('neutron', charm='neutron-api', units=1,75 charm='cs:~openstack-charmers-next/trusty/neutron-api',
65 branch='lp:~celebdor/charms/trusty/neutron-api/liberty',76 units=1,
66 series=self.series)77 series=self.series)
67 self.d.add('nova', charm='nova-cloud-controller',78 self.d.add('midonet-api', charm='midonet-api',
68 units=1, series=self.series)
69 self.d.add('glance', charm='glance',
70 branch='cs:trusty/glance',
71 units=1, series=self.series)
72 self.d.add('cinder', charm='cinder',
73 branch='cs:trusty/glance',
74 units=1, series=self.series)
75 self.d.add('zookeeper', charm='cs:trusty/zookeeper', units=1,
76 series=self.series)
77 self.d.add('midonet-api', charm='midonet-api', units=1,
78 branch='lp:~celebdor/charms/trusty/midonet-api/trunk',79 branch='lp:~celebdor/charms/trusty/midonet-api/trunk',
79 series=self.series)80 series=self.series)
80 self.d.add('midonet-agent', charm='midonet-agent', units=1,81 self.d.add('midonet-agent', charm='midonet-agent',
81 branch='lp:~celebdor/charms/trusty/midonet-agent/trunk',82 branch='lp:~celebdor/charms/trusty/midonet-agent/trunk',
82 series=self.series)83 series=self.series)
83 self.d.add('neutron-agents-midonet', constraints={'mem': '4G'})84 self.d.add('neutron-agents-midonet', constraints={'mem': "4G"})
8485
85 def _add_relations(self):86 def _add_relations(self):
86 # Keystone87 # Keystone
@@ -89,65 +90,53 @@
89 # Nova90 # Nova
90 self.d.relate('mysql:shared-db', 'nova:shared-db')91 self.d.relate('mysql:shared-db', 'nova:shared-db')
91 self.d.relate('keystone:identity-service', 'nova:identity-service')92 self.d.relate('keystone:identity-service', 'nova:identity-service')
92 self.d.relate('rabbitmq-server:amqp', 'nova:amqp')93 self.d.relate('rabbitmq:amqp', 'nova:amqp')
93 self.d.relate('neutron-agents-midonet:neutron_agents',94 self.d.relate('neutron-agents-midonet:neutron_agents',
94 'nova:quantum-network-service')95 'nova:quantum-network-service')
95 self.d.relate('neutron:neutron-api', 'nova:neutron-api')96 self.d.relate('neutron:neutron-api', 'nova:neutron-api')
96 self.d.relate('compute:cloud-compute', 'nova:cloud-compute')
97 self.d.relate('glance:image-service', 'nova:image-service')
98 self.d.relate('cinder:cinder-volume-service',
99 'nova:cinder-volume-service')
100
101 # Cinder
102 self.d.relate('keystone:identity-service', 'cinder:identity-service')
103 self.d.relate('mysql:shared-db', 'cinder:shared-db')
104 self.d.relate('rabbitmq-server:amqp', 'cinder:amqp')
105 self.d.relate('glance:image-service', 'cinder:image-service')
106
107 # Glance
108 self.d.relate('keystone:identity-service', 'glance:identity-service')
109 self.d.relate('mysql:shared-db', 'glance:shared-db')
110 self.d.relate('rabbitmq-server:amqp', 'glance:amqp')
11197
112 # Neutron98 # Neutron
113 self.d.relate('mysql:shared-db', 'neutron:shared-db')99 self.d.relate('mysql:shared-db', 'neutron:shared-db')
114 self.d.relate('keystone:identity-service', 'neutron:identity-service')100 self.d.relate('keystone:identity-service', 'neutron:identity-service')
115 self.d.relate('rabbitmq-server:amqp', 'neutron:amqp')101 self.d.relate('rabbitmq:amqp', 'neutron:amqp')
116 self.d.relate('neutron-agents-midonet:neutron-plugin-api',102 self.d.relate('neutron-agents-midonet:neutron-plugin-api',
117 'neutron:neutron-plugin-api')103 'neutron:neutron-plugin-api')
104 self.d.relate('midonet-api:midonet-api', 'neutron:midonet')
118105
119 # MidoNet106 # MidoNet
120 self.d.relate('keystone:identity-service', 'midonet-api:keystone')107 self.d.relate('keystone:identity-service', 'midonet-api:keystone')
121 self.d.relate('zookeeper:zookeeper', 'midonet-api:zookeeper')108 self.d.relate('zookeeper:zookeeper', 'midonet-api:zookeeper')
122 self.d.relate('midonet-agent:host', 'midonet-api:host')109 self.d.relate('midonet-agent:host', 'midonet-api:host')
123 self.d.relate('neutron:midonet', 'midonet-api:midonet-api')110 self.d.relate('rabbitmq:amqp', 'neutron-agents-midonet:amqp')
124 self.d.relate('rabbitmq-server:amqp', 'neutron-gents-midonet:amqp')
125 self.d.relate('midonet-agent:host', 'neutron-agents-midonet:agent')111 self.d.relate('midonet-agent:host', 'neutron-agents-midonet:agent')
112 self.d.relate('midonet-api:midonet-api',
113 'neutron-agents-midonet:midonet')
126 self.d.relate('cassandra:database', 'midonet-agent:cassandra')114 self.d.relate('cassandra:database', 'midonet-agent:cassandra')
127 self.d.relate('zookeeper:zookeeper', 'midonet-agent:zookeeper')115 self.d.relate('zookeeper:zookeeper', 'midonet-agent:zookeeper')
128 self.d.relate('midonet-api:midonet-api',
129 'neutron-agents-midonet:midonet')
130
131 # Compute
132 self.d.relate('rabbitmq-server:amqp', 'compute:amqp')
133 self.d.relate('midonet-agent:neutron-plugin', 'compute:neutron-plugin')
134 self.d.relate('glance:image-service', 'compute:image-service')
135116
136 def _configure_services(self):117 def _configure_services(self):
137 repo_config = {'midonet-origin': self.midonet_origin,
138 'openstack-origin': self.os_release}
139 if self.mem:
140 repo_config.update(self.mem_credentials)
141
142 self.d.configure('keystone', {118 self.d.configure('keystone', {
143 'admin-user': 'admin',119 'admin-user': 'admin',
144 'admin-password': 'openstack',120 'admin-password': 'openstack',
145 'admin-token': 'osttesting',121 'admin-token': 'osttesting',
146 'enable-pki': 'false',122 'enable-pki': 'false',
147 'openstack-origin': self.os_release})123 'openstack-origin': self.os_release})
148124
149 self.d.configure('mysql', {125 self.d.configure('nova', {
150 'max-connections': 500})126 'network-manager': 'Neutron',
127 'openstack-origin': self.os_release})
128
129 neutron_conf = {
130 'l2-population': 'false',
131 'neutron-security-groups': 'true',
132 'neutron-plugin': 'midonet',
133 'neutron-external-network': 'Public_Network',
134 'midonet-origin': self.midonet_origin,
135 'openstack-origin': self.os_release}
136 if self.mem:
137 neutron_conf.update(self.mem_credentials)
138
139 self.d.configure('neutron', neutron_conf)
151140
152 self.d.configure('cassandra', {141 self.d.configure('cassandra', {
153 'authenticator': 'AllowAllAuthenticator',142 'authenticator': 'AllowAllAuthenticator',
@@ -157,33 +146,16 @@
157 'deb http://debian.datastax.com/community 2.0 main',146 'deb http://debian.datastax.com/community 2.0 main',
158 'extra_packages': 'dsc20'})147 'extra_packages': 'dsc20'})
159148
160 self.d.configure('compute', {149 self.d.configure('mysql', {'max-connections': 500})
161 'openstack-origin': self.os_release,150
162 'virt-type': 'qemu',151 api_config = {'midonet-origin': self.midonet_origin,
163 'flat-interface': 'eth0',152 'openstack-origin': self.os_release}
164 'manage-neutron-plugin-legacy-mode': 'false'})153 if self.mem:
165154 api_config.update(self.mem_credentials)
166 self.d.configure('nova', {155 self.d.configure('midonet-api', api_config)
167 'openstack-origin': self.os_release,156 self.d.configure('midonet-agent', api_config)
168 'network-manager': 'Neutron',157 self.d.configure('neutron-agents-midonet', api_config)
169 'shared-secret': 'secret'})158
170
171 self.d.configure('neutron', {
172 'neutron-plugin': 'midonet',
173 'neutron-security-groups': 'True',
174 'neutron-external-network': 'Public_Network',
175 'l2-population': 'False',
176 'openstack-origin': self.os_release,
177 'midonet-origin': self.midonet_origin})
178
179
180 self.d.configure('midonet-api', repo_config)
181
182 neutron_agts_midonet_config = {'shared-secret': 'secret'}
183 neutron_agts_midonet_config.update(repo_config)
184 self.d.configure('neutron-agents-midonet', neutron_agts_midonet_config)
185
186 self.d.configure('midonet-agent', repo_config)
187159
188 def _deploy(self):160 def _deploy(self):
189 try:161 try:
@@ -196,8 +168,6 @@
196 def _initialize_tests(self):168 def _initialize_tests(self):
197 self.zookeeper_sentry = self.d.sentry.unit['zookeeper/0']169 self.zookeeper_sentry = self.d.sentry.unit['zookeeper/0']
198 self.keystone_sentry = self.d.sentry.unit['keystone/0']170 self.keystone_sentry = self.d.sentry.unit['keystone/0']
199 self.cassandra_sentry = self.d.sentry.unit['cassandra/0']
200 self.nova_compute_sentry = self.d.sentry.unit['compute/0']
201 self.mn_api_sentry = self.d.sentry.unit['midonet-api/0']171 self.mn_api_sentry = self.d.sentry.unit['midonet-api/0']
202 self.mn_agent_sentry = self.d.sentry.unit['midonet-agent/0']172 self.mn_agent_sentry = self.d.sentry.unit['midonet-agent/0']
203 self.agents_mn_sentry = self.d.sentry.unit['neutron-agents-midonet/0']173 self.agents_mn_sentry = self.d.sentry.unit['neutron-agents-midonet/0']
@@ -206,12 +176,6 @@
206 'identity-service', 'midonet-api:keystone')176 'identity-service', 'midonet-api:keystone')
207 self.zookeeper_api_relation = self.zookeeper_sentry.relation(177 self.zookeeper_api_relation = self.zookeeper_sentry.relation(
208 'zookeeper', 'midonet-api:zookeeper')178 'zookeeper', 'midonet-api:zookeeper')
209 self.zk_host_relation = self.zookeeper_sentry.relation(
210 'zookeeper', 'midonet-agent:zookeeper')
211 self.cs_host_relation = self.cassandra_sentry.relation(
212 'database', 'midonet-agent:cassandra')
213 self.api_host_relation = self.mn_api_sentry.relation(
214 'host', 'midonet-agent:host')
215179
216 def run_tests(self):180 def run_tests(self):
217 for test in dir(self):181 for test in dir(self):
@@ -249,3 +213,10 @@
249 amulet.raise_status(amulet.FAIL,213 amulet.raise_status(amulet.FAIL,
250 msg="neutron-metadata-agent not running: %s" %214 msg="neutron-metadata-agent not running: %s" %
251 meta_agent_out)215 meta_agent_out)
216 u.log.debug('Checking nova-api-metadata...')
217 meta_agent_out, _ = self.agents_mn_sentry.run(
218 'service nova-api-metadata status')
219 if 'running' not in meta_agent_out:
220 amulet.raise_status(amulet.FAIL,
221 msg="nova-api-metadata not running: %s" %
222 meta_agent_out)
252223
=== modified file 'unit_tests/test_context.py'
--- unit_tests/test_context.py 2016-01-28 00:53:03 +0000
+++ unit_tests/test_context.py 2016-02-16 14:28:40 +0000
@@ -18,7 +18,7 @@
18import shutil18import shutil
19import tempfile19import tempfile
2020
21import mock21import services
2222
23from .midonet_helpers import test23from .midonet_helpers import test
2424
@@ -55,38 +55,20 @@
55 '10.10.10.11']55 '10.10.10.11']
56 test.CharmTestCase.__init__(self, *args, **kwargs)56 test.CharmTestCase.__init__(self, *args, **kwargs)
5757
58 @mock.patch('charmhelpers.fetch.apt_install')58 def setUp(self):
59 def setUp(self, apt_install):
60
61 import services
62
63 self.relations = test.FakeRelation(self._full_relation_data())59 self.relations = test.FakeRelation(self._full_relation_data())
64 self.services = services
65 test.CharmTestCase.setUp(self, services.hookenv, HOOKENV_PATCHES)60 test.CharmTestCase.setUp(self, services.hookenv, HOOKENV_PATCHES)
6661
67 def lsb_release():62 def lsb_release():
68 ubuntu_trusty = {63 return {
69 'DISTRIB_ID': 'Ubuntu',64 'DISTRIB_ID': 'Ubuntu',
70 'DISTRIB_RELEASE': '14.04',65 'DISTRIB_RELEASE': '14.04',
71 'DISTRIB_CODENAME': 'trusty',66 'DISTRIB_CODENAME': 'trusty',
72 'DISTRIB_DESCRIPTION': "Ubuntu 14.04.3 LTS",67 'DISTRIB_DESCRIPTION': "Ubuntu 14.04.3 LTS",
73 }68 }
7469
75 try:
76 data = services.host.lsb_release()
77 except Exception:
78 return ubuntu_trusty
79 if data.get('DISTRIB_ID') != 'Ubuntu':
80 return ubuntu_trusty
81 return data
82
83 def get_os_codename_package(pkg, fatal=True):70 def get_os_codename_package(pkg, fatal=True):
84 version = 'liberty'71 return 'liberty'
85 try:
86 ret_vers = services.utils.get_os_codename_package(pkg, fatal)
87 except Exception:
88 return version
89 return ret_vers
9072
91 self.patch_all(services.utils,73 self.patch_all(services.utils,
92 ('get_os_codename_package',74 ('get_os_codename_package',
@@ -94,38 +76,21 @@
94 self.lsb_release.side_effect = lsb_release76 self.lsb_release.side_effect = lsb_release
95 self.get_os_codename_package.side_effect = get_os_codename_package77 self.get_os_codename_package.side_effect = get_os_codename_package
9678
79 self.patch_all(services.base, ('service_restart', 'service_stop'))
80 self.patch_all(services.helpers, ('render_template',))
97 self.patch_all(services.host, ('service_running',))81 self.patch_all(services.host, ('service_running',))
98 self.service_running.return_value = True82 self.patch_all(services.puppet, ('_apply',))
9983 self.patch_all(services.templating.OSConfigRenderer, ('write_all',))
100 _templating = mock.patch.object(services.helpers, 'render_template')
101 setattr(self, 'render_template', _templating.start())
102 self.addCleanup(_templating.stop)
103
104 _check_call = mock.patch.object(services.hookenv.subprocess,
105 'check_call')
106 setattr(self, 'check_call', _check_call.start())
107 self.addCleanup(_check_call.stop)
108
109 _service_restart = mock.patch.object(services.base, 'service_restart')
110 setattr(self, 'service_restart', _service_restart.start())
111 self.addCleanup(_service_restart.stop)
112
113 _service_stop = mock.patch.object(services.base, 'service_stop')
114 setattr(self, 'service_stop', _service_stop.start())
115 self.addCleanup(_service_stop.stop)
116
117 _relation_helpers = mock.patch.object(
118 services.relations.helpers, 'hookenv', spec=[
119 'relation_ids',
120 'related_units',
121 'relation_get'])
122 setattr(self, 'relation_helpers', _relation_helpers.start())
123 self.addCleanup(_relation_helpers.stop)
12484
125 self.test_config.config['openstack-origin'] = 'cloud:trusty-liberty'85 self.test_config.config['openstack-origin'] = 'cloud:trusty-liberty'
126 self.config.side_effect = self.test_config.get86 self.config.side_effect = self.test_config.get
127 self.relation_get.side_effect = self.test_relation.get87 self.related_units.side_effect = self.relations.related_units
88 self.relation_get.side_effect = self.relations.get
89 self.relation_ids.side_effect = self.relations.relation_ids
12890
91 services.context.related_units = self.related_units
92 services.context.relation_get = self.relation_get
93 services.context.relation_ids = self.relation_ids
129 services.context.config = self.config94 services.context.config = self.config
13095
131 self.charm_dir.return_value = tempfile.mkdtemp()96 self.charm_dir.return_value = tempfile.mkdtemp()
@@ -135,21 +100,7 @@
135 test.CharmTestCase.tearDown(self)100 test.CharmTestCase.tearDown(self)
136101
137 def test_config_change(self):102 def test_config_change(self):
138103 services.manage()
139 self.data = self._full_relation_data()
140
141 self.relation_helpers.relation_ids.side_effect = (
142 self.relations.relation_ids)
143
144 import services
145 services.context.relation_ids = self.relation_helpers.relation_ids
146
147 self.relation_helpers.related_units.side_effect = (
148 self.relations.related_units)
149 self.relation_helpers.relation_get.side_effect = (
150 self.relations.get)
151
152 self.services.manage()
153104
154 self.assertTrue(self.render_template.called)105 self.assertTrue(self.render_template.called)
155 self.assertTrue(self.service_restart.called)106 self.assertTrue(self.service_restart.called)
@@ -181,4 +132,11 @@
181 'port': 8080,132 'port': 8080,
182 },133 },
183 },134 },
135 'amqp:2': {
136 'rabbitmq/0': {
137 'clustered': False,
138 'private-address': '10.0.30.14',
139 'password': 'foopass',
140 },
141 },
184 }142 }

Subscribers

People subscribed via source and target branches