import unittest __author__ = 'Chris Holcombe ' from mock import patch, MagicMock, call from ceph_hooks import check_for_upgrade def config_side_effect(*args): if args[0] == 'source': return 'cloud:trusty-kilo' elif args[0] == 'key': return 'key' elif args[0] == 'release-version': return 'cloud:trusty-kilo' class UpgradeRollingTestCase(unittest.TestCase): @patch('ceph_hooks.ceph.resolve_ceph_version') @patch('ceph_hooks.ceph.is_bootstrapped') @patch('ceph_hooks.log') @patch('ceph_hooks.ceph.roll_monitor_cluster') @patch('ceph_hooks.ceph.wait_for_all_monitors_to_upgrade') @patch('ceph_hooks.hookenv') @patch('ceph_hooks.ceph.roll_osd_cluster') def test_check_for_upgrade(self, roll_osd_cluster, hookenv, wait_for_mons, roll_monitor_cluster, log, is_bootstrapped, version): version.side_effect = ['firefly', 'hammer'] is_bootstrapped.return_value = True previous_mock = MagicMock().return_value previous_mock.previous.return_value = "cloud:trusty-juno" hookenv.config.side_effect = [previous_mock, config_side_effect('source')] check_for_upgrade() wait_for_mons.assert_called_with( new_version='hammer', upgrade_key='admin' ) roll_osd_cluster.assert_called_with( new_version='hammer', upgrade_key='admin' ) roll_monitor_cluster.assert_called_with( new_version='hammer', upgrade_key='admin' ) log.assert_has_calls( [ call('old_version: firefly'), call('new_version: hammer'), call('firefly to hammer is a valid ' 'upgrade path. Proceeding.') ] ) @patch('ceph_hooks.ceph.is_bootstrapped') @patch('ceph_hooks.log') @patch('ceph_hooks.ceph.roll_monitor_cluster') @patch('ceph_hooks.ceph.wait_for_all_monitors_to_upgrade') @patch('ceph_hooks.hookenv') @patch('ceph_hooks.ceph.roll_osd_cluster') def test_check_for_upgrade_not_bootstrapped(self, roll_osd_cluster, hookenv, wait_for_mons, roll_monitor_cluster, log, is_bootstrapped): is_bootstrapped.return_value = False previous_mock = MagicMock().return_value previous_mock.previous.return_value = "cloud:trusty-juno" hookenv.config.side_effect = [previous_mock, config_side_effect('source')] check_for_upgrade() roll_osd_cluster.assert_not_called() roll_monitor_cluster.assert_not_called()