Exemple #1
0
    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'])
Exemple #2
0
 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)
Exemple #3
0
 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]
         )
Exemple #4
0
    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
Exemple #5
0
 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)
Exemple #6
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'])
Exemple #7
0
 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])
Exemple #8
0
    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))
Exemple #9
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'])
Exemple #10
0
    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'])
Exemple #11
0
    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)
        )
Exemple #12
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'])
Exemple #13
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'])