Merge lp:~hopem/charm-helpers/lp1273469 into lp:charm-helpers

Proposed by Edward Hope-Morley
Status: Merged
Merged at revision: 123
Proposed branch: lp:~hopem/charm-helpers/lp1273469
Merge into: lp:charm-helpers
Diff against target: 163 lines (+84/-22)
2 files modified
charmhelpers/contrib/openstack/context.py (+19/-2)
tests/contrib/openstack/test_os_contexts.py (+65/-20)
To merge this branch: bzr merge lp:~hopem/charm-helpers/lp1273469
Reviewer Review Type Date Requested Status
James Page Approve
Ante Karamatić (community) Approve
Review via email: mp+208245@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Edward Hope-Morley (hopem) wrote :

Needs testing but pushing for pre-review by ivoks.

Revision history for this message
Ante Karamatić (ivoks) wrote :

Looks good to me.

review: Approve
Revision history for this message
James Page (james-page) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'charmhelpers/contrib/openstack/context.py'
2--- charmhelpers/contrib/openstack/context.py 2014-02-25 09:53:03 +0000
3+++ charmhelpers/contrib/openstack/context.py 2014-02-26 14:11:30 +0000
4@@ -29,6 +29,7 @@
5 determine_apache_port,
6 determine_api_port,
7 https,
8+ is_clustered
9 )
10
11 from charmhelpers.contrib.hahelpers.apache import (
12@@ -395,7 +396,7 @@
13 return ctxt
14
15
16-class NeutronContext(object):
17+class NeutronContext(OSContextGenerator):
18 interfaces = []
19
20 @property
21@@ -456,6 +457,22 @@
22
23 return nvp_ctxt
24
25+ def neutron_ctxt(self):
26+ if https():
27+ proto = 'https'
28+ else:
29+ proto = 'http'
30+ if is_clustered():
31+ host = config('vip')
32+ else:
33+ host = unit_get('private-address')
34+ url = '%s://%s:%s' % (proto, host, '9292')
35+ ctxt = {
36+ 'network_manager': self.network_manager,
37+ 'neutron_url': url,
38+ }
39+ return ctxt
40+
41 def __call__(self):
42 self._ensure_packages()
43
44@@ -465,7 +482,7 @@
45 if not self.plugin:
46 return {}
47
48- ctxt = {'network_manager': self.network_manager}
49+ ctxt = self.neutron_ctxt()
50
51 if self.plugin == 'ovs':
52 ctxt.update(self.ovs_ctxt())
53
54=== modified file 'tests/contrib/openstack/test_os_contexts.py'
55--- tests/contrib/openstack/test_os_contexts.py 2014-02-20 14:27:02 +0000
56+++ tests/contrib/openstack/test_os_contexts.py 2014-02-26 14:11:30 +0000
57@@ -1,15 +1,16 @@
58+import charmhelpers.contrib.openstack.context as context
59 import yaml
60 import json
61 import unittest
62-
63+from copy import copy
64+from mock import (
65+ patch,
66+ Mock,
67+ MagicMock,
68+ call
69+)
70 from tests.helpers import patch_open
71
72-from mock import patch, MagicMock, call
73-
74-from copy import copy
75-
76-import charmhelpers.contrib.openstack.context as context
77-
78
79 class FakeRelation(object):
80 '''
81@@ -613,26 +614,70 @@
82 'neutron_security_groups': True,
83 'local_ip': '10.0.0.1'}, neutron.ovs_ctxt())
84
85+ @patch('charmhelpers.contrib.openstack.context.unit_get')
86+ @patch('charmhelpers.contrib.openstack.context.is_clustered')
87+ @patch.object(context.NeutronContext, 'network_manager')
88+ def test_neutron_neutron_ctxt(self, mock_network_manager,
89+ mock_is_clustered, mock_unit_get):
90+ vip = '88.11.22.33'
91+ priv_addr = '10.0.0.1'
92+ mock_unit_get.return_value = priv_addr
93+ neutron = context.NeutronContext()
94+
95+ config = {'vip': vip}
96+ self.config.side_effect = lambda key: config[key]
97+ mock_network_manager.__get__ = Mock(return_value='neutron')
98+
99+ mock_is_clustered.return_value = False
100+ self.assertEquals(
101+ {'network_manager': 'neutron',
102+ 'neutron_url': 'https://%s:9292' % (priv_addr)},
103+ neutron.neutron_ctxt()
104+ )
105+
106+ mock_is_clustered.return_value = True
107+ self.assertEquals(
108+ {'network_manager': 'neutron',
109+ 'neutron_url': 'https://%s:9292' % (vip)},
110+ neutron.neutron_ctxt()
111+ )
112+
113+ @patch.object(context.NeutronContext, 'neutron_ctxt')
114 @patch.object(context.NeutronContext, '_save_flag_file')
115 @patch.object(context.NeutronContext, 'ovs_ctxt')
116 @patch.object(context.NeutronContext, 'plugin')
117 @patch.object(context.NeutronContext, '_ensure_packages')
118 @patch.object(context.NeutronContext, 'network_manager')
119- def test_neutron_main_context_generation(self, nm, pkgs, plugin, ovs, ff):
120- self.config.return_value = None
121+ def test_neutron_main_context_generation(self, mock_network_manager,
122+ mock_ensure_packages,
123+ mock_plugin, mock_ovs_ctxt,
124+ mock_save_flag_file,
125+ mock_neutron_ctxt):
126+
127+ mock_neutron_ctxt.return_value = {'network_manager': 'neutron',
128+ 'neutron_url': 'https://foo:9292'}
129+ config = {'neutron-alchemy-flags': None}
130+ self.config.side_effect = lambda key: config[key]
131 neutron = context.NeutronContext()
132- nm.__get__ = MagicMock(return_value='flatdhcpmanager')
133- self.assertEquals({}, neutron())
134-
135- nm.__get__ = MagicMock(return_value='neutron')
136- plugin.__get__ = MagicMock(return_value=None)
137- self.assertEquals({}, neutron())
138-
139- nm.__get__ = MagicMock(return_value='neutron')
140- ovs.return_value = {'ovs': 'ovs_context'}
141- plugin.__get__ = MagicMock(return_value='ovs')
142+
143+ mock_network_manager.__get__ = Mock(return_value='flatdhcpmanager')
144+ mock_plugin.__get__ = Mock()
145+
146+ self.assertEquals({}, neutron())
147+ self.assertTrue(mock_network_manager.__get__.called)
148+ self.assertFalse(mock_plugin.__get__.called)
149+
150+ mock_network_manager.__get__.return_value = 'neutron'
151+ mock_plugin.__get__ = Mock(return_value=None)
152+ self.assertEquals({}, neutron())
153+ self.assertTrue(mock_plugin.__get__.called)
154+
155+ mock_ovs_ctxt.return_value = {'ovs': 'ovs_context'}
156+ mock_plugin.__get__.return_value = 'ovs'
157 self.assertEquals(
158- {'network_manager': 'neutron', 'ovs': 'ovs_context'},
159+ {'network_manager': 'neutron',
160+ 'ovs': 'ovs_context',
161+ 'neutron_url': 'https://foo:9292'},
162 neutron()
163 )
164

Subscribers

People subscribed via source and target branches