Merge lp:~freyes/charms/trusty/nova-cloud-controller/bug-989337 into lp:~openstack-charmers-archive/charms/trusty/nova-cloud-controller/next

Proposed by Felipe Reyes
Status: Superseded
Proposed branch: lp:~freyes/charms/trusty/nova-cloud-controller/bug-989337
Merge into: lp:~openstack-charmers-archive/charms/trusty/nova-cloud-controller/next
Diff against target: 345 lines (+133/-22)
10 files modified
hooks/nova_cc_context.py (+36/-17)
hooks/nova_cc_hooks.py (+9/-0)
hooks/nova_cc_utils.py (+3/-1)
metadata.yaml (+2/-0)
templates/folsom/nova.conf (+5/-0)
templates/grizzly/nova.conf (+5/-0)
templates/havana/nova.conf (+4/-0)
templates/icehouse/nova.conf (+4/-0)
unit_tests/test_nova_cc_contexts.py (+56/-0)
unit_tests/test_nova_cc_utils.py (+9/-4)
To merge this branch: bzr merge lp:~freyes/charms/trusty/nova-cloud-controller/bug-989337
Reviewer Review Type Date Requested Status
Edward Hope-Morley Needs Fixing
OpenStack Charmers Pending
Review via email: mp+239671@code.launchpad.net

This proposal has been superseded by a proposal from 2014-11-10.

Description of the change

This branch extends the charm to install python-memcache, and configure nova.conf adding the key memcached_servers when a relationship with memcached service is established.

If multiple units of memcached are available, all of them are used (memcached_servers = host1:port1,host2:port,host3:port3)

To post a comment you must log in.
Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_lint_check #771 nova-cloud-controller-next for freyes mp239671
    LINT OK: believed to pass, but you should confirm results

LINT Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_lint_check/make-lint.771:
I: config.yaml: option haproxy-client-timeout has no default value
I: config.yaml: option ssl_cert has no default value
I: config.yaml: option nvp-l3-uuid has no default value
I: config.yaml: option os-internal-network has no default value

Full lint output: http://paste.ubuntu.com/8694351/
Build: http://10.98.191.181:8080/job/charm_lint_check/771/

Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_unit_test #579 nova-cloud-controller-next for freyes mp239671
    UNIT FAIL: unit-test failed

UNIT Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_unit_test/unit-test.579:
Ran 4 tests in 0.150s

FAILED (errors=2)
make: *** [unit_test] Error 1

Full unit output: http://paste.ubuntu.com/8694352/
Build: http://10.98.191.181:8080/job/charm_unit_test/579/

Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_amulet_test #304 nova-cloud-controller-next for freyes mp239671
    AMULET OK: believed to pass, but you should confirm results

AMULET Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_amulet_test/make-test.304:
juju-test.conductor DEBUG : Tearing down osci-sv05 juju environment
juju-test.conductor DEBUG : Calling "juju destroy-environment -y osci-sv05"
WARNING cannot delete security group "juju-osci-sv05-0". Used by another environment?
juju-test INFO : Results: 3 passed, 0 failed, 0 errored

Full amulet output: http://paste.ubuntu.com/8694683/
Build: http://10.98.191.181:8080/job/charm_amulet_test/304/

Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_unit_test #582 nova-cloud-controller-next for freyes mp239671
    UNIT FAIL: unit-test failed

UNIT Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_unit_test/unit-test.582:
Ran 4 tests in 0.153s

FAILED (errors=2)
make: *** [unit_test] Error 1

Full unit output: http://paste.ubuntu.com/8705925/
Build: http://10.98.191.181:8080/job/charm_unit_test/582/

Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_lint_check #774 nova-cloud-controller-next for freyes mp239671
    LINT OK: believed to pass, but you should confirm results

LINT Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_lint_check/make-lint.774:
I: config.yaml: option haproxy-client-timeout has no default value
I: config.yaml: option ssl_cert has no default value
I: config.yaml: option nvp-l3-uuid has no default value
I: config.yaml: option os-internal-network has no default value

