def test_validate_invalid_flavor(self): self.troveclient.flavors.get.side_effect = troveexc.NotFound() self.troveclient.flavors.find.side_effect = troveexc.NotFound() self.rsrc_defn['Properties']['instances'][0]['flavor'] = 'm1.small' 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, six.text_type(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_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) scheduler.TaskRunner(instance.create)() self.m.StubOutWithMock(self.fc.instances, 'get') self.fc.instances.get(12345).AndRaise( troveexc.NotFound(404)) self.m.ReplayAll() scheduler.TaskRunner(instance.delete)() self.m.VerifyAll()
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 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(msg) elif num_matches > 1: raise exceptions.NoUniqueMatch() else: return matches[0]
def test_osdatabase_delete(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).AndReturn(fake_dbinstance) self.m.StubOutWithMock(fake_dbinstance, 'delete') fake_dbinstance.delete().AndReturn(None) 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()
def find(self, base_url=None, **kwargs): """Find a single item with attributes matching ``**kwargs``. :param base_url: if provided, the generated URL will be appended to it """ kwargs = self._filter_kwargs(kwargs) rl = self._list( '%(base_url)s%(query)s' % { 'base_url': self.build_url(base_url=base_url, **kwargs), 'query': '?%s' % parse.urlencode(kwargs) if kwargs else '', }, self.collection_key) num = len(rl) if num == 0: msg = "No %s matching %s." % (self.resource_class.__name__, kwargs) raise exceptions.NotFound(404, msg) elif num > 1: raise exceptions.NoUniqueMatch else: return rl[0]
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) scheduler.TaskRunner(instance.create)() self.m.StubOutWithMock(self.fc.instances, 'get') self.fc.instances.get(12345).AndReturn(fake_dbinstance) self.m.StubOutWithMock(fake_dbinstance, 'delete') fake_dbinstance.delete().AndReturn(None) # Simulate an OverLimit exception self.m.StubOutWithMock(fake_dbinstance, 'get') fake_dbinstance.get().AndRaise( troveexc.RequestEntityTooLarge) fake_dbinstance.get().AndReturn(None) fake_dbinstance.get().AndRaise(troveexc.NotFound(404)) self.m.ReplayAll() scheduler.TaskRunner(instance.delete)() self.m.VerifyAll()
def get(self, resource_id): for resource in self.resources: if resource.id == str(resource_id): return resource raise exceptions.NotFound(resource_id)