def test_delete_not_found_during_delete(self): tc = self._create_resource('cluster', self.rsrc_defn, self.stack) fake_cluster = FakeTroveCluster() fake_cluster.task = {'name': 'NONE'} fake_cluster.delete = mock.Mock(side_effect=[troveexc.NotFound()]) self.client.clusters.get.side_effect = [fake_cluster, fake_cluster, troveexc.NotFound()] scheduler.TaskRunner(tc.delete)() self.assertEqual((tc.DELETE, tc.COMPLETE), tc.state) self.assertEqual(1, fake_cluster.delete.call_count)
def test_validate_invalid_flavor(self): self.troveclient.flavors.get.side_effect = troveexc.NotFound() self.troveclient.flavors.find.side_effect = troveexc.NotFound() props = copy.deepcopy(self.tmpl['resources']['cluster']['properties']) props['instances'][0]['flavor'] = 'm1.small' self.rsrc_defn = self.rsrc_defn.freeze(properties=props) tc = cluster.TroveCluster('cluster', self.rsrc_defn, self.stack) ex = self.assertRaises(exception.StackValidationFailed, tc.validate) error_msg = ("Property error: " "resources.cluster.properties.instances[0].flavor: " "Error validating value 'm1.small': Not Found (HTTP 404)") self.assertEqual(error_msg, str(ex))
def test_delete_not_found(self): tc = self._create_resource('cluster', self.rsrc_defn, self.stack) self.client.clusters.get.side_effect = troveexc.NotFound() scheduler.TaskRunner(tc.delete)() self.assertEqual((tc.DELETE, tc.COMPLETE), tc.state) self.client.clusters.get.assert_called_with(tc.resource_id) self.assertEqual(2, self.client.clusters.get.call_count)
def test_instance_resource_not_found(self): t = template_format.parse(db_template) instance = self._setup_test_instance('dbinstance_del', t) self.client.instances.get.side_effect = [ self.fake_instance, troveexc.NotFound(404) ] scheduler.TaskRunner(instance.create)() scheduler.TaskRunner(instance.delete)()
def test_instance_delete_overlimit(self): t = template_format.parse(db_template) instance = self._setup_test_instance('dbinstance_del', t) # Simulate an OverLimit exception self.client.instances.get.side_effect = [ troveexc.RequestEntityTooLarge(), self.fake_instance, troveexc.NotFound(404) ] scheduler.TaskRunner(instance.create)() scheduler.TaskRunner(instance.delete)()
def test_osdatabase_restore_point(self): fake_dbinstance = FakeDBInstance() t = template_format.parse(db_template) t['Resources']['MySqlCloudDB']['Properties']['restore_point'] = "1234" instance = self._setup_test_clouddbinstance('dbinstance_create', t) trove.TroveClientPlugin._create().AndReturn(self.fc) self.fc.flavors = self.m.CreateMockAnything() self.m.StubOutWithMock(self.fc.flavors, "get") self.fc.flavors.get(u'1GB').AndRaise(troveexc.NotFound()) self.m.StubOutWithMock(self.fc.flavors, "find") self.fc.flavors.find(name=u'1GB').AndReturn(FakeFlavor(1, '1GB')) self.fc.instances = self.m.CreateMockAnything() self.m.StubOutWithMock(self.fc.instances, 'create') users = [{ "name": "testuser", "password": "******", "host": "%", "databases": [{ "name": "validdb" }] }] databases = [{ "collate": "utf8_general_ci", "character_set": "utf8", "name": "validdb" }] self.fc.instances.create('test', 1, volume={ 'size': 30 }, databases=databases, users=users, restorePoint={ "backupRef": "1234" }, availability_zone=None, datastore="SomeDStype", datastore_version="MariaDB-5.5", nics=[], replica_of=None, replica_count=None).AndReturn(fake_dbinstance) self.fc.instances.get(fake_dbinstance.id).AndReturn(fake_dbinstance) self.m.ReplayAll() scheduler.TaskRunner(instance.create)() self.assertEqual((instance.CREATE, instance.COMPLETE), instance.state) self.m.VerifyAll()
def test_osdatabase_resource_not_found(self): fake_dbinstance = FakeDBInstance() t = template_format.parse(db_template) instance = self._setup_test_clouddbinstance('dbinstance_del', t) self._stubout_create(instance, fake_dbinstance) self._stubout_check_create_complete(fake_dbinstance) self.fc.instances.get(fake_dbinstance.id).AndRaise( troveexc.NotFound(404)) self.m.ReplayAll() scheduler.TaskRunner(instance.create)() scheduler.TaskRunner(instance.delete)() self.m.VerifyAll()
def find(self, **kwargs): """ Find a single item with attributes matching ``**kwargs``. This isn't very efficient: it loads the entire list then filters on the Python side. """ matches = self.findall(**kwargs) num_matches = len(matches) if num_matches == 0: msg = "No %s matching %s." % (self.resource_class.__name__, kwargs) raise exceptions.NotFound(404, msg) elif num_matches > 1: raise exceptions.NoUniqueMatch else: return matches[0]
def test_delete_incorrect_status(self): tc = self._create_resource('cluster', self.rsrc_defn, self.stack) fake_cluster_bad = FakeTroveCluster() fake_cluster_bad.task = {'name': 'BUILDING'} fake_cluster_bad.delete = mock.Mock() fake_cluster_ok = FakeTroveCluster() fake_cluster_ok.task = {'name': 'NONE'} fake_cluster_ok.delete = mock.Mock() self.client.clusters.get.side_effect = [fake_cluster_bad, # two for cluster_delete method fake_cluster_bad, fake_cluster_ok, # for _refresh_cluster method troveexc.NotFound()] scheduler.TaskRunner(tc.delete)() self.assertEqual((tc.DELETE, tc.COMPLETE), tc.state) fake_cluster_bad.delete.assert_not_called() fake_cluster_ok.delete.assert_called_once_with()
def test_instance_restore_point(self): t = template_format.parse(db_template) t['Resources']['MySqlCloudDB']['Properties']['restore_point'] = "1234" instance = self._setup_test_instance('dbinstance_create', t) self.client.flavors.get.side_effect = [troveexc.NotFound()] self.client.flavors.find.return_value = FakeFlavor(1, '1GB') scheduler.TaskRunner(instance.create)() self.assertEqual((instance.CREATE, instance.COMPLETE), instance.state) users = [{ "name": "testuser", "password": "******", "host": "%", "databases": [{ "name": "validdb" }] }] databases = [{ "collate": "utf8_general_ci", "character_set": "utf8", "name": "validdb" }] self.client.instances.create.assert_called_once_with( 'test', '1', volume={'size': 30}, databases=databases, users=users, restorePoint={"backupRef": "1234"}, availability_zone=None, datastore="SomeDStype", datastore_version="MariaDB-5.5", nics=[], replica_of=None, replica_count=None)
def test_osdatabase_delete_overlimit(self): fake_dbinstance = FakeDBInstance() t = template_format.parse(db_template) instance = self._setup_test_clouddbinstance('dbinstance_del', t) self._stubout_create(instance, fake_dbinstance) self._stubout_check_create_complete(fake_dbinstance) # delete call self.fc.instances.get(fake_dbinstance.id).AndReturn(fake_dbinstance) self.m.StubOutWithMock(fake_dbinstance, 'delete') fake_dbinstance.delete().AndReturn(None) # Simulate an OverLimit exception self.fc.instances.get(fake_dbinstance.id).AndRaise( troveexc.RequestEntityTooLarge) self.fc.instances.get(fake_dbinstance.id).AndReturn(None) self.fc.instances.get(fake_dbinstance.id).AndRaise( troveexc.NotFound(404)) self.m.ReplayAll() scheduler.TaskRunner(instance.create)() scheduler.TaskRunner(instance.delete)() self.m.VerifyAll()