Merge lp:~gnuoy/charm-helpers/more-openstack-tests into lp:charm-helpers

Proposed by Liam Young
Status: Merged
Merged at revision: 137
Proposed branch: lp:~gnuoy/charm-helpers/more-openstack-tests
Merge into: lp:charm-helpers
Diff against target: 328 lines (+271/-0)
2 files modified
tests/contrib/openstack/test_neutron_utils.py (+160/-0)
tests/contrib/openstack/test_os_contexts.py (+111/-0)
To merge this branch: bzr merge lp:~gnuoy/charm-helpers/more-openstack-tests
Reviewer Review Type Date Requested Status
charmers Pending
Review via email: mp+214448@code.launchpad.net
To post a comment you must log in.
138. By Liam Young

Add network_manager test case for havana and minor tidy up

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'tests/contrib/openstack/test_neutron_utils.py'
--- tests/contrib/openstack/test_neutron_utils.py 1970-01-01 00:00:00 +0000
+++ tests/contrib/openstack/test_neutron_utils.py 2014-04-07 08:52:22 +0000
@@ -0,0 +1,160 @@
1import unittest
2from mock import patch
3from nose.tools import raises
4import charmhelpers.contrib.openstack.neutron as neutron
5
6TO_PATCH = [
7 'log',
8 'config',
9 'os_release',
10 'check_output',
11]
12
13
14class NeutronTests(unittest.TestCase):
15 def setUp(self):
16 for m in TO_PATCH:
17 setattr(self, m, self._patch(m))
18
19 def _patch(self, method):
20 _m = patch('charmhelpers.contrib.openstack.neutron.' + method)
21 mock = _m.start()
22 self.addCleanup(_m.stop)
23 return mock
24
25 def test_headers_package(self):
26 self.check_output.return_value = '3.13.0-19-generic'
27 kname = neutron.headers_package()
28 self.assertEquals(kname, 'linux-headers-3.13.0-19-generic')
29
30 def test_kernel_version(self):
31 self.check_output.return_value = '3.13.0-19-generic'
32 kver_maj, kver_min = neutron.kernel_version()
33 self.assertEquals((kver_maj, kver_min), (3, 13))
34
35 @patch.object(neutron, 'kernel_version')
36 def test_determine_dkms_package_old_kernel(self, _kernel_version):
37 _kernel_version.return_value = (3, 10)
38 dkms_package = neutron.determine_dkms_package()
39 self.assertEquals(dkms_package, ['openvswitch-datapath-dkms'])
40
41 @patch.object(neutron, 'kernel_version')
42 def test_determine_dkms_package_new_kernel(self, _kernel_version):
43 _kernel_version.return_value = (3, 13)
44 dkms_package = neutron.determine_dkms_package()
45 self.assertEquals(dkms_package, [])
46
47 def test_quantum_plugins(self):
48 self.config.return_value = 'foo'
49 plugins = neutron.quantum_plugins()
50 self.assertEquals(plugins['ovs']['services'], ['quantum-plugin-openvswitch-agent'])
51 self.assertEquals(plugins['nvp']['services'], [])
52
53 def test_neutron_plugins_preicehouse(self):
54 self.config.return_value = 'foo'
55 self.os_release .return_value = 'havana'
56 plugins = neutron.neutron_plugins()
57 self.assertEquals(plugins['ovs']['config'], '/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini')
58 self.assertEquals(plugins['nvp']['services'], [])
59
60 def test_neutron_plugins(self):
61 self.config.return_value = 'foo'
62 self.os_release .return_value = 'icehouse'
63 plugins = neutron.neutron_plugins()
64 self.assertEquals(plugins['ovs']['config'], '/etc/neutron/plugins/ml2/ml2_conf.ini')
65 self.assertEquals(plugins['nvp']['services'], [])
66
67 @patch.object(neutron, 'network_manager')
68 def test_neutron_plugin_attribute_quantum(self, _network_manager):
69 self.config.return_value = 'foo'
70 _network_manager.return_value = 'quantum'
71 plugins = neutron.neutron_plugin_attribute('ovs', 'services')
72 self.assertEquals(plugins, ['quantum-plugin-openvswitch-agent'])
73
74 @patch.object(neutron, 'network_manager')
75 def test_neutron_plugin_attribute_neutron(self, _network_manager):
76 self.config.return_value = 'foo'
77 self.os_release .return_value = 'icehouse'
78 _network_manager.return_value = 'neutron'
79 plugins = neutron.neutron_plugin_attribute('ovs', 'services')
80 self.assertEquals(plugins, ['neutron-plugin-openvswitch-agent'])
81
82 @raises(Exception)
83 @patch.object(neutron, 'network_manager')
84 def test_neutron_plugin_attribute_foo(self, _network_manager):
85 _network_manager.return_value = 'foo'
86 self.assertRaises(Exception, neutron.neutron_plugin_attribute('ovs', 'services'))
87
88 @raises(Exception)
89 @patch.object(neutron, 'network_manager')
90 def test_neutron_plugin_attribute_plugin_keyerror(self, _network_manager):
91 self.config.return_value = 'foo'
92 _network_manager.return_value = 'quantum'
93 self.assertRaises(Exception, neutron.neutron_plugin_attribute('foo', 'foo'))
94
95 @patch.object(neutron, 'network_manager')
96 def test_neutron_plugin_attribute_attr_keyerror(self, _network_manager):
97 self.config.return_value = 'foo'
98 _network_manager.return_value = 'quantum'
99 plugins = neutron.neutron_plugin_attribute('ovs', 'foo')
100 self.assertEquals(plugins, None)
101
102 @raises(Exception)
103 def test_network_manager_essex(self):
104 essex_cases = {
105 'quantum': 'quantum',
106 'neutron': 'quantum',
107 'newhotness': 'newhotness',
108 }
109 self.os_release.return_value = 'essex'
110 for nwmanager in essex_cases:
111 self.config.return_value = nwmanager
112 self.assertRaises(Exception, neutron.network_manager())
113
114 def test_network_manager_folsom(self):
115 folsom_cases = {
116 'quantum': 'quantum',
117 'neutron': 'quantum',
118 'newhotness': 'newhotness',
119 }
120 self.os_release.return_value = 'folsom'
121 for nwmanager in folsom_cases:
122 self.config.return_value = nwmanager
123 renamed_manager = neutron.network_manager()
124 self.assertEquals(renamed_manager, folsom_cases[nwmanager])
125
126 def test_network_manager_grizzly(self):
127 grizzly_cases = {
128 'quantum': 'quantum',
129 'neutron': 'quantum',
130 'newhotness': 'newhotness',
131 }
132 self.os_release.return_value = 'grizzly'
133 for nwmanager in grizzly_cases:
134 self.config.return_value = nwmanager
135 renamed_manager = neutron.network_manager()
136 self.assertEquals(renamed_manager, grizzly_cases[nwmanager])
137
138 def test_network_manager_havana(self):
139 havana_cases = {
140 'quantum': 'neutron',
141 'neutron': 'neutron',
142 'newhotness': 'newhotness',
143 }
144 self.os_release.return_value = 'havana'
145 for nwmanager in havana_cases:
146 self.config.return_value = nwmanager
147 renamed_manager = neutron.network_manager()
148 self.assertEquals(renamed_manager, havana_cases[nwmanager])
149
150 def test_network_manager_icehouse(self):
151 icehouse_cases = {
152 'quantum': 'neutron',
153 'neutron': 'neutron',
154 'newhotness': 'newhotness',
155 }
156 self.os_release.return_value = 'icehouse'
157 for nwmanager in icehouse_cases:
158 self.config.return_value = nwmanager
159 renamed_manager = neutron.network_manager()
160 self.assertEquals(renamed_manager, icehouse_cases[nwmanager])
0161
=== modified file 'tests/contrib/openstack/test_os_contexts.py'
--- tests/contrib/openstack/test_os_contexts.py 2014-04-02 11:35:51 +0000
+++ tests/contrib/openstack/test_os_contexts.py 2014-04-07 08:52:22 +0000
@@ -74,6 +74,14 @@
74 'password': 'foo',74 'password': 'foo',
75}75}
7676
77SHARED_DB_RELATION_SSL = {
78 'db_host': 'dbserver.local',
79 'password': 'foo',
80 'ssl_ca': 'Zm9vCg==',
81 'ssl_cert': 'YmFyCg==',
82 'ssl_key': 'Zm9vYmFyCg==',
83}
84
77SHARED_DB_CONFIG = {85SHARED_DB_CONFIG = {
78 'database-user': 'adam',86 'database-user': 'adam',
79 'database': 'foodb',87 'database': 'foodb',
@@ -140,6 +148,15 @@
140 'vip': '10.0.0.1',148 'vip': '10.0.0.1',
141}149}
142150
151AMQP_RELATION_WITH_SSL = {
152 'private-address': 'rabbithost',
153 'password': 'foobar',
154 'vip': '10.0.0.1',
155 'ssl_port': 5671,
156 'ssl_ca': 'cert',
157 'ha_queues': 'queues',
158}
159
143AMQP_AA_RELATION = {160AMQP_AA_RELATION = {
144 'amqp:0': {161 'amqp:0': {
145 'rabbitmq/0': {162 'rabbitmq/0': {
@@ -227,6 +244,7 @@
227 'determine_apache_port',244 'determine_apache_port',
228 'config',245 'config',
229 'is_clustered',246 'is_clustered',
247 'time',
230]248]
231249
232250
@@ -274,6 +292,36 @@
274 }292 }
275 self.assertEquals(result, expected)293 self.assertEquals(result, expected)
276294
295 @patch('os.path.exists')
296 @patch('__builtin__.open')
297 def test_db_ssl(self, _open, osexists):
298 osexists.return_value = False
299 ssl_dir = '/etc/dbssl'
300 db_ssl_ctxt = context.db_ssl(SHARED_DB_RELATION_SSL, {}, ssl_dir)
301 expected = {
302 'database_ssl_ca': ssl_dir + '/db-client.ca',
303 'database_ssl_cert': ssl_dir + '/db-client.cert',
304 'database_ssl_key': ssl_dir + '/db-client.key',
305 }
306 files = [
307 call(expected['database_ssl_ca'], 'w'),
308 call(expected['database_ssl_cert'], 'w'),
309 call(expected['database_ssl_key'], 'w')
310 ]
311 for f in files:
312 self.assertIn(f, _open.call_args_list)
313 self.assertEquals(db_ssl_ctxt, expected)
314 decode = [
315 call(SHARED_DB_RELATION_SSL['ssl_ca']),
316 call(SHARED_DB_RELATION_SSL['ssl_cert']),
317 call(SHARED_DB_RELATION_SSL['ssl_key'])
318 ]
319 self.assertEquals(decode, self.b64decode.call_args_list)
320
321 def test_db_ssl_nossldir(self):
322 db_ssl_ctxt = context.db_ssl(SHARED_DB_RELATION_SSL, {}, None)
323 self.assertEquals(db_ssl_ctxt, {})
324
277 def test_shared_db_context_with_missing_relation(self):325 def test_shared_db_context_with_missing_relation(self):
278 '''Test shared-db context missing relation data'''326 '''Test shared-db context missing relation data'''
279 incomplete_relation = copy(SHARED_DB_RELATION)327 incomplete_relation = copy(SHARED_DB_RELATION)
@@ -442,6 +490,46 @@
442 }490 }
443 self.assertEquals(result, expected)491 self.assertEquals(result, expected)
444492
493 @patch('__builtin__.open')
494 def test_amqp_context_with_data_ssl(self, _open):
495 '''Test amqp context with all required data and ssl'''
496 relation = FakeRelation(relation_data=AMQP_RELATION_WITH_SSL)
497 self.relation_get.side_effect = relation.get
498 self.config.return_value = AMQP_CONFIG
499 ssl_dir = '/etc/sslamqp'
500 amqp = context.AMQPContext(ssl_dir=ssl_dir)
501 result = amqp()
502 expected = {
503 'rabbitmq_host': 'rabbithost',
504 'rabbitmq_password': 'foobar',
505 'rabbitmq_user': 'adam',
506 'rabbit_ssl_port': 5671,
507 'rabbitmq_virtual_host': 'foo',
508 'rabbit_ssl_ca': ssl_dir + '/rabbit-client-ca.pem',
509 'rabbitmq_ha_queues': True,
510 }
511 _open.assert_called_once_with(ssl_dir + '/rabbit-client-ca.pem', 'w')
512 self.assertEquals(result, expected)
513 self.assertEquals([call(AMQP_RELATION_WITH_SSL['ssl_ca'])], self.b64decode.call_args_list)
514
515 def test_amqp_context_with_data_ssl_noca(self):
516 '''Test amqp context with all required data with ssl but missing ca'''
517 relation = FakeRelation(relation_data=AMQP_RELATION_WITH_SSL)
518 self.relation_get.side_effect = relation.get
519 self.config.return_value = AMQP_CONFIG
520 amqp = context.AMQPContext()
521 result = amqp()
522 expected = {
523 'rabbitmq_host': 'rabbithost',
524 'rabbitmq_password': 'foobar',
525 'rabbitmq_user': 'adam',
526 'rabbit_ssl_port': 5671,
527 'rabbitmq_virtual_host': 'foo',
528 'rabbit_ssl_ca': 'cert',
529 'rabbitmq_ha_queues': True,
530 }
531 self.assertEquals(result, expected)
532
445 def test_amqp_context_with_data_clustered(self):533 def test_amqp_context_with_data_clustered(self):
446 '''Test amqp context with all required data with clustered rabbit'''534 '''Test amqp context with all required data with clustered rabbit'''
447 relation_data = copy(AMQP_RELATION)535 relation_data = copy(AMQP_RELATION)
@@ -500,6 +588,14 @@
500 amqp = context.AMQPContext()588 amqp = context.AMQPContext()
501 self.assertRaises(context.OSContextError, amqp)589 self.assertRaises(context.OSContextError, amqp)
502590
591 def test_ceph_no_relids(self):
592 '''Test empty ceph realtion'''
593 relation = FakeRelation(relation_data={})
594 self.relation_ids.side_effect = relation.get
595 ceph = context.CephContext()
596 result = ceph()
597 self.assertEquals(result, {})
598
503 @patch.object(context, 'config')599 @patch.object(context, 'config')
504 @patch('os.path.isdir')600 @patch('os.path.isdir')
505 @patch('os.mkdir')601 @patch('os.mkdir')
@@ -753,6 +849,21 @@
753 'neutron_security_groups': True,849 'neutron_security_groups': True,
754 'local_ip': '10.0.0.1'}, neutron.ovs_ctxt())850 'local_ip': '10.0.0.1'}, neutron.ovs_ctxt())
755851
852 @patch.object(context.NeutronContext, 'neutron_security_groups')
853 @patch.object(context, 'unit_private_ip')
854 @patch.object(context, 'neutron_plugin_attribute')
855 def test_neutron_nvp_plugin_context(self, attr, ip, sec_groups):
856 ip.return_value = '10.0.0.1'
857 sec_groups.__get__ = MagicMock(return_value=True)
858 attr.return_value = 'some.quantum.driver.class'
859 neutron = context.NeutronContext()
860 self.assertEquals({
861 'config': 'some.quantum.driver.class',
862 'core_plugin': 'some.quantum.driver.class',
863 'neutron_plugin': 'nvp',
864 'neutron_security_groups': True,
865 'local_ip': '10.0.0.1'}, neutron.nvp_ctxt())
866
756 @patch('charmhelpers.contrib.openstack.context.unit_get')867 @patch('charmhelpers.contrib.openstack.context.unit_get')
757 @patch.object(context.NeutronContext, 'network_manager')868 @patch.object(context.NeutronContext, 'network_manager')
758 def test_neutron_neutron_ctxt(self, mock_network_manager,869 def test_neutron_neutron_ctxt(self, mock_network_manager,

Subscribers

People subscribed via source and target branches