Full lint output: http://paste.ubuntu.com/8705924/
Build: http://10.98.191.181:8080/job/charm_lint_check/774/

Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_amulet_test #307 nova-cloud-controller-next for freyes mp239671
    AMULET FAIL: amulet-test failed

AMULET Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_amulet_test/make-test.307:
    return self.read(buflen)
  File "/usr/lib/python2.7/ssl.py", line 260, in read
    return self._sslobj.read(len)
socket.error: [Errno 110] Connection timed out

Full amulet output: http://paste.ubuntu.com/8706467/
Build: http://10.98.191.181:8080/job/charm_amulet_test/307/

Revision history for this message
Edward Hope-Morley (hopem) wrote :

I'm getting a couple of unit test failures here. Looks like a couple of extra mocks needed - see attached u/t output.

review: Needs Fixing
Revision history for this message
Edward Hope-Morley (hopem) wrote :
Download full text (3.7 KiB)

Hmm can't attach so pasting:

$ make unit_test
Starting unit tests...
nose.plugins.cover: ERROR: Coverage not available: unable to import coverage module
test_instance_console_context_with_memcache (unit_tests.test_nova_cc_contexts.NovaComputeContextTests) ... ok
test_instance_console_context_without_memcache (unit_tests.test_nova_cc_contexts.NovaComputeContextTests) ... ok
Failure: OSError ([Errno 2] No such file or directory) ... ERROR
Failure: OSError ([Errno 2] No such file or directory) ... ERROR

======================================================================
ERROR: Failure: OSError ([Errno 2] No such file or directory)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName
    addr.filename, addr.module)
  File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/home/gizmo/Documents/reviews/nova-cloud-controller/bug-989337/unit_tests/test_nova_cc_hooks.py", line 6, in <module>
    import nova_cc_utils as utils
  File "hooks/nova_cc_utils.py", line 142, in <module>
    nova_cc_context.NeutronPostgresqlDBContext(),
  File "hooks/nova_cc_context.py", line 268, in __init__
    self).__init__(config('neutron-database'))
  File "hooks/charmhelpers/core/hookenv.py", line 44, in wrapper
    res = func(*args, **kwargs)
  File "hooks/charmhelpers/core/hookenv.py", line 281, in config
    config_data = json.loads(subprocess.check_output(config_cmd_line))
  File "/usr/lib/python2.7/subprocess.py", line 566, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

