~gnuoy/charms/trusty/quantum-gateway/fix-1361712

« back to all changes in this revision

Viewing changes to unit_tests/test_quantum_hooks.py

  • Committer: James Page
  • Date: 2014-04-16 08:28:29 UTC
  • mfrom: (41.3.49 quantum-gateway)
  • Revision ID: james.page@canonical.com-20140416082829-o7ojjk3oes6ksb69
[yolanda.robla,james-page,hazmat,r=james-page,t=*]

Support for Icehouse on 12.04 and 14.04
Support for Active/Active and SSL RabbitMQ
Support for SSL MySQL
Support for SSL endpoints
Support for PostgreSQL

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
from mock import MagicMock, patch, call
 
2
import charmhelpers.core.hookenv as hookenv
 
3
hookenv.config = MagicMock()
2
4
import quantum_utils as utils
3
5
_register_configs = utils.register_configs
4
6
_restart_map = utils.restart_map
37
39
    'lsb_release',
38
40
    'stop_services',
39
41
    'b64decode',
 
42
    'is_relation_made'
40
43
]
41
44
 
42
45
 
53
56
        self.test_config.set('plugin', 'ovs')
54
57
        self.lsb_release.return_value = {'DISTRIB_CODENAME': 'precise'}
55
58
        self.b64decode.side_effect = passthrough
 
59
        hookenv.config.side_effect = self.test_config.get
56
60
 
57
61
    def _call_hook(self, hookname):
58
62
        hooks.hooks.execute([
71
75
            call(_pkgs, fatal=True),
72
76
            call(_pkgs, fatal=True),
73
77
        ])
74
 
        self.get_early_packages.assert_called()
75
 
        self.get_packages.assert_called()
76
 
        self.execd_preinstall.assert_called()
 
78
        self.assertTrue(self.get_early_packages.called)
 
79
        self.assertTrue(self.get_packages.called)
 
80
        self.assertTrue(self.execd_preinstall.called)
77
81
 
78
82
    def test_install_hook_precise_nocloudarchive(self):
79
83
        self.test_config.set('openstack-origin', 'distro')
86
90
    def test_install_hook_invalid_plugin(self, _exit):
87
91
        self.valid_plugin.return_value = False
88
92
        self._call_hook('install')
89
 
        self.log.assert_called()
 
93
        self.assertTrue(self.log.called)
90
94
        _exit.assert_called_with(1)
91
95
 
92
96
    def test_config_changed_upgrade(self):
93
97
        self.openstack_upgrade_available.return_value = True
94
98
        self.valid_plugin.return_value = True
95
99
        self._call_hook('config-changed')
96
 
        self.do_openstack_upgrade.assert_called_with(self.CONFIGS)
97
 
        self.CONFIGS.write_all.assert_called()
98
 
        self.configure_ovs.assert_called()
 
100
        self.assertTrue(self.do_openstack_upgrade.called)
 
101
        self.assertTrue(self.configure_ovs.called)
99
102
 
100
103
    @patch('sys.exit')
101
104
    def test_config_changed_invalid_plugin(self, _exit):
102
105
        self.valid_plugin.return_value = False
103
106
        self._call_hook('config-changed')
104
 
        self.log.assert_called()
 
107
        self.assertTrue(self.log.called)
105
108
        _exit.assert_called_with(1)
106
109
 
107
110
    def test_upgrade_charm(self):
108
111
        _install = self.patch('install')
109
112
        _config_changed = self.patch('config_changed')
110
 
        _amqp_joined = self.patch('amqp_joined')
111
 
        self.relation_ids.return_value = ['amqp:0']
112
113
        self._call_hook('upgrade-charm')
113
114
        self.assertTrue(_install.called)
114
115
        self.assertTrue(_config_changed.called)
115
 
        _amqp_joined.assert_called_with(relation_id='amqp:0')
116
116
 
117
117
    def test_db_joined(self):
 
118
        self.is_relation_made.return_value = False
118
119
        self.unit_get.return_value = 'myhostname'
119
120
        self._call_hook('shared-db-relation-joined')
