~hopem/charms/trusty/keystone/reloads

« back to all changes in this revision

Viewing changes to unit_tests/test_keystone_hooks.py

  • Committer: Edward Hope-Morley
  • Date: 2015-01-05 17:49:38 UTC
  • Revision ID: edward.hope-morley@canonical.com-20150105174938-zp8ifxfuzwntg8m7
[hopem,r=]

Fixes ssl cert sycnhronisation across peers

Closes-Bug: 1317782

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
    # charmhelpers.contrib.openstack.utils
44
44
    'configure_installation_source',
45
45
    # charmhelpers.contrib.hahelpers.cluster_utils
46
 
    'is_leader',
47
 
    'eligible_leader',
 
46
    'is_elected_leader',
48
47
    'get_hacluster_config',
49
48
    # keystone_utils
50
49
    'restart_map',
234
233
            relation_id='identity-service:0',
235
234
            remote_unit='unit/0')
236
235
 
 
236
    @patch.object(hooks, 'ensure_permissions')
237
237
    @patch.object(hooks, 'cluster_joined')
238
238
    @patch.object(unison, 'ensure_user')
239
239
    @patch.object(unison, 'get_homedir')
242
242
    @patch.object(hooks, 'configure_https')
243
243
    def test_config_changed_no_openstack_upgrade_leader(
244
244
            self, configure_https, identity_changed,
245
 
            configs, get_homedir, ensure_user, cluster_joined):
 
245
            configs, get_homedir, ensure_user, cluster_joined,
 
246
            ensure_permissions):
246
247
        self.openstack_upgrade_available.return_value = False
247
 
        self.eligible_leader.return_value = True
 
248
        self.is_elected_leader.return_value = True
248
249
        self.relation_ids.return_value = ['identity-service:0']
249
250
        self.relation_list.return_value = ['unit/0']
250
251
 
262
263
            'Firing identity_changed hook for all related services.')
263
264
        identity_changed.assert_called_with(
264
265
            relation_id='identity-service:0',
265
 
            remote_unit='unit/0')
 
266
            remote_unit='unit/0',
 
267
            sync_certs=False)
266
268
 
 
269
    @patch.object(hooks, 'ensure_permissions')
267
270
    @patch.object(hooks, 'cluster_joined')
268
271
    @patch.object(unison, 'ensure_user')
269
272
    @patch.object(unison, 'get_homedir')
272
275
    @patch.object(hooks, 'configure_https')
273
276
    def test_config_changed_no_openstack_upgrade_not_leader(
274
277
            self, configure_https, identity_changed,
275
 
            configs, get_homedir, ensure_user, cluster_joined):
 
278
            configs, get_homedir, ensure_user, cluster_joined,
 
279
            ensure_permissions):
276
280
        self.openstack_upgrade_available.return_value = False
277
 
        self.eligible_leader.return_value = False
 
281
        self.is_elected_leader.return_value = False
278
282
 
279
283
        hooks.config_changed()
280
284
        ensure_user.assert_called_with(user=self.ssh_user, group='keystone')
288
292
        self.assertFalse(self.ensure_initial_admin.called)
289
293
        self.assertFalse(identity_changed.called)
290
294
 
 
295
    @patch.object(hooks, 'ensure_permissions')
291
296
    @patch.object(hooks, 'cluster_joined')
292
297
    @patch.object(unison, 'ensure_user')
293
298
    @patch.object(unison, 'get_homedir')
296
301
    @patch.object(hooks, 'configure_https')
297
302
    def test_config_changed_with_openstack_upgrade(
298
303
            self, configure_https, identity_changed,
299
 
            configs, get_homedir, ensure_user, cluster_joined):
 
304
            configs, get_homedir, ensure_user, cluster_joined,
 
305
            ensure_permissions):
300
306
        self.openstack_upgrade_available.return_value = True
301
 
        self.eligible_leader.return_value = True
 
307
        self.is_elected_leader.return_value = True
302
308
        self.relation_ids.return_value = ['identity-service:0']
303
309
        self.relation_list.return_value = ['unit/0']
304
310
 
318
324
            'Firing identity_changed hook for all related services.')
