def test_runner_with_unrecoverable_exception(self): resource_manager = mock.Mock(list=mock.Mock(side_effect=Exception)) exit = mock.Mock() main.runner(resource_manager, mock.Mock(dry_run=True), exit) exit.set.assert_called_once_with()
def test_ensure_enabled_project(self, m_conn, m_osc): m_conn.Connection().get_project().is_enabled = False options = mock.Mock(purge_own_project=False) creds_manager = main.CredentialsManager(options, m_osc.OpenStackConfig()) creds_manager.ensure_enabled_project() self.assertEqual(m_conn.Connection.return_value, creds_manager.admin_cloud) self.assertEqual(m_conn.Connection().connect_as_project.return_value, creds_manager.cloud) self.assertEqual(True, creds_manager.disable_project_after_purge) m_conn.Connection().connect_as_project.assert_called_once_with( options.purge_project) creds_manager.admin_cloud.update_project.assert_called_once_with( mock.ANY, enabled=True) # If project is enabled before purge, no need to disable it after # purge creds_manager = main.CredentialsManager(mock.Mock(), m_osc.OpenStackConfig()) creds_manager.ensure_enabled_project() self.assertEqual(False, creds_manager.disable_project_after_purge) self.assertEqual(1, m_conn.Connection().update_project.call_count)
class TestPools(unittest.TestCase): def setUp(self): self.cloud = mock.Mock(spec_set=shade.openstackcloud.OpenStackCloud) self.creds_manager = mock.Mock(cloud=self.cloud) self.client = mock.MagicMock() @mock.patch('ospurge.resources.octavia.getOctaviaClient', mock.Mock()) def test_list(self): with mock.patch('shade.meta.get_and_munchify', return_value=[{ 'name': 'Pool1' }, { 'name': 'Pool2' }]): self.assertIs(shade.meta.get_and_munchify.return_value, octavia.Pools(self.creds_manager).list()) def test_delete(self): sg = mock.MagicMock() with mock.patch('ospurge.resources.octavia.getOctaviaClient', return_value=self.client) as m: self.assertIsNone(octavia.Pools(self.creds_manager).delete(sg)) self.client.pool_delete.assert_called_once() @mock.patch('ospurge.resources.octavia.getOctaviaClient', mock.Mock()) def test_to_string(self): sg = mock.MagicMock() self.assertIn("Pool (", octavia.Pools(self.creds_manager).to_str(sg))
def test_wait_for_check_prerequisite_nominal(self): resource_manager = base.ServiceResource(mock.Mock()) with mock.patch.object(resource_manager, 'check_prerequisite') as m: m.side_effect = [False, False, True] resource_manager.wait_for_check_prerequisite( mock.Mock(is_set=mock.Mock(return_value=False))) self.assertEqual(3, m.call_count)
def test_should_delete(self): creds_manager = mock.Mock() resource_manager = base.ServiceResource(creds_manager) resource = mock.Mock(get=mock.Mock(side_effect=[None, None])) self.assertEqual(True, resource_manager.should_delete(resource)) resource.get.call_args = [mock.call('project_id'), mock.call('tenant_id')] resource.get.side_effect = ["Foo", "Bar"] self.assertEqual(False, resource_manager.should_delete(resource)) resource.get.side_effect = [42, resource_manager.cleanup_project_id] self.assertEqual(True, resource_manager.should_delete(resource))
class TestVPNServices(unittest.TestCase): def setUp(self): self.cloud = mock.Mock(spec_set=shade.openstackcloud.OpenStackCloud) self.creds_manager = mock.Mock(cloud=self.cloud) self.client = mock.MagicMock() @mock.patch('ospurge.resources.neutron_vpnaas.getNeutronClient', mock.Mock()) def test_check_prerequisite(self): with mock.patch('shade.meta.get_and_munchify', return_value=["conn1"]): self.assertEqual( False, neutron_vpnaas.VPNServices( self.creds_manager).check_prerequisite()) with mock.patch('shade.meta.get_and_munchify', return_value=[]): self.assertEqual( True, neutron_vpnaas.VPNServices( self.creds_manager).check_prerequisite()) @mock.patch('ospurge.resources.neutron_vpnaas.getNeutronClient', mock.Mock()) def test_list(self): with mock.patch('shade.meta.get_and_munchify', return_value=[{ 'name': 'serv1' }, { 'name': 'serv2' }]): self.assertIs( shade.meta.get_and_munchify.return_value, neutron_vpnaas.VPNServices(self.creds_manager).list()) def test_delete(self): sg = mock.MagicMock() with mock.patch('ospurge.resources.neutron_vpnaas.getNeutronClient', return_value=self.client) as m: self.assertIsNone( neutron_vpnaas.VPNServices(self.creds_manager).delete(sg)) self.client.delete_vpnservice.assert_called_once_with(sg['id']) @mock.patch('ospurge.resources.neutron_vpnaas.getNeutronClient', mock.Mock()) def test_to_string(self): sg = mock.MagicMock() self.assertIn( "VPN Service (", neutron_vpnaas.VPNServices(self.creds_manager).to_str(sg))
def test_list_images_by_owner_public_images(self): self.cloud.list_images.return_value = [ { 'owner': 42, 'is_public': True }, { 'owner': 42, 'visibility': 'public' }, ] with mock.patch.object(self.img_lister, 'options', mock.Mock(delete_shared_resources=True)): self.assertEqual(self.cloud.list_images.return_value, self.img_lister.list_images_by_owner()) with mock.patch.object(self.img_lister, 'options', mock.Mock(delete_shared_resources=False)): self.assertEqual([], self.img_lister.list_images_by_owner())
def test_monkeypatch_oscc_logging_warning(self, mock_getLogger): oscc_target = 'os_client_config.cloud_config' m_oscc_logger, m_other_logger = mock.Mock(), mock.Mock() mock_getLogger.side_effect = \ lambda m: m_oscc_logger if m == oscc_target else m_other_logger @utils.monkeypatch_oscc_logging_warning def f(): logging.getLogger(oscc_target).warning("foo") logging.getLogger(oscc_target).warning("!catalog entry not found!") logging.getLogger("other").warning("!catalog entry not found!") f() self.assertEqual([ mock.call.warning('foo'), ], m_oscc_logger.mock_calls) self.assertEqual([mock.call.warning('!catalog entry not found!')], m_other_logger.mock_calls)
def test_call_and_ignore_notfound(self): def raiser(): raise os_exceptions.OpenStackCloudException("") self.assertIsNone( utils.call_and_ignore_exc(os_exceptions.OpenStackCloudException, raiser)) m = mock.Mock() utils.call_and_ignore_exc(os_exceptions.OpenStackCloudException, m, 42) self.assertEqual([mock.call(42)], m.call_args_list)
class TestListeners(unittest.TestCase): def setUp(self): self.cloud = mock.Mock(spec_set=shade.openstackcloud.OpenStackCloud) self.creds_manager = mock.Mock(cloud=self.cloud) self.client = mock.MagicMock() @mock.patch('ospurge.resources.octavia.getOctaviaClient', mock.Mock()) def test_check_prerequisite(self): with mock.patch('shade.meta.get_and_munchify', return_value=["Listener1"]): self.assertEqual( False, octavia.Listeners(self.creds_manager).check_prerequisite()) with mock.patch('shade.meta.get_and_munchify', return_value=[]): self.assertEqual( True, octavia.Listeners(self.creds_manager).check_prerequisite()) @mock.patch('ospurge.resources.octavia.getOctaviaClient', mock.Mock()) def test_list(self): with mock.patch('shade.meta.get_and_munchify', return_value=[{ 'name': 'Listener1' }, { 'name': 'Listener2' }]): self.assertIs(shade.meta.get_and_munchify.return_value, octavia.Listeners(self.creds_manager).list()) def test_delete(self): sg = mock.MagicMock() with mock.patch('ospurge.resources.octavia.getOctaviaClient', return_value=self.client) as m: self.assertIsNone(octavia.Listeners(self.creds_manager).delete(sg)) self.client.listener_delete.assert_called_once() @mock.patch('ospurge.resources.octavia.getOctaviaClient', mock.Mock()) def test_to_string(self): sg = mock.MagicMock() self.assertIn("Listener (", octavia.Listeners(self.creds_manager).to_str(sg))
def test_call_and_ignore_notfound(self): def raiser(): raise shade.exc.OpenStackCloudResourceNotFound("") self.assertIsNone( utils.call_and_ignore_exc(shade.exc.OpenStackCloudResourceNotFound, raiser)) m = mock.Mock() utils.call_and_ignore_exc(shade.exc.OpenStackCloudResourceNotFound, m, 42) self.assertEqual([mock.call(42)], m.call_args_list)
def test_runner_delete_dry_run(self): resources = [mock.Mock(), mock.Mock()] resource_manager = mock.Mock(list=mock.Mock(return_value=resources)) options = mock.Mock(dry_run=True, disable_only=False) exit = mock.Mock(is_set=mock.Mock(return_value=False)) main.runner(resource_manager, options, exit) resource_manager.wait_for_check_prerequisite.assert_not_called() resource_manager.delete.assert_not_called()
class TestNetworks(unittest.TestCase): def setUp(self): self.cloud = mock.Mock(spec_set=shade.openstackcloud.OpenStackCloud) self.creds_manager = mock.Mock(cloud=self.cloud) @mock.patch('ospurge.resources.neutron.getNeutronClient', mock.Mock()) def test_check_prerequisite(self): with mock.patch('shade.meta.get_and_munchify', return_value=[]): self.cloud.list_ports.return_value = [{ 'device_owner': 'network:dhcp' }] self.assertEqual( True, neutron.Networks(self.creds_manager).check_prerequisite()) self.cloud.list_ports.return_value = [{ 'device_owner': 'compute:None' }] self.assertEqual( False, neutron.Networks(self.creds_manager).check_prerequisite()) self.cloud.list_ports.assert_called_with( filters={'tenant_id': self.creds_manager.project_id}) def test_list(self): self.creds_manager.options.delete_shared_resources = False self.cloud.list_networks.return_value = [{ 'router:external': True }, { 'router:external': True }] nw_list = neutron.Networks(self.creds_manager).list() self.assertEqual(0, len(nw_list)) self.creds_manager.options.delete_shared_resources = True nw_list = neutron.Networks(self.creds_manager).list() self.assertEqual(2, len(nw_list)) self.cloud.list_networks.assert_called_with( filters={'tenant_id': self.creds_manager.project_id}) def test_delete(self): nw = mock.MagicMock() self.assertIsNone(neutron.Networks(self.creds_manager).delete(nw)) self.cloud.delete_network.assert_called_once_with(nw['id']) def test_to_string(self): nw = mock.MagicMock() self.assertIn("Network (", neutron.Networks(self.creds_manager).to_str(nw))
def test_runner_disable_dry_run(self): resources = [mock.Mock(), mock.Mock(), mock.Mock()] resource_manager = mock.Mock(list=mock.Mock(return_value=resources)) options = mock.Mock(dry_run=True, resource=False, disable_only=True) exit = mock.Mock(is_set=mock.Mock(side_effect=[False, False, True])) main.runner(resource_manager, options, exit) resource_manager.list.assert_called_once_with() resource_manager.wait_for_check_prerequisite.assert_not_called() resource_manager.should_delete.assert_not_called() resource_manager.delete.assert_not_called() resource_manager.disable.assert_not_called() resource_manager.assert_not_called()
def test_wait_for_check_prerequisite_runtimeerror(self, mock_check_prerequisite, mock_sleep): resource_manager = base.ServiceResource(mock.Mock()) mock_exit = mock.Mock(is_set=mock.Mock(return_value=False)) with mock.patch('time.time') as mock_time: mock_time.side_effect = generate_timeout_series(675) self.assertRaisesRegex( exceptions.TimeoutError, "^Timeout exceeded .*", resource_manager.wait_for_check_prerequisite, mock_exit) self.assertEqual(mock_check_prerequisite.call_args_list, [mock.call()] * (2700 // 675 - 1)) self.assertEqual(mock_sleep.call_args_list, [mock.call(i) for i in (2, 4, 8)]) mock_sleep.reset_mock() mock_check_prerequisite.reset_mock() mock_exit.is_set.return_value = True self.assertRaisesRegex(RuntimeError, ".* exited because it was interrupted .*", resource_manager.wait_for_check_prerequisite, mock_exit)
def test_ensure_role_on_project(self, m_conn, m_osc): options = mock.Mock(purge_own_project=False) config = m_osc.OpenStackConfig() creds_manager = main.CredentialsManager(options, config) creds_manager.ensure_role_on_project() self.assertEqual(m_conn.Connection.return_value, creds_manager.admin_cloud) self.assertEqual(m_conn.Connection().connect_as_project.return_value, creds_manager.cloud) creds_manager.admin_cloud.grant_role.assert_called_once_with( options.admin_role_name, project=options.purge_project, user=mock.ANY) self.assertEqual(True, creds_manager.revoke_role_after_purge) # If purge_own_project is not False, we purge our own project # so no need to revoke role after purge creds_manager = main.CredentialsManager(mock.Mock(), m_osc.OpenStackConfig()) creds_manager.ensure_role_on_project() self.assertEqual(False, creds_manager.revoke_role_after_purge)
def test_init_without_order_attr(self): class Foo5(base.ServiceResource): def list(self): pass def delete(self, resource): pass @staticmethod def to_str(resource): pass self.assertRaisesRegex(ValueError, 'Class .*ORDER.*', Foo5, mock.Mock())
def test_instantiate_nominal(self): creds_manager = mock.Mock() resource_manager = base.ServiceResource(creds_manager) self.assertEqual(resource_manager.cloud, creds_manager.cloud) self.assertEqual(resource_manager.options, creds_manager.options) self.assertEqual(resource_manager.cleanup_project_id, creds_manager.project_id) self.assertEqual(12, resource_manager.order()) self.assertEqual(True, resource_manager.check_prerequisite()) self.assertRaises(NotImplementedError, resource_manager.delete, '') self.assertRaises(NotImplementedError, resource_manager.to_str, '') self.assertRaises(NotImplementedError, resource_manager.list)
class TestIpSecSiteConnections(unittest.TestCase): def setUp(self): self.cloud = mock.Mock(spec_set=shade.openstackcloud.OpenStackCloud) self.creds_manager = mock.Mock(cloud=self.cloud) self.client = mock.MagicMock() @mock.patch('ospurge.resources.neutron_vpnaas.getNeutronClient', mock.Mock()) def test_list(self): with mock.patch('shade.meta.get_and_munchify', return_value=[{ 'name': 'conn1' }, { 'name': 'conn2' }]): self.assertIs( shade.meta.get_and_munchify.return_value, neutron_vpnaas.IpSecSiteConnections(self.creds_manager).list()) def test_delete(self): sg = mock.MagicMock() with mock.patch('ospurge.resources.neutron_vpnaas.getNeutronClient', return_value=self.client) as m: self.assertIsNone( neutron_vpnaas.IpSecSiteConnections( self.creds_manager).delete(sg)) self.client.delete_ipsec_site_connection.assert_called_once_with( sg['id']) @mock.patch('ospurge.resources.neutron_vpnaas.getNeutronClient', mock.Mock()) def test_to_string(self): sg = mock.MagicMock() self.assertIn( "IPSec Site Connection (", neutron_vpnaas.IpSecSiteConnections(self.creds_manager).to_str(sg))
def test_disable_project(self, m_conn, m_osc): options = mock.Mock(purge_own_project=False) config = m_osc.OpenStackConfig() creds_manager = main.CredentialsManager(options, config) creds_manager.disable_project() self.assertEqual(m_conn.Connection.return_value, creds_manager.admin_cloud) self.assertEqual(m_conn.Connection().connect_as_project.return_value, creds_manager.cloud) m_conn.Connection().connect_as_project.assert_called_once_with( options.purge_project) m_conn.Connection().update_project.assert_called_once_with( mock.ANY, enabled=False)
def test_revoke_role_on_project(self, m_conn, m_osc): options = mock.Mock(purge_own_project=False) config = m_osc.OpenStackConfig() creds_manager = main.CredentialsManager(options, config) creds_manager.revoke_role_on_project() self.assertEqual(m_conn.Connection.return_value, creds_manager.admin_cloud) self.assertEqual(m_conn.Connection().connect_as_project.return_value, creds_manager.cloud) creds_manager.admin_cloud.revoke_role.assert_called_once_with( options.admin_role_name, project=options.purge_project, user=mock.ANY)
def test_runner_delete(self): resources = [mock.Mock(), mock.Mock(), mock.Mock()] resource_manager = mock.Mock(list=mock.Mock(return_value=resources)) options = mock.Mock(dry_run=False, resource=False, disable_only=False) exit = mock.Mock(is_set=mock.Mock(side_effect=[False, False, True])) main.runner(resource_manager, options, exit) resource_manager.list.assert_called_once_with() resource_manager.wait_for_check_prerequisite.assert_called_once_with( exit) self.assertEqual([mock.call(resources[0]), mock.call(resources[1])], resource_manager.should_delete.call_args_list) self.assertEqual(2, resource_manager.delete.call_count) self.assertEqual([mock.call(resources[0]), mock.call(resources[1])], resource_manager.delete.call_args_list)
def test_runner_with_recoverable_exception(self): class MyEndpointNotFound(Exception): pass exc = os_exceptions.OpenStackCloudException("") exc.inner_exception = (MyEndpointNotFound, ) resource_manager = mock.Mock(list=mock.Mock(side_effect=exc)) exit = mock.Mock() main.runner(resource_manager, mock.Mock(dry_run=True), exit) self.assertEqual(1, resource_manager.list.call_count) self.assertFalse(exit.set.called) resource_manager = mock.Mock(list=mock.Mock( side_effect=MyEndpointNotFound)) main.runner(resource_manager, mock.Mock(dry_run=True), exit) self.assertEqual(1, resource_manager.list.call_count) self.assertFalse(exit.set.called)
def setUp(self): self.cloud = mock.Mock(spec_set=shade.openstackcloud.OpenStackCloud) self.creds_manager = mock.Mock(cloud=self.cloud)
def setUp(self): self.cloud = mock.Mock(spec_set=openstack.connection.Connection) self.creds_manager = mock.Mock(cloud=self.cloud)
def setUp(self): self.cloud = mock.Mock(spec_set=openstack.connection.Connection) self.obj_lister = swift.ListObjectsMixin() self.obj_lister.cloud = self.cloud
def setUp(self): self.cloud = mock.Mock(spec_set=openstack.connection.Connection) self.img_lister = glance.ListImagesMixin() self.img_lister.cloud = self.cloud self.img_lister.cleanup_project_id = 42 self.img_lister.options = None
""" iteration = 0 while True: iteration += 1 yield (iteration * timeout) + iteration class SignatureMismatch(Exception): pass class WrongMethodDefOrder(Exception): pass @mock.patch('logging.warning', mock.Mock(side_effect=SignatureMismatch)) class TestMatchSignaturesMeta(unittest.TestCase): class Test(six.with_metaclass(base.MatchSignaturesMeta)): def a(self, arg1): pass def b(self, arg1=True): pass def c(self, arg1, arg2): pass def _private(self): pass def test_nominal(self):
class TestServiceResource(unittest.TestCase): def test_init_without_order_attr(self): class Foo5(base.ServiceResource): def list(self): pass def delete(self, resource): pass @staticmethod def to_str(resource): pass self.assertRaisesRegex(ValueError, 'Class .*ORDER.*', Foo5, mock.Mock()) def test_instantiate_without_concrete_methods(self): class Foo6(base.ServiceResource): ORDER = 1 self.assertRaises(TypeError, Foo6) @mock.patch.multiple(base.ServiceResource, ORDER=12, __abstractmethods__=set()) def test_instantiate_nominal(self): creds_manager = mock.Mock() resource_manager = base.ServiceResource(creds_manager) self.assertEqual(resource_manager.cloud, creds_manager.cloud) self.assertEqual(resource_manager.options, creds_manager.options) self.assertEqual(resource_manager.cleanup_project_id, creds_manager.project_id) self.assertEqual(12, resource_manager.order()) self.assertEqual(True, resource_manager.check_prerequisite()) self.assertRaises(NotImplementedError, resource_manager.delete, '') self.assertRaises(NotImplementedError, resource_manager.to_str, '') self.assertRaises(NotImplementedError, resource_manager.list) @mock.patch.multiple(base.ServiceResource, ORDER=12, __abstractmethods__=set()) def test_should_delete(self): creds_manager = mock.Mock() resource_manager = base.ServiceResource(creds_manager) resource = mock.Mock(get=mock.Mock(side_effect=[None, None])) self.assertEqual(True, resource_manager.should_delete(resource)) resource.get.call_args = [mock.call('project_id'), mock.call('tenant_id')] resource.get.side_effect = ["Foo", "Bar"] self.assertEqual(False, resource_manager.should_delete(resource)) resource.get.side_effect = [42, resource_manager.cleanup_project_id] self.assertEqual(True, resource_manager.should_delete(resource)) @mock.patch('time.sleep', autospec=True) @mock.patch.multiple(base.ServiceResource, ORDER=12, __abstractmethods__=set()) @mock.patch.object(base.ServiceResource, 'check_prerequisite', return_value=False) def test_wait_for_check_prerequisite_runtimeerror( self, mock_check_prerequisite, mock_sleep): resource_manager = base.ServiceResource(mock.Mock()) mock_exit = mock.Mock(is_set=mock.Mock(return_value=False)) with mock.patch('time.time') as mock_time: mock_time.side_effect = generate_timeout_series(30) self.assertRaisesRegex( exceptions.TimeoutError, "^Timeout exceeded .*", resource_manager.wait_for_check_prerequisite, mock_exit ) self.assertEqual(mock_check_prerequisite.call_args_list, [mock.call()] * (120 // 30 - 1)) self.assertEqual(mock_sleep.call_args_list, [mock.call(i) for i in (2, 4, 8)]) mock_sleep.reset_mock() mock_check_prerequisite.reset_mock() mock_exit.is_set.return_value = True self.assertRaisesRegex( RuntimeError, ".* exited because it was interrupted .*", resource_manager.wait_for_check_prerequisite, mock_exit ) @mock.patch('time.sleep', mock.Mock(spec_set=time.sleep)) @mock.patch.multiple(base.ServiceResource, ORDER=12, __abstractmethods__=set()) def test_wait_for_check_prerequisite_nominal(self): resource_manager = base.ServiceResource(mock.Mock()) with mock.patch.object(resource_manager, 'check_prerequisite') as m: m.side_effect = [False, False, True] resource_manager.wait_for_check_prerequisite( mock.Mock(is_set=mock.Mock(return_value=False))) self.assertEqual(3, m.call_count)
def test_init_with_project_not_found(self, m_conn, m_osc): m_conn.Connection().get_project.return_value = None self.assertRaises(exceptions.OSProjectNotFound, main.CredentialsManager, mock.Mock(purge_own_project=False), m_osc.OpenStackConfig())