added purge option and tightened up testing

This commit is contained in:
Ken Pepple
2011-02-18 17:17:47 -08:00
parent 3609f1da7e
commit 53784c1afa
4 changed files with 56 additions and 36 deletions

View File

@@ -683,9 +683,9 @@ class InstanceTypeCommands(object):
vcpus, vcpus,
local_gb, local_gb,
flavorid, flavorid,
swap, swap=0,
rxtx_quota, rxtx_quota=0,
rxtx_cap): rxtx_cap=0):
"""Creates instance types / flavors """Creates instance types / flavors
arguments: name memory vcpus local_gb flavorid swap rxtx_quota arguments: name memory vcpus local_gb flavorid swap rxtx_quota
rxtx_cap rxtx_cap
@@ -719,13 +719,18 @@ class InstanceTypeCommands(object):
try: try:
if purge == "--purge": if purge == "--purge":
instance_types.purge(name) instance_types.purge(name)
verb = "deleted" verb = "purged"
else: else:
instance_types.destroy(name) instance_types.destroy(name)
verb = "purged" verb = "deleted"
except exception.ApiError: except exception.ApiError:
print "Valid instance type name is required" print "Valid instance type name is required"
sys.exit(1) sys.exit(1)
except exception.DBError, e:
print "DB Error: %s" % e
sys.exit(2)
except:
sys.exit(3)
else: else:
print "%s %s" % (name, verb) print "%s %s" % (name, verb)

View File

@@ -81,6 +81,19 @@ def destroy(name):
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): def get_all_types(inactive=0):
"""Retrieves non-deleted instance_types. """Retrieves non-deleted instance_types.
Pass true as argument if you want deleted instance types returned also.""" Pass true as argument if you want deleted instance types returned also."""

View File

@@ -54,7 +54,7 @@ class InstanceTypeTestCase(test.TestCase):
self.assertEqual(1, self.assertEqual(1,
instance_types.get_instance_type(self.name)["deleted"]) instance_types.get_instance_type(self.name)["deleted"])
self.assertEqual(starting_inst_list, instance_types.get_all_types()) 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), self.assertEqual(len(starting_inst_list),
len(instance_types.get_all_types()), len(instance_types.get_all_types()),
'instance type not purged') 'instance type not purged')

View File

@@ -33,12 +33,13 @@ class NovaManageTestCase(test.TestCase):
order_by("flavorid desc").first() order_by("flavorid desc").first()
self.flavorid = str(max_flavorid["flavorid"] + 1) self.flavorid = str(max_flavorid["flavorid"] + 1)
self.name = str(int(time.time())) self.name = str(int(time.time()))
self.fnull = open(os.devnull, 'w')
def teardown(self): def teardown(self):
fnull.close() self.fnull.close()
def test_create_and_delete_instance_types(self): def test_create_and_delete_instance_types(self):
fnull = open(os.devnull, 'w') myname = self.name + "create_and_delete"
retcode = subprocess.call([ retcode = subprocess.call([
"bin/nova-manage", "bin/nova-manage",
"instance_type", "instance_type",
@@ -51,45 +52,44 @@ class NovaManageTestCase(test.TestCase):
"2", "2",
"10", "10",
"10"], "10"],
stdout=fnull) stdout=self.fnull)
self.assertEqual(0, retcode) self.assertEqual(0, retcode)
retcode = subprocess.call(["bin/nova-manage", "instance_type",\ retcode = subprocess.call(["bin/nova-manage", "instance_type",
"delete", self.name], stdout=fnull) "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) self.assertEqual(0, retcode)
def test_list_instance_types_or_flavors(self): def test_list_instance_types_or_flavors(self):
fnull = open(os.devnull, 'w')
for c in ["instance_type", "flavor"]: for c in ["instance_type", "flavor"]:
retcode = subprocess.call(["bin/nova-manage", c, \ retcode = subprocess.call(["bin/nova-manage", c, \
"list"], stdout=fnull) "list"], stdout=self.fnull)
self.assertEqual(0, retcode) self.assertEqual(0, retcode)
def test_list_specific_instance_type(self): def test_list_specific_instance_type(self):
fnull = open(os.devnull, 'w')
retcode = subprocess.call(["bin/nova-manage", "instance_type", "list", retcode = subprocess.call(["bin/nova-manage", "instance_type", "list",
"m1.medium"], stdout=fnull) "m1.medium"], stdout=self.fnull)
self.assertEqual(0, retcode) self.assertEqual(0, retcode)
def test_should_error_on_bad_create_args(self): 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 # shouldn't be able to create instance type with 0 vcpus
retcode = subprocess.call(["bin/nova-manage", "instance_type",\ retcode = subprocess.call(["bin/nova-manage", "instance_type",
"create", self.name, "256", "0",\ "create", self.name + "bad_args",
"120", self.flavorid], stdout=fnull) "256", "0", "120", self.flavorid],
stdout=self.fnull)
self.assertEqual(1, retcode) self.assertEqual(1, retcode)
def test_should_fail_on_duplicate_flavorid(self): def test_should_fail_on_duplicate_flavorid(self):
fnull = open(os.devnull, 'w')
# flavorid 1 is set in migration seed data # flavorid 1 is set in migration seed data
retcode = subprocess.call(["bin/nova-manage", "instance_type",\ retcode = subprocess.call(["bin/nova-manage", "instance_type",\
"create", self.name, "256", "1",\ "create", self.name + "dupflavor", "256",
"120", "1"], stdout=fnull) "1", "120", "1"], stdout=self.fnull)
self.assertEqual(1, retcode) self.assertEqual(3, retcode)
def test_should_fail_on_duplicate_name(self): def test_should_fail_on_duplicate_name(self):
# FIXME(ken-pepple) duplicate_name really needs to be unique duplicate_name = self.name + "dup_name"
duplicate_name = "sdfsdfsafsdfsd"
fnull = open(os.devnull, 'w')
retcode = subprocess.call([ retcode = subprocess.call([
"bin/nova-manage", "bin/nova-manage",
"instance_type", "instance_type",
@@ -102,27 +102,29 @@ class NovaManageTestCase(test.TestCase):
"2", "2",
"10", "10",
"10"], "10"],
stdout=fnull) stdout=self.fnull)
self.assertEqual(0, retcode)
duplicate_retcode = subprocess.call([ duplicate_retcode = subprocess.call([
"bin/nova-manage", "bin/nova-manage",
"instance_type", "instance_type",
"create", "create",
duplicate_name, duplicate_name,
"256", "512",
"1", "1",
"120", "240",
self.flavorid, str(int(self.flavorid) + 1),
"2", "2",
"10", "10",
"10"], "10"],
stdout=fnull) stdout=self.fnull)
self.assertEqual(3, duplicate_retcode) self.assertEqual(3, duplicate_retcode)
delete_retcode = subprocess.call(["bin/nova-manage", "instance_type",\ delete_retcode = subprocess.call(["bin/nova-manage", "instance_type",
"delete", duplicate_name], stdout=fnull) "delete", duplicate_name, "--purge"],
stdout=self.fnull)
self.assertEqual(0, delete_retcode) self.assertEqual(0, delete_retcode)
def test_instance_type_delete_should_fail_without_valid_name(self): def test_instance_type_delete_should_fail_without_valid_name(self):
fnull = open(os.devnull, 'w') retcode = subprocess.call(["bin/nova-manage", "instance_type",
retcode = subprocess.call(["bin/nova-manage", "instance_type",\ "delete", "doesntexist"],
"delete", "doesntexist"], stdout=fnull) stdout=self.fnull)
self.assertEqual(1, retcode) self.assertEqual(1, retcode)