added purge option and tightened up testing
This commit is contained in:
		@@ -683,9 +683,9 @@ class InstanceTypeCommands(object):
 | 
			
		||||
        vcpus,
 | 
			
		||||
        local_gb,
 | 
			
		||||
        flavorid,
 | 
			
		||||
        swap,
 | 
			
		||||
        rxtx_quota,
 | 
			
		||||
        rxtx_cap):
 | 
			
		||||
        swap=0,
 | 
			
		||||
        rxtx_quota=0,
 | 
			
		||||
        rxtx_cap=0):
 | 
			
		||||
        """Creates instance types / flavors
 | 
			
		||||
           arguments: name memory vcpus local_gb flavorid swap rxtx_quota
 | 
			
		||||
                      rxtx_cap
 | 
			
		||||
@@ -719,13 +719,18 @@ class InstanceTypeCommands(object):
 | 
			
		||||
        try:
 | 
			
		||||
            if purge == "--purge":
 | 
			
		||||
                instance_types.purge(name)
 | 
			
		||||
                verb = "deleted"
 | 
			
		||||
                verb = "purged"
 | 
			
		||||
            else:
 | 
			
		||||
                instance_types.destroy(name)
 | 
			
		||||
                verb = "purged"
 | 
			
		||||
                verb = "deleted"
 | 
			
		||||
        except exception.ApiError:
 | 
			
		||||
            print "Valid instance type name is required"
 | 
			
		||||
            sys.exit(1)
 | 
			
		||||
        except exception.DBError, e:
 | 
			
		||||
            print "DB Error: %s" % e
 | 
			
		||||
            sys.exit(2)
 | 
			
		||||
        except:
 | 
			
		||||
            sys.exit(3)
 | 
			
		||||
        else:
 | 
			
		||||
            print "%s %s" % (name, verb)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -81,6 +81,19 @@ def destroy(name):
 | 
			
		||||
                                     name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def purge(name):
 | 
			
		||||
    """Removes instance types / flavors from database
 | 
			
		||||
    arguments: name"""
 | 
			
		||||
    if name == None:
 | 
			
		||||
        raise exception.InvalidInputException(_("No instance type specified"))
 | 
			
		||||
    else:
 | 
			
		||||
        try:
 | 
			
		||||
            db.instance_type_purge(context.get_admin_context(), name)
 | 
			
		||||
        except exception.NotFound:
 | 
			
		||||
            raise exception.ApiError(_("Unknown instance type: %s"),
 | 
			
		||||
                                      name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_all_types(inactive=0):
 | 
			
		||||
    """Retrieves non-deleted instance_types.
 | 
			
		||||
    Pass true as argument if you want deleted instance types returned also."""
 | 
			
		||||
 
 | 
			
		||||
@@ -54,7 +54,7 @@ class InstanceTypeTestCase(test.TestCase):
 | 
			
		||||
        self.assertEqual(1,
 | 
			
		||||
                    instance_types.get_instance_type(self.name)["deleted"])
 | 
			
		||||
        self.assertEqual(starting_inst_list, instance_types.get_all_types())
 | 
			
		||||
        db.instance_type_purge(context.get_admin_context(), self.name)
 | 
			
		||||
        instance_types.purge(self.name)
 | 
			
		||||
        self.assertEqual(len(starting_inst_list),
 | 
			
		||||
                         len(instance_types.get_all_types()),
 | 
			
		||||
                         'instance type not purged')
 | 
			
		||||
 
 | 
			
		||||
@@ -33,12 +33,13 @@ class NovaManageTestCase(test.TestCase):
 | 
			
		||||
                                     order_by("flavorid desc").first()
 | 
			
		||||
        self.flavorid = str(max_flavorid["flavorid"] + 1)
 | 
			
		||||
        self.name = str(int(time.time()))
 | 
			
		||||
        self.fnull = open(os.devnull, 'w')
 | 
			
		||||
 | 
			
		||||
    def teardown(self):
 | 
			
		||||
        fnull.close()
 | 
			
		||||
        self.fnull.close()
 | 
			
		||||
 | 
			
		||||
    def test_create_and_delete_instance_types(self):
 | 
			
		||||
        fnull = open(os.devnull, 'w')
 | 
			
		||||
        myname = self.name + "create_and_delete"
 | 
			
		||||
        retcode = subprocess.call([
 | 
			
		||||
            "bin/nova-manage",
 | 
			
		||||
            "instance_type",
 | 
			
		||||
@@ -51,45 +52,44 @@ class NovaManageTestCase(test.TestCase):
 | 
			
		||||
            "2",
 | 
			
		||||
            "10",
 | 
			
		||||
            "10"],
 | 
			
		||||
            stdout=fnull)
 | 
			
		||||
            stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(0, retcode)
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type",\
 | 
			
		||||
                                    "delete", self.name], stdout=fnull)
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type",
 | 
			
		||||
                                    "delete", self.name], stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(0, retcode)
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type",
 | 
			
		||||
                                    "delete", self.name, "--purge"],
 | 
			
		||||
                                    stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(0, retcode)
 | 
			
		||||
 | 
			
		||||
    def test_list_instance_types_or_flavors(self):
 | 
			
		||||
        fnull = open(os.devnull, 'w')
 | 
			
		||||
        for c in ["instance_type", "flavor"]:
 | 
			
		||||
            retcode = subprocess.call(["bin/nova-manage", c, \
 | 
			
		||||
                                        "list"], stdout=fnull)
 | 
			
		||||
                                        "list"], stdout=self.fnull)
 | 
			
		||||
            self.assertEqual(0, retcode)
 | 
			
		||||
 | 
			
		||||
    def test_list_specific_instance_type(self):
 | 
			
		||||
        fnull = open(os.devnull, 'w')
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type", "list",
 | 
			
		||||
                                    "m1.medium"], stdout=fnull)
 | 
			
		||||
                                    "m1.medium"], stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(0, retcode)
 | 
			
		||||
 | 
			
		||||
    def test_should_error_on_bad_create_args(self):
 | 
			
		||||
        fnull = open(os.devnull, 'w')
 | 
			
		||||
        # shouldn't be able to create instance type with 0 vcpus
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type",\
 | 
			
		||||
                                    "create", self.name, "256", "0",\
 | 
			
		||||
                                    "120", self.flavorid], stdout=fnull)
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type",
 | 
			
		||||
                                    "create", self.name + "bad_args",
 | 
			
		||||
                                    "256", "0", "120", self.flavorid],
 | 
			
		||||
                                    stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(1, retcode)
 | 
			
		||||
 | 
			
		||||
    def test_should_fail_on_duplicate_flavorid(self):
 | 
			
		||||
        fnull = open(os.devnull, 'w')
 | 
			
		||||
        # flavorid 1 is set in migration seed data
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type",\
 | 
			
		||||
                                    "create", self.name, "256", "1",\
 | 
			
		||||
                                    "120", "1"], stdout=fnull)
 | 
			
		||||
        self.assertEqual(1, retcode)
 | 
			
		||||
                                    "create", self.name + "dupflavor", "256",
 | 
			
		||||
                                    "1", "120", "1"], stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(3, retcode)
 | 
			
		||||
 | 
			
		||||
    def test_should_fail_on_duplicate_name(self):
 | 
			
		||||
        # FIXME(ken-pepple) duplicate_name really needs to be unique
 | 
			
		||||
        duplicate_name = "sdfsdfsafsdfsd"
 | 
			
		||||
        fnull = open(os.devnull, 'w')
 | 
			
		||||
        duplicate_name = self.name + "dup_name"
 | 
			
		||||
        retcode = subprocess.call([
 | 
			
		||||
            "bin/nova-manage",
 | 
			
		||||
            "instance_type",
 | 
			
		||||
@@ -102,27 +102,29 @@ class NovaManageTestCase(test.TestCase):
 | 
			
		||||
            "2",
 | 
			
		||||
            "10",
 | 
			
		||||
            "10"],
 | 
			
		||||
            stdout=fnull)
 | 
			
		||||
            stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(0, retcode)
 | 
			
		||||
        duplicate_retcode = subprocess.call([
 | 
			
		||||
            "bin/nova-manage",
 | 
			
		||||
            "instance_type",
 | 
			
		||||
            "create",
 | 
			
		||||
            duplicate_name,
 | 
			
		||||
            "256",
 | 
			
		||||
            "512",
 | 
			
		||||
            "1",
 | 
			
		||||
            "120",
 | 
			
		||||
            self.flavorid,
 | 
			
		||||
            "240",
 | 
			
		||||
            str(int(self.flavorid) + 1),
 | 
			
		||||
            "2",
 | 
			
		||||
            "10",
 | 
			
		||||
            "10"],
 | 
			
		||||
            stdout=fnull)
 | 
			
		||||
            stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(3, duplicate_retcode)
 | 
			
		||||
        delete_retcode = subprocess.call(["bin/nova-manage", "instance_type",\
 | 
			
		||||
                                    "delete", duplicate_name], stdout=fnull)
 | 
			
		||||
        delete_retcode = subprocess.call(["bin/nova-manage", "instance_type",
 | 
			
		||||
                                    "delete", duplicate_name, "--purge"],
 | 
			
		||||
                                    stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(0, delete_retcode)
 | 
			
		||||
 | 
			
		||||
    def test_instance_type_delete_should_fail_without_valid_name(self):
 | 
			
		||||
        fnull = open(os.devnull, 'w')
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type",\
 | 
			
		||||
                                    "delete", "doesntexist"], stdout=fnull)
 | 
			
		||||
        retcode = subprocess.call(["bin/nova-manage", "instance_type",
 | 
			
		||||
                                    "delete", "doesntexist"],
 | 
			
		||||
                                    stdout=self.fnull)
 | 
			
		||||
        self.assertEqual(1, retcode)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user