120
121
        self.relation_set.assert_called_with(
121
 
            quantum_username='quantum',
122
 
            quantum_database='quantum',
123
 
            quantum_hostname='myhostname',
124
 
            nova_username='nova',
125
 
            nova_database='nova',
126
 
            nova_hostname='myhostname',
127
 
        )
 
122
            username='nova',
 
123
            database='nova',
 
124
            hostname='myhostname',
 
125
            relation_id=None
 
126
        )
 
127
 
 
128
    def test_db_joined_with_postgresql(self):
 
129
        self.is_relation_made.return_value = True
 
130
 
 
131
        with self.assertRaises(Exception) as context:
 
132
            hooks.db_joined()
 
133
        self.assertEqual(context.exception.message,
 
134
                         'Attempting to associate a mysql database when there '
 
135
                         'is already associated a postgresql one')
 
136
 
 
137
    def test_postgresql_db_joined(self):
 
138
        self.unit_get.return_value = 'myhostname'
 
139
        self.is_relation_made.return_value = False
 
140
        self._call_hook('pgsql-db-relation-joined')
 
141
        self.relation_set.assert_called_with(
 
142
            database='nova',
 
143
            relation_id=None
 
144
        )
 
145
 
 
146
    def test_postgresql_joined_with_db(self):
 
147
        self.is_relation_made.return_value = True
 
148
 
 
149
        with self.assertRaises(Exception) as context:
 
150
            hooks.pgsql_db_joined()
 
151
        self.assertEqual(context.exception.message,
 
152
                         'Attempting to associate a postgresql database when'
 
153
                         ' there is already associated a mysql one')
128
154
 
129
155
    def test_amqp_joined(self):
130
156
        self._call_hook('amqp-relation-joined')
136
162
 
137
163
    def test_amqp_changed(self):
138
164
        self._call_hook('amqp-relation-changed')
139
 
        self.CONFIGS.write_all.assert_called()
 
165
        self.assertTrue(self.CONFIGS.write_all.called)
140
166
 
141
167
    def test_shared_db_changed(self):
142
168
        self._call_hook('shared-db-relation-changed')
143
 
        self.CONFIGS.write_all.assert_called()
 
169
        self.assertTrue(self.CONFIGS.write_all.called)
 
170
 
 
171
    def test_pgsql_db_changed(self):
 
172
        self._call_hook('pgsql-db-relation-changed')
 
173
        self.assertTrue(self.CONFIGS.write_all.called)
144
174
 
145
175
    def test_nm_changed(self):
146
176
        self.relation_get.return_value = "cert"
147
177
        self._call_hook('quantum-network-service-relation-changed')
148
 
        self.CONFIGS.write_all.assert_called()
 
178
        self.assertTrue(self.CONFIGS.write_all.called)
149
179
        self.install_ca_cert.assert_called_with('cert')
150
180
 
151
181
    def test_cluster_departed_nvp(self):
152
182
        self.test_config.set('plugin', 'nvp')
153
183
        self._call_hook('cluster-relation-departed')
154
 
        self.log.assert_called()
155
 
        self.eligible_leader.assert_not_called()
156
 
        self.reassign_agent_resources.assert_not_called()
 
184
        self.assertTrue(self.log.called)
 
185
        self.assertFalse(self.eligible_leader.called)
 
186
        self.assertFalse(self.reassign_agent_resources.called)
157
187
 
158
188
    def test_cluster_departed_ovs_not_leader(self):
159
189
        self.eligible_leader.return_value = False
160
190
        self._call_hook('cluster-relation-departed')
161
 
        self.reassign_agent_resources.assert_not_called()
 
191
        self.assertFalse(self.reassign_agent_resources.called)
162
192
 
163
193
    def test_cluster_departed_ovs_leader(self):
164
194
        self.eligible_leader.return_value = True
165
195
        self._call_hook('cluster-relation-departed')
166
 
        self.reassign_agent_resources.assert_called()
 
196
        self.assertTrue(self.reassign_agent_resources.called)
167
197
 
168
198
    def test_stop(self):
169
199
        self._call_hook('stop')
170
 
        self.stop_services.assert_called
 
200
        self.assertTrue(self.stop_services.called)