def test_discard_a_blessed_instance(self): self.vmsconn.set_return_val("discard", None) blessed_uuid = utils.create_blessed_instance( self.context, source_uuid="UNITTEST_DISCARD") pre_discard_time = datetime.utcnow() self.cobalt.discard_instance(self.context, instance_uuid=blessed_uuid) try: db.instance_get(self.context, blessed_uuid) self.fail( "The blessed instance should no longer exists after being discarded." ) except exception.InstanceNotFound: # This ensures that the instance has been marked as deleted in the database. Now assert # that the rest of its attributes have been marked. self.context.read_deleted = 'yes' instances = db.instance_get_all(self.context) self.assertEquals(1, len(instances)) discarded_instance = instances[0] self.assertTrue( pre_discard_time <= discarded_instance['terminated_at']) self.assertEquals(vm_states.DELETED, discarded_instance['vm_state'])
def test_launch_multiple(self): # Note difference wrt Essex for num in [1, 5]: blessed_instance_uuid = utils.create_blessed_instance(self.context) self.cobalt_api.launch_instance(self.context, blessed_instance_uuid, params={"num_instances": num}) launched = self.cobalt_api.list_launched_instances(self.context, blessed_instance_uuid) launched.sort(key=lambda inst: inst["launch_index"]) self.assertEqual(len(launched), num) for i in range(num): self.assertEqual(launched[i]["launch_index"], i)
def test_launch_multiple_scheduling(self): blessed_instance_uuid = utils.create_blessed_instance(self.context) params = {"num_instances": 5, "availability_zone": "nova", "scheduler_hints": {"foo": "bar"}} self.cobalt_api.launch_instance(self.context, blessed_instance_uuid, params=params) launched = self.cobalt_api.list_launched_instances(self.context, blessed_instance_uuid) for instance in launched: uuid = instance["uuid"] self.assertEqual("nova", instance["availability_zone"]) self.assertTrue( {"availability_zone": "nova", "scheduler_hints": {"foo": "bar"}} in utils.stored_hints[uuid] )
def test_check_delete(self): instance_uuid = utils.create_instance(self.context) # This should not raise an error because the instance is not blessed. self.cobalt_api.check_delete(self.context, instance_uuid) blessed_instance_uuid = utils.create_blessed_instance(self.context) try: self.cobalt_api.check_delete(self.context, blessed_instance_uuid) self.fail("Check delete should fail for a blessed instance.") except exception.NovaException: pass
def test_launch_multiple(self): # Note difference wrt Essex for num in [1, 5]: blessed_instance_uuid = utils.create_blessed_instance(self.context) self.cobalt_api.launch_instance(self.context, blessed_instance_uuid, params={'num_instances': num}) launched = self.cobalt_api.list_launched_instances( self.context, blessed_instance_uuid) launched.sort(key=lambda inst: inst['launch_index']) self.assertEqual(len(launched), num) for i in range(num): self.assertEqual(launched[i]['launch_index'], i)
def test_launch_instance_images(self): self.vmsconn.set_return_val("launch", None) blessed_uuid = utils.create_blessed_instance(self.context, instance={'system_metadata':{'images':'image1'}}) instance = db.instance_get_by_uuid(self.context, blessed_uuid) system_metadata = db.instance_system_metadata_get(self.context, instance['uuid']) self.assertEquals('image1', system_metadata.get('images', '')) launched_uuid = utils.create_pre_launched_instance(self.context, source_uuid=blessed_uuid) self.cobalt.launch_instance(self.context, instance_uuid=launched_uuid) # Ensure that image1 was passed to vmsconn.launch self.assertEquals(['image1'], self.vmsconn.params_passed[0]['kwargs']['image_refs'])
def test_launch_multiple_scheduling(self): blessed_instance_uuid = utils.create_blessed_instance(self.context) params = { 'num_instances' : 5, 'availability_zone' : 'nova', 'scheduler_hints' : {'foo':'bar'} } self.cobalt_api.launch_instance(self.context, blessed_instance_uuid, params=params) launched = self.cobalt_api.list_launched_instances( self.context, blessed_instance_uuid) for instance in launched: uuid = instance['uuid'] self.assertEqual('nova', instance['availability_zone']) self.assertTrue({'availability_zone' : 'nova', 'scheduler_hints' : {'foo':'bar'}} in utils.stored_hints[uuid])
def test_discard(self): blessed_uuid = utils.create_blessed_instance(self.context) pre_usages = db.quota_usage_get_all_by_project(self.context, self.context.project_id) self.cobalt_api.discard_instance(self.context, blessed_uuid) instance = db.instance_get_by_uuid(self.context, blessed_uuid) self.assertEqual(task_states.DELETING, instance['task_state']) # Assert that the resources have diminished. post_usages = db.quota_usage_get_all_by_project(self.context, self.context.project_id) self.assertEqual(pre_usages['instances'].get('in_use',0) - 1, post_usages['instances'].get('in_use',0)) self.assertEqual(pre_usages['ram'].get('in_use', 0) - instance['memory_mb'], post_usages['ram'].get('in_use',0)) self.assertEqual(pre_usages['cores'].get('in_use',0) - instance['vcpus'], post_usages['cores'].get('in_use',0))
def test_launch_instance_images(self): self.vmsconn.set_return_val("launch", None) blessed_uuid = utils.create_blessed_instance( self.context, instance={'system_metadata': { 'images': 'image1' }}) instance = db.instance_get_by_uuid(self.context, blessed_uuid) system_metadata = db.instance_system_metadata_get( self.context, instance['uuid']) self.assertEquals('image1', system_metadata.get('images', '')) launched_uuid = utils.create_pre_launched_instance( self.context, source_uuid=blessed_uuid) self.cobalt.launch_instance(self.context, instance_uuid=launched_uuid) # Ensure that image1 was passed to vmsconn.launch self.assertEquals( ['image1'], self.vmsconn.params_passed[0]['kwargs']['image_refs'])
def test_discard_a_blessed_instance(self): self.vmsconn.set_return_val("discard", None) blessed_uuid = utils.create_blessed_instance(self.context, source_uuid="UNITTEST_DISCARD") pre_discard_time = datetime.utcnow() self.cobalt.discard_instance(self.context, instance_uuid=blessed_uuid) try: db.instance_get(self.context, blessed_uuid) self.fail("The blessed instance should no longer exists after being discarded.") except exception.InstanceNotFound: # This ensures that the instance has been marked as deleted in the database. Now assert # that the rest of its attributes have been marked. self.context.read_deleted = 'yes' instances = db.instance_get_all(self.context) self.assertEquals(1, len(instances)) discarded_instance = instances[0] self.assertTrue(pre_discard_time <= discarded_instance['terminated_at']) self.assertEquals(vm_states.DELETED, discarded_instance['vm_state'])
def test_double_discard(self): blessed_uuid = utils.create_blessed_instance(self.context) pre_usages = db.quota_usage_get_all_by_project(self.context, self.context.project_id) self.cobalt_api.discard_instance(self.context, blessed_uuid) self.cobalt_api.discard_instance(self.context, blessed_uuid) instance = db.instance_get_by_uuid(self.context, blessed_uuid) self.assertEqual(task_states.DELETING, instance["task_state"]) # Assert that the resources have diminished only once and not twice since we have # discarded twice. post_usages = db.quota_usage_get_all_by_project(self.context, self.context.project_id) self.assertEqual(pre_usages["instances"].get("in_use", 0) - 1, post_usages["instances"].get("in_use", 0)) self.assertEqual( pre_usages["ram"].get("in_use", 0) - instance["memory_mb"], post_usages["ram"].get("in_use", 0) ) self.assertEqual( pre_usages["cores"].get("in_use", 0) - instance["vcpus"], post_usages["cores"].get("in_use", 0) )
def test_launch_instance(self): self.vmsconn.set_return_val("launch", None) blessed_uuid = utils.create_blessed_instance(self.context) launched_uuid = utils.create_pre_launched_instance(self.context, source_uuid=blessed_uuid) pre_launch_time = datetime.utcnow() self.cobalt.launch_instance(self.context, instance_uuid=launched_uuid) launched_instance = db.instance_get_by_uuid(self.context, launched_uuid) self.assertNotEquals(None, launched_instance['power_state']) self.assertEquals("active", launched_instance['vm_state']) self.assertTrue(pre_launch_time <= launched_instance['launched_at']) self.assertEquals(None, launched_instance['task_state']) self.assertEquals(self.cobalt.host, launched_instance['host']) self.assertEquals(self.cobalt.nodename, launched_instance['node']) # Ensure the proper vms policy is passed into vmsconn self.assertEquals(';blessed=%s;;flavor=m1.tiny;;tenant=fake;;uuid=%s;'\ % (blessed_uuid, launched_uuid), self.vmsconn.params_passed[0]['kwargs']['vms_policy'])
def test_launch_instance(self): self.vmsconn.set_return_val("launch", None) blessed_uuid = utils.create_blessed_instance(self.context) launched_uuid = utils.create_pre_launched_instance( self.context, source_uuid=blessed_uuid) pre_launch_time = datetime.utcnow() self.cobalt.launch_instance(self.context, instance_uuid=launched_uuid) launched_instance = db.instance_get_by_uuid(self.context, launched_uuid) self.assertNotEquals(None, launched_instance['power_state']) self.assertEquals("active", launched_instance['vm_state']) self.assertTrue(pre_launch_time <= launched_instance['launched_at']) self.assertEquals(None, launched_instance['task_state']) self.assertEquals(self.cobalt.host, launched_instance['host']) self.assertEquals(self.cobalt.nodename, launched_instance['node']) # Ensure the proper vms policy is passed into vmsconn self.assertEquals(';blessed=%s;;flavor=m1.tiny;;tenant=fake;;uuid=%s;'\ % (blessed_uuid, launched_uuid), self.vmsconn.params_passed[0]['kwargs']['vms_policy'])