319
325
        identity_changed.assert_called_with(
320
326
            relation_id='identity-service:0',
321
 
            remote_unit='unit/0')
 
327
            remote_unit='unit/0',
 
328
            sync_certs=False)
322
329
 
323
330
    @patch.object(hooks, 'hashlib')
324
331
    @patch.object(hooks, 'send_notifications')
325
332
    def test_identity_changed_leader(self, mock_send_notifications,
326
333
                                     mock_hashlib):
327
 
        self.eligible_leader.return_value = True
 
334
        self.is_elected_leader.return_value = True
328
335
        hooks.identity_changed(
329
336
            relation_id='identity-service:0',
330
337
            remote_unit='unit/0')
334
341
        self.assertTrue(self.synchronize_ca.called)
335
342
 
336
343
    def test_identity_changed_no_leader(self):
337
 
        self.eligible_leader.return_value = False
 
344
        self.is_elected_leader.return_value = False
338
345
        hooks.identity_changed(
339
346
            relation_id='identity-service:0',
340
347
            remote_unit='unit/0')
349
356
            user=self.ssh_user, group='juju_keystone',
350
357
            peer_interface='cluster', ensure_local_user=True)
351
358
 
 
359
    @patch.object(hooks, 'check_peer_actions')
352
360
    @patch.object(unison, 'ssh_authorized_peers')
353
361
    @patch.object(hooks, 'CONFIGS')
354
 
    def test_cluster_changed(self, configs, ssh_authorized_peers):
 
362
    def test_cluster_changed(self, configs, ssh_authorized_peers,
 
363
                             check_peer_actions):
355
364
        hooks.cluster_changed()
356
 
        self.peer_echo.assert_called_with(includes=['_passwd',
357
 
                                          'identity-service:'])
 
365
        whitelist = ['_passwd', 'identity-service:', 'ssl-cert-master']
 
366
        self.peer_echo.assert_called_with(includes=whitelist)
358
367
        ssh_authorized_peers.assert_called_with(
359
368
            user=self.ssh_user, group='keystone',
360
369
            peer_interface='cluster', ensure_local_user=True)
411
420
    @patch.object(hooks, 'CONFIGS')
412
421
    def test_ha_relation_changed_not_clustered_not_leader(self, configs):
413
422
        self.relation_get.return_value = False
414
 
        self.is_leader.return_value = False
 
423
        self.is_elected_leader.return_value = False
415
424
 
416
425
        hooks.ha_changed()
417
426
        self.assertTrue(configs.write_all.called)
421
430
    def test_ha_relation_changed_clustered_leader(
422
431
            self, configs, identity_changed):
423
432
        self.relation_get.return_value = True
424
 
        self.is_leader.return_value = True
 
433
        self.is_elected_leader.return_value = True
425
434
        self.relation_ids.return_value = ['identity-service:0']
426
435
        self.related_units.return_value = ['unit/0']
427
436
 
432
441
            'keystone endpoint configuration')
433
442
        identity_changed.assert_called_with(
434
443
            relation_id='identity-service:0',
435
 
            remote_unit='unit/0')
 
444
            remote_unit='unit/0',
 
445
            sync_certs=False)
436
446
 
437
447
    @patch.object(hooks, 'CONFIGS')
438
448
    def test_configure_https_enable(self, configs):
458
468
 
459
469
    @patch.object(unison, 'ssh_authorized_peers')
460
470
    def test_upgrade_charm_leader(self, ssh_authorized_peers):
461
 
        self.eligible_leader.return_value = True
 
471
        self.is_elected_leader.return_value = True
462
472
        self.filter_installed_packages.return_value = []
463
473
        hooks.upgrade_charm()
464
474
        self.assertTrue(self.apt_install.called)
473
483
 
474
484
    @patch.object(unison, 'ssh_authorized_peers')
475
485
    def test_upgrade_charm_not_leader(self, ssh_authorized_peers):
476
 
        self.eligible_leader.return_value = False
 
486
        self.is_elected_leader.return_value = False
477
487
        self.filter_installed_packages.return_value = []
478
488
        hooks.upgrade_charm()
479
489
        self.assertTrue(self.apt_install.called)