======================================================================
ERROR: Failure: OSError ([Errno 2] No such file or directory)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName
    addr.filename, addr.module)
  File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/home/gizmo/Documents/reviews/nova-cloud-controller/bug-989337/unit_tests/test_nova_cc_utils.py", line 11, in <module>
    import nova_cc_utils as utils
  File "hooks/nova_cc_utils.py", line 142, in <module>
    nova_cc_context.NeutronPostgresqlDBContext(),
  File "hooks/nova_cc_context.py", line 268, in __init__
    self).__init__(config('neutron-database'))
  File "hooks/charmhelpers/core/hookenv.py", line 44, in wrapper
    res = func(*args, **kwa...

Read more...

Revision history for this message
Edward Hope-Morley (hopem) wrote :

FWIW, other than the above this lgtm

124. By Felipe Reyes

Changed the way charmhelpers.core.hookenv.config is imported

This change allows to easily monkey patch the function with a mock,
otherwise the 'config' function is left imported at the module level.

Revision history for this message
Felipe Reyes (freyes) wrote :

Edward, I fixed the broken tests, the patch was a little bit larger than what I expected, but they are working OK now.

Name Stmts Miss Cover Missing
-----------------------------------------------------
hooks/nova_cc_context 166 112 33% 21-28, 39-41, 48-59, 65-79, 86-104, 116-169, 180-195, 203-204, 208, 212-214, 219, 222-236, 242-256, 273-276, 281-283, 297-299
hooks/nova_cc_hooks 447 146 67% 132-135, 148-149, 173, 184-185, 189, 224, 229-234, 245, 325-328, 336-339, 345-348, 358-374, 383-385, 395-409, 413-422, 508, 518, 522-523, 576, 582-592, 597-608, 618-628, 633-672, 682-697, 705-709, 734-743, 767, 772-780, 806, 861, 865-868
hooks/nova_cc_utils 442 111 75% 296-301, 312-315, 325-326, 382, 384, 428-430, 434, 448-456, 463-468, 472-486, 592-594, 599-602, 607, 611, 635-636, 650-652, 673-674, 680-703, 707-713, 717-723, 729, 735, 742, 753-757, 842, 902-908, 912-914, 918-921, 925-937
-----------------------------------------------------
TOTAL 1055 369 65%
----------------------------------------------------------------------
Ran 99 tests in 7.518s

Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_lint_check #922 nova-cloud-controller-next for freyes mp239671
    LINT OK: passed

LINT Results (max last 5 lines):
  I: config.yaml: option os-admin-network has no default value
  I: config.yaml: option haproxy-client-timeout has no default value
  I: config.yaml: option ssl_cert has no default value
  I: config.yaml: option nvp-l3-uuid has no default value
  I: config.yaml: option os-internal-network has no default value

Full lint test output: http://paste.ubuntu.com/8822840/
Build: http://10.98.191.181:8080/job/charm_lint_check/922/

Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_unit_test #757 nova-cloud-controller-next for freyes mp239671
    UNIT OK: passed

UNIT Results (max last 5 lines):
  hooks/nova_cc_hooks 447 146 67% 132-135, 148-149, 173, 184-185, 189, 224, 229-234, 245, 325-328, 336-339, 345-348, 358-374, 383-385, 395-409, 413-422, 508, 518, 522-523, 576, 582-592, 597-608, 618-628, 633-672, 682-697, 705-709, 734-743, 767, 772-780, 806, 861, 865-868
  hooks/nova_cc_utils 442 111 75% 296-301, 312-315, 325-326, 382, 384, 428-430, 434, 448-456, 463-468, 472-486, 592-594, 599-602, 607, 611, 635-636, 650-652, 673-674, 680-703, 707-713, 717-723, 729, 735, 742, 753-757, 842, 902-908, 912-914, 918-921, 925-937
  TOTAL 1055 369 65%
  Ran 99 tests in 8.707s
  OK

Full unit test output: http://paste.ubuntu.com/8822843/
Build: http://10.98.191.181:8080/job/charm_unit_test/757/

Revision history for this message
Ryan Beisner (1chb1n) wrote :

UOSCI bot says:
charm_amulet_test #340 nova-cloud-controller-next for freyes mp239671
    AMULET OK: passed

AMULET Results (max last 5 lines):
  juju-test.conductor.15-basic-trusty-icehouse RESULT :
  juju-test.conductor DEBUG : Tearing down osci-sv07 juju environment
  juju-test.conductor DEBUG : Calling "juju destroy-environment -y osci-sv07"
  WARNING cannot delete security group "juju-osci-sv07-0". Used by another environment?
  juju-test INFO : Results: 3 passed, 0 failed, 0 errored

Full amulet test output: http://paste.ubuntu.com/8823194/
Build: http://10.98.191.181:8080/job/charm_amulet_test/340/

125. By Felipe Reyes

Revert "Changed the way charmhelpers.core.hookenv.config is imported"

126. By Felipe Reyes

Patch nova_cc_utils config() before it's imported by nova_cc_context

127. By Felipe Reyes

Format message, set proper level and include exception

128. By Felipe Reyes

Renamed relation from 'cache' to 'memcache'

129. By Felipe Reyes

Commit after merge

130. By Felipe Reyes

Commit after pulling changes from upstream

131. By Felipe Reyes

Added IPv6 support

Added test to check that IPv6 addresses are properly formatted.

132. By Felipe Reyes

Commit after merge

133. By Felipe Reyes

Replace "Couldn't get caching servers" with "Couldn't get memcache servers"

134. By Felipe Reyes

Refactor the way memcached_servers config is put in the templates

Instead of formatting the string with Jinja2, it's formatted with python
and passed to the template as a string.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added symlink 'hooks/cache-relation-broken'
2=== target is u'nova_cc_hooks.py'
3=== added symlink 'hooks/cache-relation-changed'
4=== target is u'nova_cc_hooks.py'
5=== added symlink 'hooks/cache-relation-departed'
6=== target is u'nova_cc_hooks.py'
7=== added symlink 'hooks/cache-relation-joined'
8=== target is u'nova_cc_hooks.py'
9=== modified file 'hooks/nova_cc_context.py'
10--- hooks/nova_cc_context.py 2014-10-13 16:18:58 +0000
11+++ hooks/nova_cc_context.py 2014-11-04 18:12:57 +0000
12@@ -1,7 +1,7 @@
13 from charmhelpers.core.hookenv import (
14- config, relation_ids, relation_set, log, ERROR,
15- unit_get, related_units, relation_get)
16-
17+ relation_ids, relation_set, log, ERROR,
18+ unit_get, related_units, relation_get, relations_for_id)
19+from charmhelpers.core import hookenv
20 from charmhelpers.fetch import apt_install, filter_installed_packages
21 from charmhelpers.contrib.openstack import context, neutron, utils
22
23@@ -181,14 +181,14 @@
24 if https():
25 scheme = 'https'
26
27- if config('prefer-ipv6'):
28+ if hookenv.config('prefer-ipv6'):
29 if is_clustered():
30- addr = '[%s]' % config(vip_setting)
31+ addr = '[%s]' % hookenv.config(vip_setting)
32 else:
33- addr = '[%s]' % get_ipv6_addr(exc_list=[config('vip')])[0]
34+ addr = '[%s]' % get_ipv6_addr(exc_list=[hookenv.config('vip')])[0]
35 else:
36 if is_clustered():
37- addr = config(vip_setting)
38+ addr = hookenv.config(vip_setting)
39 else:
40 addr = unit_get('private-address')
41
42@@ -209,8 +209,8 @@
43
44 @property
45 def neutron_security_groups(self):
46- sec_groups = (config('neutron-security-groups') or
47- config('quantum-security-groups'))
48+ sec_groups = (hookenv.config('neutron-security-groups') or
49+ hookenv.config('quantum-security-groups'))
50 return sec_groups.lower() == 'yes'
51
52 def _ensure_packages(self):
53@@ -220,9 +220,9 @@
54
55 def __call__(self):
56 ctxt = super(NeutronCCContext, self).__call__()
57- ctxt['external_network'] = config('neutron-external-network')
58- if config('quantum-plugin') in ['nvp', 'nsx']:
59- _config = config()
60+ ctxt['external_network'] = hookenv.config('neutron-external-network')
61+ if hookenv.config('quantum-plugin') in ['nvp', 'nsx']:
62+ _config = hookenv.config()
63 for k, v in _config.iteritems():
64 if k.startswith('nvp'):
65 ctxt[k.replace('-', '_')] = v
66@@ -251,7 +251,7 @@
67 ctxt['service_port']
68 )
69 ctxt['keystone_ec2_url'] = ec2_tokens
70- ctxt['region'] = config('region')
71+ ctxt['region'] = hookenv.config('region')
72
73 return ctxt
74
75@@ -265,19 +265,38 @@
76
77 def __init__(self):
78 super(NeutronPostgresqlDBContext,
79- self).__init__(config('neutron-database'))
80+ self).__init__(hookenv.config('neutron-database'))
81
82
83 class NovaConfigContext(context.WorkerConfigContext):
84 def __call__(self):
85 ctxt = super(NovaConfigContext, self).__call__()
86- ctxt['cpu_allocation_ratio'] = config('cpu-allocation-ratio')
87- ctxt['ram_allocation_ratio'] = config('ram-allocation-ratio')
88+ ctxt['cpu_allocation_ratio'] = hookenv.config('cpu-allocation-ratio')
89+ ctxt['ram_allocation_ratio'] = hookenv.config('ram-allocation-ratio')
90 return ctxt
91
92
93 class NovaIPv6Context(context.BindHostContext):
94 def __call__(self):
95 ctxt = super(NovaIPv6Context, self).__call__()
96- ctxt['use_ipv6'] = config('prefer-ipv6')
97+ ctxt['use_ipv6'] = hookenv.config('prefer-ipv6')
98+ return ctxt
99+
100+
101+class InstanceConsoleContext(context.OSContextGenerator):
102+ interfaces = []
103+
104+ def __call__(self):
105+ ctxt = {}
106+ servers = []
107+ try:
108+ for rid in relation_ids('cache'):
109+ for rel in relations_for_id(rid):
110+ servers.append({'private-address': rel['private-address'],
111+ 'port': rel['port']})
112+ except Exception as ex:
113+ log(str(ex))
114+ servers = []
115+
116+ ctxt['memcached_servers'] = servers
117 return ctxt
118
119=== modified file 'hooks/nova_cc_hooks.py'
120--- hooks/nova_cc_hooks.py 2014-10-23 07:32:45 +0000
121+++ hooks/nova_cc_hooks.py 2014-11-04 18:12:57 +0000
122@@ -849,6 +849,15 @@
123 quantum_joined(rid=rid)
124
125
126+@hooks.hook('cache-relation-joined',
127+ 'cache-relation-departed',
128+ 'cache-relation-changed',
129+ 'cache-relation-broken')
130+@restart_on_change(restart_map())
131+def memcached_joined():
132+ CONFIGS.write(NOVA_CONF)
133+
134+
135 def main():
136 try:
137 hooks.execute(sys.argv)
138
139=== modified file 'hooks/nova_cc_utils.py'
140--- hooks/nova_cc_utils.py 2014-10-23 16:39:43 +0000
141+++ hooks/nova_cc_utils.py 2014-11-04 18:12:57 +0000
142@@ -68,6 +68,7 @@
143 'python-psycopg2',
144 'python-psutil',
145 'uuid',
146+ 'python-memcache',
147 ]
148
149 BASE_SERVICES = [
150@@ -123,7 +124,8 @@
151 nova_cc_context.VolumeServiceContext(),
152 nova_cc_context.NovaIPv6Context(),
153 nova_cc_context.NeutronCCContext(),
154- nova_cc_context.NovaConfigContext()],
155+ nova_cc_context.NovaConfigContext(),
156+ nova_cc_context.InstanceConsoleContext()],
157 }),
158 (NOVA_API_PASTE, {
159 'services': [s for s in BASE_SERVICES if 'api' in s],
160
161=== modified file 'metadata.yaml'
162--- metadata.yaml 2014-07-11 09:14:57 +0000
163+++ metadata.yaml 2014-11-04 18:12:57 +0000
164@@ -40,6 +40,8 @@
165 nova-vmware:
166 interface: nova-vmware
167 scope: container
168+ cache:
169+ interface: memcache
170 peers:
171 cluster:
172 interface: nova-ha
173
174=== modified file 'templates/folsom/nova.conf'
175--- templates/folsom/nova.conf 2014-04-16 08:25:14 +0000
176+++ templates/folsom/nova.conf 2014-11-04 18:12:57 +0000
177@@ -21,6 +21,11 @@
178 enabled_apis=ec2,osapi_compute,metadata
179 auth_strategy=keystone
180 compute_driver=libvirt.LibvirtDriver
181+
182+{% if memcached_servers %}
183+memcached_servers = {%for s in memcached_servers %}{% if loop.index0 != 0 %},{% endif %}{{s['private-address']}}:{{s['port']}}{% endfor %}
184+{% endif %}
185+
186 {% if keystone_ec2_url -%}
187 keystone_ec2_url = {{ keystone_ec2_url }}
188 {% endif -%}
189
190=== modified file 'templates/grizzly/nova.conf'
191--- templates/grizzly/nova.conf 2014-03-31 11:56:09 +0000
192+++ templates/grizzly/nova.conf 2014-11-04 18:12:57 +0000
193@@ -20,6 +20,11 @@
194 enabled_apis=ec2,osapi_compute,metadata
195 auth_strategy=keystone
196 compute_driver=libvirt.LibvirtDriver
197+
198+{% if memcached_servers %}
199+memcached_servers = {%for s in memcached_servers %}{% if loop.index0 != 0 %},{% endif %}{{s['private-address']}}:{{s['port']}}{% endfor %}
200+{% endif %}
201+
202 {% if keystone_ec2_url -%}
203 keystone_ec2_url = {{ keystone_ec2_url }}
204 {% endif -%}
205
206=== modified file 'templates/havana/nova.conf'
207--- templates/havana/nova.conf 2014-08-08 09:31:32 +0000
208+++ templates/havana/nova.conf 2014-11-04 18:12:57 +0000
209@@ -26,6 +26,10 @@
210 cpu_allocation_ratio = {{ cpu_allocation_ratio }}
211 use_syslog={{ use_syslog }}
212
213+{% if memcached_servers %}
214+memcached_servers = {%for s in memcached_servers %}{% if loop.index0 != 0 %},{% endif %}{{s['private-address']}}:{{s['port']}}{% endfor %}
215+{% endif %}
216+
217 {% if keystone_ec2_url -%}
218 keystone_ec2_url = {{ keystone_ec2_url }}
219 {% endif -%}
220
221=== modified file 'templates/icehouse/nova.conf'
222--- templates/icehouse/nova.conf 2014-10-07 11:37:20 +0000
223+++ templates/icehouse/nova.conf 2014-11-04 18:12:57 +0000
224@@ -38,6 +38,10 @@
225
226 use_syslog={{ use_syslog }}
227
228+{% if memcached_servers %}
229+memcached_servers = {%for s in memcached_servers %}{% if loop.index0 != 0 %},{% endif %}{{s['private-address']}}:{{s['port']}}{% endfor %}
230+{% endif %}
231+
232 {% if keystone_ec2_url -%}
233 keystone_ec2_url = {{ keystone_ec2_url }}
234 {% endif -%}
235
236=== added file 'unit_tests/test_nova_cc_contexts.py'
237--- unit_tests/test_nova_cc_contexts.py 1970-01-01 00:00:00 +0000
238+++ unit_tests/test_nova_cc_contexts.py 2014-11-04 18:12:57 +0000
239@@ -0,0 +1,56 @@
240+from __future__ import print_function
241+
242+import mock
243+import nova_cc_context as context
244+
245+from charmhelpers.contrib.openstack import utils
246+
247+from test_utils import CharmTestCase
248+
249+
250+TO_PATCH = [
251+ 'apt_install',
252+ 'filter_installed_packages',
253+ 'relation_ids',
254+ 'relation_get',
255+ 'related_units',
256+ 'log',
257+ 'unit_get',
258+ 'relations_for_id',
259+]
260+
261+
262+def fake_log(msg, level=None):
263+ level = level or 'INFO'
264+ print('[juju test log (%s)] %s' % (level, msg))
265+
266+
267+class NovaComputeContextTests(CharmTestCase):
268+ def setUp(self):
269+ super(NovaComputeContextTests, self).setUp(context, TO_PATCH)
270+ self.relation_get.side_effect = self.test_relation.get
271+ self.log.side_effect = fake_log
272+
273+ @mock.patch.object(utils, 'os_release')
274+ def test_instance_console_context_without_memcache(self, os_release):
275+ self.unit_get.return_value = '127.0.0.1'
276+ self.relation_ids.return_value = 'cache:0'
277+ self.related_units.return_value = 'memcached/0'
278+ instance_console = context.InstanceConsoleContext()
279+ os_release.return_value = 'icehouse'
280+ self.assertEqual({'memcached_servers': []},
281+ instance_console())
282+
283+ @mock.patch.object(utils, 'os_release')
284+ def test_instance_console_context_with_memcache(self, os_release):
285+ memcached_servers = [{'private-address': '127.0.1.1',
286+ 'port': '11211'}]
287+ self.unit_get.return_value = '127.0.0.1'
288+ self.relation_ids.return_value = ['cache:0']
289+ self.relations_for_id.return_value = memcached_servers
290+ self.related_units.return_value = 'memcached/0'
291+ instance_console = context.InstanceConsoleContext()
292+ os_release.return_value = 'icehouse'
293+ self.maxDiff = None
294+ self.assertEqual({'memcached_servers': memcached_servers},
295+ instance_console())
296
297=== modified file 'unit_tests/test_nova_cc_utils.py'
298--- unit_tests/test_nova_cc_utils.py 2014-10-23 16:39:43 +0000
299+++ unit_tests/test_nova_cc_utils.py 2014-11-04 18:12:57 +0000
300@@ -155,8 +155,9 @@
301 _map = utils.resource_map()
302 return _map
303
304+ @patch('charmhelpers.core.hookenv.config')
305 @patch('charmhelpers.contrib.openstack.context.SubordinateConfigContext')
306- def test_resource_map_quantum(self, subcontext):
307+ def test_resource_map_quantum(self, subcontext, config_):
308 self.is_relation_made.return_value = False
309 self._resource_map(network_manager='quantum')
310 _map = utils.resource_map()
311@@ -167,8 +168,9 @@
312 ]
313 [self.assertIn(q_conf, _map.keys()) for q_conf in confs]
314
315+ @patch('charmhelpers.core.hookenv.config')
316 @patch('charmhelpers.contrib.openstack.context.SubordinateConfigContext')
317- def test_resource_map_neutron(self, subcontext):
318+ def test_resource_map_neutron(self, subcontext, config_):
319 self.is_relation_made.return_value = False
320 self._resource_map(network_manager='neutron')
321 _map = utils.resource_map()
322@@ -259,9 +261,11 @@
323 for service in console_services:
324 self.assertIn(service, _map['/etc/nova/nova.conf']['services'])
325
326+ @patch('charmhelpers.core.hookenv.config')
327 @patch('os.path.exists')
328 @patch('charmhelpers.contrib.openstack.context.SubordinateConfigContext')
329- def test_restart_map_api_before_frontends(self, subcontext, _exists):
330+ def test_restart_map_api_before_frontends(self, subcontext, _exists,
331+ config_):
332 self.is_relation_made.return_value = False
333 _exists.return_value = False
334 self._resource_map(network_manager='neutron')
335@@ -303,8 +307,9 @@
336 pkgs = utils.determine_packages()
337 self.assertIn('quantum-server', pkgs)
338
339+ @patch('charmhelpers.core.hookenv.config')
340 @patch('charmhelpers.contrib.openstack.context.SubordinateConfigContext')
341- def test_determine_packages_neutron(self, subcontext):
342+ def test_determine_packages_neutron(self, subcontext, config_):
343 self.is_relation_made.return_value = False
344 self._resource_map(network_manager='neutron')
345 pkgs = utils.determine_packages()

Subscribers

People subscribed via source and target branches