From 5a95b6923a7ca37d292edc0aceb5e4b34a1ccbaf Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Wed, 25 May 2011 15:48:03 -0400 Subject: Initial tests --- nova/tests/test_instance_types_metadata.py | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 nova/tests/test_instance_types_metadata.py (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py new file mode 100644 index 000000000..a22bf2b77 --- /dev/null +++ b/nova/tests/test_instance_types_metadata.py @@ -0,0 +1,62 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 University of Southern California +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +""" +Unit Tests for instance types metadata code +""" + + +from nova import test +from nova.db.sqlalchemy.session import get_session +from nova.db.sqlalchemy import models + + +class InstanceTypeMetadataTestCase(test.TestCase): + + def setUp(self): + super(InstanceTypeMetadataTestCase, self).setUp() + values = dict(memory_mb=22000, + vcpus=8, + local_gb=1690, + flavorid=105) + metadata = dict(cpu_arch="x86_64", + cpu_info=dict(model="Nehalem"), + xpu_arch="fermi", + xpus=2, + xpu_info=dict(model="Tesla 2050", gcores="448"), + net_arch="ethernet", + net_mbps=10000) + + metadata_refs = [] + for k,v in metadata.iteritems(): + metadata_ref = models.InstanceTypeMetadata() + metadata_ref['key'] = k + metadata_ref['value'] = v + metadata_refs.append(metadata_ref) + values['metadata'] = metadata_refs + + instance_type_ref = models.InstanceTypes() + instance_type_ref.update(values) + + session = get_session() + with session.begin(): + instance_type_ref.save(session=session) + # Add cg1.4xlarge + + + def test_foo(self): + # Add a new instance type cg1 + # Add the metadata + # Retrieve the metadata + pass -- cgit From de0122eaae70c92db47f9457b162cc48c5d5f755 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 27 May 2011 13:10:19 -0400 Subject: Adding test code --- nova/tests/test_instance_types_metadata.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py index a22bf2b77..06c11a7cf 100644 --- a/nova/tests/test_instance_types_metadata.py +++ b/nova/tests/test_instance_types_metadata.py @@ -16,7 +16,9 @@ Unit Tests for instance types metadata code """ +import nova.db.api +from nova import context from nova import test from nova.db.sqlalchemy.session import get_session from nova.db.sqlalchemy import models @@ -26,15 +28,16 @@ class InstanceTypeMetadataTestCase(test.TestCase): def setUp(self): super(InstanceTypeMetadataTestCase, self).setUp() - values = dict(memory_mb=22000, + values = dict(name="cg1.4xlarge", + memory_mb=22000, vcpus=8, local_gb=1690, flavorid=105) metadata = dict(cpu_arch="x86_64", - cpu_info=dict(model="Nehalem"), + cpu_model="Nehalem", xpu_arch="fermi", xpus=2, - xpu_info=dict(model="Tesla 2050", gcores="448"), + xpu_model="Tesla 2050", net_arch="ethernet", net_mbps=10000) @@ -44,19 +47,22 @@ class InstanceTypeMetadataTestCase(test.TestCase): metadata_ref['key'] = k metadata_ref['value'] = v metadata_refs.append(metadata_ref) - values['metadata'] = metadata_refs + values['meta'] = metadata_refs instance_type_ref = models.InstanceTypes() instance_type_ref.update(values) + session = get_session() with session.begin(): instance_type_ref.save(session=session) - # Add cg1.4xlarge + self.instance_type_id = instance_type_ref.id + def test_instance_type_metadata_get(self): + self.assertEquals( \ + nova.db.api.instance_type_metadata_get(context.get_admin_context(), + self.instance_type_id), + {'foo' : 'bar'}) - def test_foo(self): - # Add a new instance type cg1 - # Add the metadata - # Retrieve the metadata - pass + + \ No newline at end of file -- cgit From a28590d77474f7a43d704385cc3815f2c879f397 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 27 May 2011 13:29:51 -0400 Subject: Added a unit test --- nova/tests/test_instance_types_metadata.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py index 06c11a7cf..5d8364c3a 100644 --- a/nova/tests/test_instance_types_metadata.py +++ b/nova/tests/test_instance_types_metadata.py @@ -16,9 +16,8 @@ Unit Tests for instance types metadata code """ -import nova.db.api - from nova import context +from nova import db from nova import test from nova.db.sqlalchemy.session import get_session from nova.db.sqlalchemy import models @@ -59,10 +58,17 @@ class InstanceTypeMetadataTestCase(test.TestCase): self.instance_type_id = instance_type_ref.id def test_instance_type_metadata_get(self): - self.assertEquals( \ - nova.db.api.instance_type_metadata_get(context.get_admin_context(), - self.instance_type_id), - {'foo' : 'bar'}) + expected_metadata = dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2", + xpu_model="Tesla 2050", + net_arch="ethernet", + net_mbps="10000") + retrieved_metadata = db.api.instance_type_metadata_get( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(expected_metadata, retrieved_metadata) \ No newline at end of file -- cgit From 842bb180f04d8b1fbacbca77171f11bfe3d68cdd Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 27 May 2011 13:39:37 -0400 Subject: Added delete instance metadata unit test --- nova/tests/test_instance_types_metadata.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py index 5d8364c3a..c83c5bfca 100644 --- a/nova/tests/test_instance_types_metadata.py +++ b/nova/tests/test_instance_types_metadata.py @@ -47,11 +47,8 @@ class InstanceTypeMetadataTestCase(test.TestCase): metadata_ref['value'] = v metadata_refs.append(metadata_ref) values['meta'] = metadata_refs - instance_type_ref = models.InstanceTypes() instance_type_ref.update(values) - - session = get_session() with session.begin(): instance_type_ref.save(session=session) @@ -65,10 +62,22 @@ class InstanceTypeMetadataTestCase(test.TestCase): xpu_model="Tesla 2050", net_arch="ethernet", net_mbps="10000") - retrieved_metadata = db.api.instance_type_metadata_get( + actual_metadata = db.api.instance_type_metadata_get( context.get_admin_context(), self.instance_type_id) - self.assertEquals(expected_metadata, retrieved_metadata) - - - \ No newline at end of file + self.assertEquals(expected_metadata, actual_metadata) + + def test_instance_type_metadata_delete(self): + expected_metadata = dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2", + net_arch="ethernet", + net_mbps="10000") + db.api.instance_type_metadata_delete(context.get_admin_context(), + self.instance_type_id, + "xpu_model") + actual_metadata = db.api.instance_type_metadata_get( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(expected_metadata, actual_metadata) \ No newline at end of file -- cgit From aa18d32cf20c0bfbbc81ddf234ac59ecf310ccb0 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 27 May 2011 13:44:40 -0400 Subject: Added test for instance type metadata update --- nova/tests/test_instance_types_metadata.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py index c83c5bfca..d72a72e0d 100644 --- a/nova/tests/test_instance_types_metadata.py +++ b/nova/tests/test_instance_types_metadata.py @@ -80,4 +80,24 @@ class InstanceTypeMetadataTestCase(test.TestCase): actual_metadata = db.api.instance_type_metadata_get( context.get_admin_context(), self.instance_type_id) - self.assertEquals(expected_metadata, actual_metadata) \ No newline at end of file + self.assertEquals(expected_metadata, actual_metadata) + + def test_instance_type_metadata_update(self): + expected_metadata = dict(cpu_arch="x86_64", + cpu_model="Sandy Bridge", + xpu_arch="fermi", + xpus="2", + xpu_model="Tesla 2050", + net_arch="ethernet", + net_mbps="10000") + db.api.instance_type_metadata_update_or_create( + context.get_admin_context(), + self.instance_type_id, + dict(cpu_model="Sandy Bridge")) + actual_metadata = db.api.instance_type_metadata_get( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(expected_metadata, actual_metadata) + + + \ No newline at end of file -- cgit From bbdb8ed7148d08b790e0adf0d291fc3fbe0ae361 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 27 May 2011 13:54:19 -0400 Subject: Added test for instance type metadata create --- nova/tests/test_instance_types_metadata.py | 40 +++++++++++++++++++----------- 1 file changed, 26 insertions(+), 14 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py index d72a72e0d..085a951a1 100644 --- a/nova/tests/test_instance_types_metadata.py +++ b/nova/tests/test_instance_types_metadata.py @@ -36,10 +36,7 @@ class InstanceTypeMetadataTestCase(test.TestCase): cpu_model="Nehalem", xpu_arch="fermi", xpus=2, - xpu_model="Tesla 2050", - net_arch="ethernet", - net_mbps=10000) - + xpu_model="Tesla 2050") metadata_refs = [] for k,v in metadata.iteritems(): metadata_ref = models.InstanceTypeMetadata() @@ -54,14 +51,18 @@ class InstanceTypeMetadataTestCase(test.TestCase): instance_type_ref.save(session=session) self.instance_type_id = instance_type_ref.id + def tearDown(self): + # Remove the instance from the database + db.api.instance_type_purge(context.get_admin_context(), "cg1.4xlarge") + super(InstanceTypeMetadataTestCase, self).tearDown() + + def test_instance_type_metadata_get(self): expected_metadata = dict(cpu_arch="x86_64", cpu_model="Nehalem", xpu_arch="fermi", xpus="2", - xpu_model="Tesla 2050", - net_arch="ethernet", - net_mbps="10000") + xpu_model="Tesla 2050") actual_metadata = db.api.instance_type_metadata_get( context.get_admin_context(), self.instance_type_id) @@ -71,9 +72,7 @@ class InstanceTypeMetadataTestCase(test.TestCase): expected_metadata = dict(cpu_arch="x86_64", cpu_model="Nehalem", xpu_arch="fermi", - xpus="2", - net_arch="ethernet", - net_mbps="10000") + xpus="2") db.api.instance_type_metadata_delete(context.get_admin_context(), self.instance_type_id, "xpu_model") @@ -87,17 +86,30 @@ class InstanceTypeMetadataTestCase(test.TestCase): cpu_model="Sandy Bridge", xpu_arch="fermi", xpus="2", + xpu_model="Tesla 2050") + db.api.instance_type_metadata_update_or_create( + context.get_admin_context(), + self.instance_type_id, + dict(cpu_model="Sandy Bridge")) + actual_metadata = db.api.instance_type_metadata_get( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(expected_metadata, actual_metadata) + + def test_instance_type_metadata_create(self): + expected_metadata = dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2", xpu_model="Tesla 2050", net_arch="ethernet", net_mbps="10000") db.api.instance_type_metadata_update_or_create( context.get_admin_context(), self.instance_type_id, - dict(cpu_model="Sandy Bridge")) + dict(net_arch="ethernet", + net_mbps=10000)) actual_metadata = db.api.instance_type_metadata_get( context.get_admin_context(), self.instance_type_id) self.assertEquals(expected_metadata, actual_metadata) - - - \ No newline at end of file -- cgit From 19e4a081509217ec04d92ae092917d590cbd8f30 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 27 May 2011 14:20:08 -0400 Subject: Modified instance_type_create to take metadata --- nova/tests/test_instance_types_metadata.py | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py index 085a951a1..5263b1cba 100644 --- a/nova/tests/test_instance_types_metadata.py +++ b/nova/tests/test_instance_types_metadata.py @@ -27,6 +27,7 @@ class InstanceTypeMetadataTestCase(test.TestCase): def setUp(self): super(InstanceTypeMetadataTestCase, self).setUp() + self.context = context.get_admin_context() values = dict(name="cg1.4xlarge", memory_mb=22000, vcpus=8, @@ -36,27 +37,17 @@ class InstanceTypeMetadataTestCase(test.TestCase): cpu_model="Nehalem", xpu_arch="fermi", xpus=2, - xpu_model="Tesla 2050") - metadata_refs = [] - for k,v in metadata.iteritems(): - metadata_ref = models.InstanceTypeMetadata() - metadata_ref['key'] = k - metadata_ref['value'] = v - metadata_refs.append(metadata_ref) - values['meta'] = metadata_refs - instance_type_ref = models.InstanceTypes() - instance_type_ref.update(values) - session = get_session() - with session.begin(): - instance_type_ref.save(session=session) - self.instance_type_id = instance_type_ref.id + xpu_model="Tesla 2050") + values['meta'] = metadata + ref = db.api.instance_type_create(self.context, + values) + self.instance_type_id = ref.id def tearDown(self): - # Remove the instance from the database + # Remove the instance type from the database db.api.instance_type_purge(context.get_admin_context(), "cg1.4xlarge") super(InstanceTypeMetadataTestCase, self).tearDown() - def test_instance_type_metadata_get(self): expected_metadata = dict(cpu_arch="x86_64", cpu_model="Nehalem", -- cgit From 69a49743d733459e532a47e6b588045fe65a6145 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 27 May 2011 14:29:23 -0400 Subject: Fixing pep8 problems --- nova/tests/test_instance_types_metadata.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py index 5263b1cba..1c4185888 100644 --- a/nova/tests/test_instance_types_metadata.py +++ b/nova/tests/test_instance_types_metadata.py @@ -24,7 +24,7 @@ from nova.db.sqlalchemy import models class InstanceTypeMetadataTestCase(test.TestCase): - + def setUp(self): super(InstanceTypeMetadataTestCase, self).setUp() self.context = context.get_admin_context() @@ -42,12 +42,12 @@ class InstanceTypeMetadataTestCase(test.TestCase): ref = db.api.instance_type_create(self.context, values) self.instance_type_id = ref.id - + def tearDown(self): # Remove the instance type from the database db.api.instance_type_purge(context.get_admin_context(), "cg1.4xlarge") super(InstanceTypeMetadataTestCase, self).tearDown() - + def test_instance_type_metadata_get(self): expected_metadata = dict(cpu_arch="x86_64", cpu_model="Nehalem", @@ -58,20 +58,20 @@ class InstanceTypeMetadataTestCase(test.TestCase): context.get_admin_context(), self.instance_type_id) self.assertEquals(expected_metadata, actual_metadata) - + def test_instance_type_metadata_delete(self): expected_metadata = dict(cpu_arch="x86_64", cpu_model="Nehalem", xpu_arch="fermi", xpus="2") - db.api.instance_type_metadata_delete(context.get_admin_context(), + db.api.instance_type_metadata_delete(context.get_admin_context(), self.instance_type_id, "xpu_model") actual_metadata = db.api.instance_type_metadata_get( context.get_admin_context(), self.instance_type_id) self.assertEquals(expected_metadata, actual_metadata) - + def test_instance_type_metadata_update(self): expected_metadata = dict(cpu_arch="x86_64", cpu_model="Sandy Bridge", @@ -86,13 +86,13 @@ class InstanceTypeMetadataTestCase(test.TestCase): context.get_admin_context(), self.instance_type_id) self.assertEquals(expected_metadata, actual_metadata) - + def test_instance_type_metadata_create(self): expected_metadata = dict(cpu_arch="x86_64", cpu_model="Nehalem", xpu_arch="fermi", xpus="2", - xpu_model="Tesla 2050", + xpu_model="Tesla 2050", net_arch="ethernet", net_mbps="10000") db.api.instance_type_metadata_update_or_create( -- cgit From d68f6de8d8275ec6dd9f231b9b52971f2ad15263 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Thu, 16 Jun 2011 16:33:29 -0400 Subject: Rename: intance_type_metadata -> instance_type_extra_specs --- nova/tests/test_instance_types_extra_specs.py | 106 ++++++++++++++++++++++++++ nova/tests/test_instance_types_metadata.py | 106 -------------------------- 2 files changed, 106 insertions(+), 106 deletions(-) create mode 100644 nova/tests/test_instance_types_extra_specs.py delete mode 100644 nova/tests/test_instance_types_metadata.py (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_extra_specs.py b/nova/tests/test_instance_types_extra_specs.py new file mode 100644 index 000000000..e739225fc --- /dev/null +++ b/nova/tests/test_instance_types_extra_specs.py @@ -0,0 +1,106 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 University of Southern California +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +""" +Unit Tests for instance types extra specs code +""" + +from nova import context +from nova import db +from nova import test +from nova.db.sqlalchemy.session import get_session +from nova.db.sqlalchemy import models + + +class InstanceTypeExtraSpecsTestCase(test.TestCase): + + def setUp(self): + super(InstanceTypeExtraSpecsTestCase, self).setUp() + self.context = context.get_admin_context() + values = dict(name="cg1.4xlarge", + memory_mb=22000, + vcpus=8, + local_gb=1690, + flavorid=105) + specs = dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus=2, + xpu_model="Tesla 2050") + values['extra_specs'] = specs + ref = db.api.instance_type_create(self.context, + values) + self.instance_type_id = ref.id + + def tearDown(self): + # Remove the instance type from the database + db.api.instance_type_purge(context.get_admin_context(), "cg1.4xlarge") + super(InstanceTypeExtraSpecsTestCase, self).tearDown() + + def test_instance_type_specs_get(self): + expected_specs = dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2", + xpu_model="Tesla 2050") + actual_specs = db.api.instance_type_extra_specs_get( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(expected_specs, actual_specs) + + def test_instance_type_extra_specs_delete(self): + expected_specs = dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2") + db.api.instance_type_extra_specs_delete(context.get_admin_context(), + self.instance_type_id, + "xpu_model") + actual_specs = db.api.instance_type_extra_specs_get( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(expected_specs, actual_specs) + + def test_instance_type_extra_specs_update(self): + expected_specs = dict(cpu_arch="x86_64", + cpu_model="Sandy Bridge", + xpu_arch="fermi", + xpus="2", + xpu_model="Tesla 2050") + db.api.instance_type_extra_specs_update_or_create( + context.get_admin_context(), + self.instance_type_id, + dict(cpu_model="Sandy Bridge")) + actual_specs = db.api.instance_type_extra_specs_get( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(expected_specs, actual_specs) + + def test_instance_type_extra_specs_create(self): + expected_specs = dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2", + xpu_model="Tesla 2050", + net_arch="ethernet", + net_mbps="10000") + db.api.instance_type_extra_specs_update_or_create( + context.get_admin_context(), + self.instance_type_id, + dict(net_arch="ethernet", + net_mbps=10000)) + actual_specs = db.api.instance_type_extra_specs_get( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(expected_specs, actual_specs) diff --git a/nova/tests/test_instance_types_metadata.py b/nova/tests/test_instance_types_metadata.py deleted file mode 100644 index 1c4185888..000000000 --- a/nova/tests/test_instance_types_metadata.py +++ /dev/null @@ -1,106 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -# Copyright 2011 University of Southern California -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -""" -Unit Tests for instance types metadata code -""" - -from nova import context -from nova import db -from nova import test -from nova.db.sqlalchemy.session import get_session -from nova.db.sqlalchemy import models - - -class InstanceTypeMetadataTestCase(test.TestCase): - - def setUp(self): - super(InstanceTypeMetadataTestCase, self).setUp() - self.context = context.get_admin_context() - values = dict(name="cg1.4xlarge", - memory_mb=22000, - vcpus=8, - local_gb=1690, - flavorid=105) - metadata = dict(cpu_arch="x86_64", - cpu_model="Nehalem", - xpu_arch="fermi", - xpus=2, - xpu_model="Tesla 2050") - values['meta'] = metadata - ref = db.api.instance_type_create(self.context, - values) - self.instance_type_id = ref.id - - def tearDown(self): - # Remove the instance type from the database - db.api.instance_type_purge(context.get_admin_context(), "cg1.4xlarge") - super(InstanceTypeMetadataTestCase, self).tearDown() - - def test_instance_type_metadata_get(self): - expected_metadata = dict(cpu_arch="x86_64", - cpu_model="Nehalem", - xpu_arch="fermi", - xpus="2", - xpu_model="Tesla 2050") - actual_metadata = db.api.instance_type_metadata_get( - context.get_admin_context(), - self.instance_type_id) - self.assertEquals(expected_metadata, actual_metadata) - - def test_instance_type_metadata_delete(self): - expected_metadata = dict(cpu_arch="x86_64", - cpu_model="Nehalem", - xpu_arch="fermi", - xpus="2") - db.api.instance_type_metadata_delete(context.get_admin_context(), - self.instance_type_id, - "xpu_model") - actual_metadata = db.api.instance_type_metadata_get( - context.get_admin_context(), - self.instance_type_id) - self.assertEquals(expected_metadata, actual_metadata) - - def test_instance_type_metadata_update(self): - expected_metadata = dict(cpu_arch="x86_64", - cpu_model="Sandy Bridge", - xpu_arch="fermi", - xpus="2", - xpu_model="Tesla 2050") - db.api.instance_type_metadata_update_or_create( - context.get_admin_context(), - self.instance_type_id, - dict(cpu_model="Sandy Bridge")) - actual_metadata = db.api.instance_type_metadata_get( - context.get_admin_context(), - self.instance_type_id) - self.assertEquals(expected_metadata, actual_metadata) - - def test_instance_type_metadata_create(self): - expected_metadata = dict(cpu_arch="x86_64", - cpu_model="Nehalem", - xpu_arch="fermi", - xpus="2", - xpu_model="Tesla 2050", - net_arch="ethernet", - net_mbps="10000") - db.api.instance_type_metadata_update_or_create( - context.get_admin_context(), - self.instance_type_id, - dict(net_arch="ethernet", - net_mbps=10000)) - actual_metadata = db.api.instance_type_metadata_get( - context.get_admin_context(), - self.instance_type_id) - self.assertEquals(expected_metadata, actual_metadata) -- cgit From 843644aed6477b4411ec3f07d1a5271df41c9798 Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Sat, 18 Jun 2011 23:10:41 -0400 Subject: General cleanup and refactor of a lot of the API/WSGI service code. --- nova/tests/integrated/integrated_helpers.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/integrated/integrated_helpers.py b/nova/tests/integrated/integrated_helpers.py index 522c7cb0e..ba6bef62f 100644 --- a/nova/tests/integrated/integrated_helpers.py +++ b/nova/tests/integrated/integrated_helpers.py @@ -171,15 +171,14 @@ class _IntegratedTestBase(test.TestCase): self.api = self.user.openstack_api def _start_api_service(self): - api_service = service.ApiService.create() - api_service.start() + #ec2 = service.WSGIService("ec2") + #ec2.start() - if not api_service: - raise Exception("API Service was None") + osapi = service.WSGIService("osapi") + osapi.start() - self.api_service = api_service - - host, port = api_service.get_socket_info('osapi') + host = osapi.server.host + port = osapi.server.port self.auth_url = 'http://%s:%s/v1.1' % (host, port) def tearDown(self): -- cgit From ea64f883b74fa3c702a3c47d4508a1e7a7f6b40d Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Sun, 19 Jun 2011 14:09:09 -0400 Subject: Removed debugging, made objectstore tests pass again. --- nova/tests/test_objectstore.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_objectstore.py b/nova/tests/test_objectstore.py index c78772f27..c35955c9c 100644 --- a/nova/tests/test_objectstore.py +++ b/nova/tests/test_objectstore.py @@ -70,11 +70,12 @@ class S3APITestCase(test.TestCase): os.mkdir(FLAGS.buckets_path) router = s3server.S3Application(FLAGS.buckets_path) - server = wsgi.Server() - server.start(router, FLAGS.s3_port, host=FLAGS.s3_host) + self.server = wsgi.Server("s3api", router, FLAGS.s3_host, FLAGS.s3_port) + self.server.start() if not boto.config.has_section('Boto'): boto.config.add_section('Boto') + boto.config.set('Boto', 'num_retries', '0') conn = s3.S3Connection(aws_access_key_id=self.admin_user.access, aws_secret_access_key=self.admin_user.secret, @@ -145,4 +146,5 @@ class S3APITestCase(test.TestCase): """Tear down auth and test server.""" self.auth_manager.delete_user('admin') self.auth_manager.delete_project('admin') + self.server.stop() super(S3APITestCase, self).tearDown() -- cgit From 79402ffbaeae18bb4adaa899743a688ef0bcb24b Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Sun, 19 Jun 2011 18:00:38 -0400 Subject: Cleanup of the cleanup. --- nova/tests/integrated/integrated_helpers.py | 3 --- 1 file changed, 3 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/integrated/integrated_helpers.py b/nova/tests/integrated/integrated_helpers.py index ba6bef62f..8809bf5f8 100644 --- a/nova/tests/integrated/integrated_helpers.py +++ b/nova/tests/integrated/integrated_helpers.py @@ -171,9 +171,6 @@ class _IntegratedTestBase(test.TestCase): self.api = self.user.openstack_api def _start_api_service(self): - #ec2 = service.WSGIService("ec2") - #ec2.start() - osapi = service.WSGIService("osapi") osapi.start() -- cgit From c1b70cc20a17e99fedb0f0a93139424fb89dd9e9 Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Sun, 19 Jun 2011 20:26:47 -0400 Subject: Cleanup. --- nova/tests/integrated/integrated_helpers.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/integrated/integrated_helpers.py b/nova/tests/integrated/integrated_helpers.py index 8809bf5f8..26de86e74 100644 --- a/nova/tests/integrated/integrated_helpers.py +++ b/nova/tests/integrated/integrated_helpers.py @@ -173,10 +173,9 @@ class _IntegratedTestBase(test.TestCase): def _start_api_service(self): osapi = service.WSGIService("osapi") osapi.start() + self.auth_url = 'http://%s:%s/v1.1' % (osapi.host, osapi.port) + LOG.warn(self.auth_url) - host = osapi.server.host - port = osapi.server.port - self.auth_url = 'http://%s:%s/v1.1' % (host, port) def tearDown(self): self.context.cleanup() -- cgit From 93d6a1c727ffa5ac2972a26fc8a1e38edc84684a Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Sun, 19 Jun 2011 21:29:43 -0400 Subject: No, really. Added tests for WSGI loader. --- nova/tests/test_wsgi.py | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 nova/tests/test_wsgi.py (limited to 'nova/tests') diff --git a/nova/tests/test_wsgi.py b/nova/tests/test_wsgi.py new file mode 100644 index 000000000..245b51d81 --- /dev/null +++ b/nova/tests/test_wsgi.py @@ -0,0 +1,79 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 United States Government as represented by the +# Administrator of the National Aeronautics and Space Administration. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Unit tests for `nova.wsgi`.""" + +import os.path +import tempfile + +import unittest2 as unittest + +import nova.exception +import nova.test +import nova.wsgi + + +class TestNothingExists(unittest.TestCase): + """Loader tests where os.path.exists always returns False.""" + + def setUp(self): + self._os_path_exists = os.path.exists + os.path.exists = lambda _: False + + def test_config_not_found(self): + self.assertRaises( + nova.exception.PasteConfigNotFound, + nova.wsgi.Loader, + ) + + def tearDown(self): + os.path.exists = self._os_path_exists + + +class TestNormalFilesystem(unittest.TestCase): + """Loader tests where os.path.exists always returns True.""" + + _paste_config = """ +[app:test_app] +use = egg:Paste#static +document_root = /tmp + """ + + def setUp(self): + self.config = tempfile.NamedTemporaryFile(mode="w+t") + self.config.write(self._paste_config.lstrip()) + self.config.seek(0) + self.config.flush() + self.loader = nova.wsgi.Loader(self.config.name) + + def test_config_found(self): + self.assertEquals(self.config.name, self.loader.config_path) + + def test_app_not_found(self): + self.assertRaises( + nova.exception.PasteAppNotFound, + self.loader.load_app, + "non-existant app", + ) + + def test_app_found(self): + url_parser = self.loader.load_app("test_app") + self.assertEquals("/tmp", url_parser.directory) + + def tearDown(self): + self.config.close() -- cgit From dd870291a32d18d0f62592a73a03b9038ae5c3da Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Mon, 20 Jun 2011 10:12:43 -0400 Subject: Cleanup and addition of tests for WSGI server. --- nova/tests/test_wsgi.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_wsgi.py b/nova/tests/test_wsgi.py index 245b51d81..c19bd3ef6 100644 --- a/nova/tests/test_wsgi.py +++ b/nova/tests/test_wsgi.py @@ -28,7 +28,7 @@ import nova.test import nova.wsgi -class TestNothingExists(unittest.TestCase): +class TestLoaderNothingExists(unittest.TestCase): """Loader tests where os.path.exists always returns False.""" def setUp(self): @@ -45,8 +45,8 @@ class TestNothingExists(unittest.TestCase): os.path.exists = self._os_path_exists -class TestNormalFilesystem(unittest.TestCase): - """Loader tests where os.path.exists always returns True.""" +class TestLoaderNormalFilesystem(unittest.TestCase): + """Loader tests with normal filesystem (unmodified os.path module).""" _paste_config = """ [app:test_app] @@ -77,3 +77,18 @@ document_root = /tmp def tearDown(self): self.config.close() + + +class TestWSGIServer(unittest.TestCase): + """WSGI server tests.""" + + def test_no_app(self): + server = nova.wsgi.Server("test_app", None) + self.assertEquals("test_app", server.name) + + def test_start_random_port(self): + server = nova.wsgi.Server("test_random", None) + server.start("127.0.0.1", 0) + self.assertNotEqual(0, server.port) + server.stop() + server.wait() -- cgit From 91050cc49e61b46f55722d8fe7e342c2f8ac926b Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Mon, 20 Jun 2011 10:39:17 -0400 Subject: Fix objectstore test. --- nova/tests/test_objectstore.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_objectstore.py b/nova/tests/test_objectstore.py index c35955c9c..be197a219 100644 --- a/nova/tests/test_objectstore.py +++ b/nova/tests/test_objectstore.py @@ -70,8 +70,8 @@ class S3APITestCase(test.TestCase): os.mkdir(FLAGS.buckets_path) router = s3server.S3Application(FLAGS.buckets_path) - self.server = wsgi.Server("s3api", router, FLAGS.s3_host, FLAGS.s3_port) - self.server.start() + self.server = wsgi.Server("s3api", router) + self.server.start(FLAGS.s3_host, FLAGS.s3_port) if not boto.config.has_section('Boto'): boto.config.add_section('Boto') -- cgit From c178b3ce44d89b662c5925b7b65aab9c2540cf37 Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Mon, 20 Jun 2011 14:54:53 -0400 Subject: pep8 fixes --- nova/tests/integrated/integrated_helpers.py | 1 - nova/tests/test_wsgi.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/integrated/integrated_helpers.py b/nova/tests/integrated/integrated_helpers.py index 26de86e74..47bd8c1e4 100644 --- a/nova/tests/integrated/integrated_helpers.py +++ b/nova/tests/integrated/integrated_helpers.py @@ -176,7 +176,6 @@ class _IntegratedTestBase(test.TestCase): self.auth_url = 'http://%s:%s/v1.1' % (osapi.host, osapi.port) LOG.warn(self.auth_url) - def tearDown(self): self.context.cleanup() super(_IntegratedTestBase, self).tearDown() diff --git a/nova/tests/test_wsgi.py b/nova/tests/test_wsgi.py index c19bd3ef6..be18baa95 100644 --- a/nova/tests/test_wsgi.py +++ b/nova/tests/test_wsgi.py @@ -62,7 +62,7 @@ document_root = /tmp self.loader = nova.wsgi.Loader(self.config.name) def test_config_found(self): - self.assertEquals(self.config.name, self.loader.config_path) + self.assertEquals(self.config.name, self.loader.config_path) def test_app_not_found(self): self.assertRaises( -- cgit From c17c73b3d0f07046c677711853e1b93768526e47 Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Tue, 21 Jun 2011 00:21:33 -0400 Subject: Tests for WSGI/Launcher --- nova/tests/test_service.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'nova/tests') diff --git a/nova/tests/test_service.py b/nova/tests/test_service.py index d1cc8bd61..70ef80147 100644 --- a/nova/tests/test_service.py +++ b/nova/tests/test_service.py @@ -21,6 +21,7 @@ Unit Tests for remote procedure calls using queue """ import mox +import unittest2 as unittest from nova import context from nova import db @@ -30,6 +31,7 @@ from nova import rpc from nova import test from nova import service from nova import manager +from nova import wsgi from nova.compute import manager as compute_manager FLAGS = flags.FLAGS @@ -349,3 +351,31 @@ class ServiceTestCase(test.TestCase): serv.stop() db.service_destroy(ctxt, service_ref['id']) + + +class TestWSGIService(test.TestCase): + + def setUp(self): + super(TestWSGIService, self).setUp() + self.stubs.Set(wsgi.Loader, "load_app", mox.MockAnything()) + + def test_service_random_port(self): + test_service = service.WSGIService("test_service") + self.assertEquals(0, test_service.port) + test_service.start() + self.assertNotEqual(0, test_service.port) + test_service.stop() + +class TestLauncher(test.TestCase): + + def setUp(self): + super(TestLauncher, self).setUp() + self.stubs.Set(wsgi.Loader, "load_app", mox.MockAnything()) + self.service = service.WSGIService("test_service") + + def test_launch_app(self): + self.assertEquals(0, self.service.port) + launcher = service.Launcher() + launcher.launch_service(self.service) + self.assertEquals(0, self.service.port) + launcher.stop() -- cgit From afff25800521e7085ddff7e910195ef5a1f98732 Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Tue, 21 Jun 2011 09:57:40 -0400 Subject: pep8 fix --- nova/tests/test_service.py | 1 + 1 file changed, 1 insertion(+) (limited to 'nova/tests') diff --git a/nova/tests/test_service.py b/nova/tests/test_service.py index 70ef80147..350dc62ee 100644 --- a/nova/tests/test_service.py +++ b/nova/tests/test_service.py @@ -366,6 +366,7 @@ class TestWSGIService(test.TestCase): self.assertNotEqual(0, test_service.port) test_service.stop() + class TestLauncher(test.TestCase): def setUp(self): -- cgit From 742c21e4e79ce5a26975b31486ded3956a846c55 Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Tue, 21 Jun 2011 11:25:44 -0400 Subject: Very small alterations, switched from using start() to pass host/port, to just defining them up front in init. Doesn't make sense to set them in start because we can't start more than once any way. Also, unbroke binaries. --- nova/tests/test_objectstore.py | 4 ++-- nova/tests/test_wsgi.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_objectstore.py b/nova/tests/test_objectstore.py index be197a219..7e69565f3 100644 --- a/nova/tests/test_objectstore.py +++ b/nova/tests/test_objectstore.py @@ -70,8 +70,8 @@ class S3APITestCase(test.TestCase): os.mkdir(FLAGS.buckets_path) router = s3server.S3Application(FLAGS.buckets_path) - self.server = wsgi.Server("s3api", router) - self.server.start(FLAGS.s3_host, FLAGS.s3_port) + self.server = wsgi.Server() + self.server.start(router, host=FLAGS.s3_host, port=FLAGS.s3_port) if not boto.config.has_section('Boto'): boto.config.add_section('Boto') diff --git a/nova/tests/test_wsgi.py b/nova/tests/test_wsgi.py index be18baa95..010fb819e 100644 --- a/nova/tests/test_wsgi.py +++ b/nova/tests/test_wsgi.py @@ -87,8 +87,9 @@ class TestWSGIServer(unittest.TestCase): self.assertEquals("test_app", server.name) def test_start_random_port(self): - server = nova.wsgi.Server("test_random", None) - server.start("127.0.0.1", 0) + server = nova.wsgi.Server("test_random_port", None, host="127.0.0.1") + self.assertEqual(0, server.port) + server.start() self.assertNotEqual(0, server.port) server.stop() server.wait() -- cgit From 7c846ea890f3c7143fd5e158931fc415e53a9bf0 Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Tue, 21 Jun 2011 11:50:28 -0400 Subject: Fixed objectstore test. --- nova/tests/test_objectstore.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_objectstore.py b/nova/tests/test_objectstore.py index 7e69565f3..39b4e18d7 100644 --- a/nova/tests/test_objectstore.py +++ b/nova/tests/test_objectstore.py @@ -70,8 +70,11 @@ class S3APITestCase(test.TestCase): os.mkdir(FLAGS.buckets_path) router = s3server.S3Application(FLAGS.buckets_path) - self.server = wsgi.Server() - self.server.start(router, host=FLAGS.s3_host, port=FLAGS.s3_port) + self.server = wsgi.Server("S3 Objectstore", + router, + host=FLAGS.s3_host, + port=FLAGS.s3_port) + self.server.start() if not boto.config.has_section('Boto'): boto.config.add_section('Boto') -- cgit From b4defb29694f3f9397ed5335a003e5592668fbaa Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Wed, 22 Jun 2011 22:22:56 -0400 Subject: Initial unit test (failing) --- .../api/openstack/test_flavors_extra_specs.py | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 nova/tests/api/openstack/test_flavors_extra_specs.py (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py new file mode 100644 index 000000000..1588ebf5a --- /dev/null +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -0,0 +1,70 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 University of Southern California +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import json +import stubout +import unittest +import webob + +from nova import flags +from nova.api import openstack +from nova.tests.api.openstack import fakes +import nova.wsgi + + +def return_flavor_extra_specs(context, flavor_id): + return stub_flavor_extra_specs() + + +def stub_flavor_extra_specs(): + specs = { + "key1": "value1", + "key2": "value2", + "key3": "value3", + "key4": "value4", + "key5": "value5"} + return specs + + +class FlavorsExtraSpecsTest(unittest.TestCase): + + def setUp(self): + super(FlavorsExtraSpecsTest, self).setUp() + self.stubs = stubout.StubOutForTesting() + fakes.FakeAuthManager.auth_data = {} + fakes.FakeAuthDatabase.data = {} + fakes.stub_out_auth(self.stubs) + fakes.stub_out_key_pair_funcs(self.stubs) + + def tearDown(self): + self.stubs.UnsetAll() + super(FlavorsExtraSpecsTest, self).tearDown() + + + def test_index(self): + self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', + return_flavor_extra_specs) + req = webob.Request.blank('/v1.1/flavors/1/extra') + req.environ['api.version'] = '1.1' + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(200, res.status_int) + res_dict = json.loads(res.body) + self.assertEqual('application/json', res.headers['Content-Type']) + self.assertEqual('value1', res_dict['metadata']['key1']) + + + \ No newline at end of file -- cgit From 173bb3c54b7ce9874f6bf880a5df8966fd508c38 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Wed, 22 Jun 2011 22:43:44 -0400 Subject: Bug fixing --- nova/tests/api/openstack/test_flavors_extra_specs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py index 1588ebf5a..ac42d50a6 100644 --- a/nova/tests/api/openstack/test_flavors_extra_specs.py +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -64,7 +64,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual(200, res.status_int) res_dict = json.loads(res.body) self.assertEqual('application/json', res.headers['Content-Type']) - self.assertEqual('value1', res_dict['metadata']['key1']) + self.assertEqual('value1', res_dict['extra']['key1']) \ No newline at end of file -- cgit From cbff29973a3cbbd2997675f117bf62a589ef06a9 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Wed, 22 Jun 2011 22:52:42 -0400 Subject: Now stubbing nova.db instead of nova.db.api --- nova/tests/api/openstack/test_flavors_extra_specs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py index ac42d50a6..e8df4ca39 100644 --- a/nova/tests/api/openstack/test_flavors_extra_specs.py +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -56,7 +56,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_index(self): - self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', + self.stubs.Set(nova.db, 'instance_type_extra_specs_get', return_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra') req.environ['api.version'] = '1.1' -- cgit From a480b926a824766d3367eefed8d6757ad2919e7f Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Wed, 22 Jun 2011 23:01:41 -0400 Subject: Two tests passing --- .../api/openstack/test_flavors_extra_specs.py | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py index e8df4ca39..c09d6b285 100644 --- a/nova/tests/api/openstack/test_flavors_extra_specs.py +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -26,10 +26,30 @@ from nova.tests.api.openstack import fakes import nova.wsgi +def return_create_flavor_extra_specs_max(context, flavor_id, extra_specs): + return stub_max_flavor_extra_specs() + + +def return_create_flavor_extra_specs(context, flavor_id, extra_specs): + return stub_flavor_extra_specs() + + +def return_flavor_extra_specs(context, flavor_id): + return stub_flavor_extra_specs() + + def return_flavor_extra_specs(context, flavor_id): return stub_flavor_extra_specs() +def return_empty_flavor_extra_specs(context, flavor_id): + return {} + + +def delete_flavor_extra_specs(context, flavor_id, key): + pass + + def stub_flavor_extra_specs(): specs = { "key1": "value1", @@ -38,6 +58,12 @@ def stub_flavor_extra_specs(): "key4": "value4", "key5": "value5"} return specs + +def stub_max_flavor_extra_specs(): + extra_specs = {"extra": {}} + for num in range(FLAGS.quota_extra_specs_items): + extra_specs['extra']['key%i' % num] = "blah" + return extra_specs class FlavorsExtraSpecsTest(unittest.TestCase): @@ -66,5 +92,140 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual('application/json', res.headers['Content-Type']) self.assertEqual('value1', res_dict['extra']['key1']) + def test_index_no_data(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_get', + return_empty_flavor_extra_specs) + req = webob.Request.blank('/v1.1/flavors/1/extra') + req.environ['api.version'] = '1.1' + res = req.get_response(fakes.wsgi_app()) + res_dict = json.loads(res.body) + self.assertEqual(200, res.status_int) + self.assertEqual('application/json', res.headers['Content-Type']) + self.assertEqual(0, len(res_dict['extra'])) + + def test_show(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_get', + return_flavor_metadata) + req = webob.Request.blank('/v1.1/flavors/1/extra/key5') + req.environ['api.version'] = '1.1' + res = req.get_response(fakes.wsgi_app()) + res_dict = json.loads(res.body) + self.assertEqual(200, res.status_int) + self.assertEqual('application/json', res.headers['Content-Type']) + self.assertEqual('value5', res_dict['key5']) + + def test_show_meta_not_found(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_get', + return_empty_flavor_metadata) + req = webob.Request.blank('/v1.1/flavors/1/extra/key6') + req.environ['api.version'] = '1.1' + res = req.get_response(fakes.wsgi_app()) + res_dict = json.loads(res.body) + self.assertEqual(404, res.status_int) + + def test_delete(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_delete', + delete_flavor_metadata) + req = webob.Request.blank('/v1.1/flavors/1/extra/key5') + req.environ['api.version'] = '1.1' + req.method = 'DELETE' + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(200, res.status_int) + + def test_create(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', + return_create_instance_type_extra_specs) + req = webob.Request.blank('/v1.1/flavors/1/extra') + req.environ['api.version'] = '1.1' + req.method = 'POST' + req.body = '{"metadata": {"key1": "value1"}}' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + res_dict = json.loads(res.body) + self.assertEqual(200, res.status_int) + self.assertEqual('application/json', res.headers['Content-Type']) + self.assertEqual('value1', res_dict['extra']['key1']) + + def test_create_empty_body(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', + return_create_instance_type_extra_specs) + req = webob.Request.blank('/v1.1/flavors/1/extra') + req.environ['api.version'] = '1.1' + req.method = 'POST' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) + + def test_update_item(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', + return_create_instance_type_extra_specs) + req = webob.Request.blank('/v1.1/flavors/1/extra/key1') + req.environ['api.version'] = '1.1' + req.method = 'PUT' + req.body = '{"key1": "value1"}' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(200, res.status_int) + self.assertEqual('application/json', res.headers['Content-Type']) + res_dict = json.loads(res.body) + self.assertEqual('value1', res_dict['key1']) + + def test_update_item_empty_body(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', + return_create_instance_type_extra_specs) + req = webob.Request.blank('/v1.1/flavors/1/extra/key1') + req.environ['api.version'] = '1.1' + req.method = 'PUT' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) + + def test_update_item_too_many_keys(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', + return_create_instance_type_extra_specs) + req = webob.Request.blank('/v1.1/flavors/1/extra/key1') + req.environ['api.version'] = '1.1' + req.method = 'PUT' + req.body = '{"key1": "value1", "key2": "value2"}' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) + + def test_update_item_body_uri_mismatch(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', + return_create_instance_type_extra_specs) + req = webob.Request.blank('/v1.1/flavors/1/extra/bad') + req.environ['api.version'] = '1.1' + req.method = 'PUT' + req.body = '{"key1": "value1"}' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) + + def test_too_many_metadata_items_on_create(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', + return_create_instance_type_extra_specs) + data = {"metadata": {}} + for num in range(FLAGS.quota_metadata_items + 1): + data['metadata']['key%i' % num] = "blah" + json_string = str(data).replace("\'", "\"") + req = webob.Request.blank('/v1.1/flavors/1/extra') + req.environ['api.version'] = '1.1' + req.method = 'POST' + req.body = json_string + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) + + def test_to_many_metadata_items_on_update_item(self): + self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', + return_create_instance_type_extra_specs_max) + req = webob.Request.blank('/v1.1/flavors/1/extra/key1') + req.environ['api.version'] = '1.1' + req.method = 'PUT' + req.body = '{"a new key": "a new value"}' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) \ No newline at end of file -- cgit From 6afcabac7442aa2e3944a3fef3d3452c189c1901 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Wed, 22 Jun 2011 23:14:39 -0400 Subject: Now passing unit tests --- .../api/openstack/test_flavors_extra_specs.py | 93 +++++++--------------- 1 file changed, 30 insertions(+), 63 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py index c09d6b285..14f6e7d43 100644 --- a/nova/tests/api/openstack/test_flavors_extra_specs.py +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -26,10 +26,6 @@ from nova.tests.api.openstack import fakes import nova.wsgi -def return_create_flavor_extra_specs_max(context, flavor_id, extra_specs): - return stub_max_flavor_extra_specs() - - def return_create_flavor_extra_specs(context, flavor_id, extra_specs): return stub_flavor_extra_specs() @@ -58,16 +54,10 @@ def stub_flavor_extra_specs(): "key4": "value4", "key5": "value5"} return specs - -def stub_max_flavor_extra_specs(): - extra_specs = {"extra": {}} - for num in range(FLAGS.quota_extra_specs_items): - extra_specs['extra']['key%i' % num] = "blah" - return extra_specs class FlavorsExtraSpecsTest(unittest.TestCase): - + def setUp(self): super(FlavorsExtraSpecsTest, self).setUp() self.stubs = stubout.StubOutForTesting() @@ -80,9 +70,8 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.stubs.UnsetAll() super(FlavorsExtraSpecsTest, self).tearDown() - def test_index(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_get', + self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra') req.environ['api.version'] = '1.1' @@ -91,9 +80,9 @@ class FlavorsExtraSpecsTest(unittest.TestCase): res_dict = json.loads(res.body) self.assertEqual('application/json', res.headers['Content-Type']) self.assertEqual('value1', res_dict['extra']['key1']) - + def test_index_no_data(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_get', + self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_empty_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra') req.environ['api.version'] = '1.1' @@ -104,8 +93,8 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual(0, len(res_dict['extra'])) def test_show(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_get', - return_flavor_metadata) + self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', + return_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra/key5') req.environ['api.version'] = '1.1' res = req.get_response(fakes.wsgi_app()) @@ -114,9 +103,9 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual('application/json', res.headers['Content-Type']) self.assertEqual('value5', res_dict['key5']) - def test_show_meta_not_found(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_get', - return_empty_flavor_metadata) + def test_show_spec_not_found(self): + self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', + return_empty_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra/key6') req.environ['api.version'] = '1.1' res = req.get_response(fakes.wsgi_app()) @@ -124,8 +113,8 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual(404, res.status_int) def test_delete(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_delete', - delete_flavor_metadata) + self.stubs.Set(nova.db.api, 'instance_type_extra_specs_delete', + delete_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra/key5') req.environ['api.version'] = '1.1' req.method = 'DELETE' @@ -133,12 +122,13 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual(200, res.status_int) def test_create(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', - return_create_instance_type_extra_specs) + self.stubs.Set(nova.db.api, + 'instance_type_extra_specs_update_or_create', + return_create_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra') req.environ['api.version'] = '1.1' req.method = 'POST' - req.body = '{"metadata": {"key1": "value1"}}' + req.body = '{"extra": {"key1": "value1"}}' req.headers["content-type"] = "application/json" res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) @@ -147,8 +137,9 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual('value1', res_dict['extra']['key1']) def test_create_empty_body(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', - return_create_instance_type_extra_specs) + self.stubs.Set(nova.db.api, + 'instance_type_extra_specs_update_or_create', + return_create_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra') req.environ['api.version'] = '1.1' req.method = 'POST' @@ -157,8 +148,9 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual(400, res.status_int) def test_update_item(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', - return_create_instance_type_extra_specs) + self.stubs.Set(nova.db.api, + 'instance_type_extra_specs_update_or_create', + return_create_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra/key1') req.environ['api.version'] = '1.1' req.method = 'PUT' @@ -171,8 +163,9 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual('value1', res_dict['key1']) def test_update_item_empty_body(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', - return_create_instance_type_extra_specs) + self.stubs.Set(nova.db.api, + 'instance_type_extra_specs_update_or_create', + return_create_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra/key1') req.environ['api.version'] = '1.1' req.method = 'PUT' @@ -181,8 +174,9 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual(400, res.status_int) def test_update_item_too_many_keys(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', - return_create_instance_type_extra_specs) + self.stubs.Set(nova.db.api, + 'instance_type_extra_specs_update_or_create', + return_create_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra/key1') req.environ['api.version'] = '1.1' req.method = 'PUT' @@ -192,8 +186,9 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.assertEqual(400, res.status_int) def test_update_item_body_uri_mismatch(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', - return_create_instance_type_extra_specs) + self.stubs.Set(nova.db.api, + 'instance_type_extra_specs_update_or_create', + return_create_flavor_extra_specs) req = webob.Request.blank('/v1.1/flavors/1/extra/bad') req.environ['api.version'] = '1.1' req.method = 'PUT' @@ -201,31 +196,3 @@ class FlavorsExtraSpecsTest(unittest.TestCase): req.headers["content-type"] = "application/json" res = req.get_response(fakes.wsgi_app()) self.assertEqual(400, res.status_int) - - def test_too_many_metadata_items_on_create(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', - return_create_instance_type_extra_specs) - data = {"metadata": {}} - for num in range(FLAGS.quota_metadata_items + 1): - data['metadata']['key%i' % num] = "blah" - json_string = str(data).replace("\'", "\"") - req = webob.Request.blank('/v1.1/flavors/1/extra') - req.environ['api.version'] = '1.1' - req.method = 'POST' - req.body = json_string - req.headers["content-type"] = "application/json" - res = req.get_response(fakes.wsgi_app()) - self.assertEqual(400, res.status_int) - - def test_to_many_metadata_items_on_update_item(self): - self.stubs.Set(nova.db, 'instance_type_extra_specs_update_or_create', - return_create_instance_type_extra_specs_max) - req = webob.Request.blank('/v1.1/flavors/1/extra/key1') - req.environ['api.version'] = '1.1' - req.method = 'PUT' - req.body = '{"a new key": "a new value"}' - req.headers["content-type"] = "application/json" - res = req.get_response(fakes.wsgi_app()) - self.assertEqual(400, res.status_int) - - \ No newline at end of file -- cgit From 7f578a0f657c076bf97c33dca15f1c78bd11b607 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Thu, 23 Jun 2011 22:55:51 -0400 Subject: Now automatically populates the instance_type dict with extra_specs upon being retrieved from the database. --- nova/tests/test_instance_types_extra_specs.py | 59 +++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'nova/tests') diff --git a/nova/tests/test_instance_types_extra_specs.py b/nova/tests/test_instance_types_extra_specs.py index e739225fc..c26cf82ff 100644 --- a/nova/tests/test_instance_types_extra_specs.py +++ b/nova/tests/test_instance_types_extra_specs.py @@ -104,3 +104,62 @@ class InstanceTypeExtraSpecsTestCase(test.TestCase): context.get_admin_context(), self.instance_type_id) self.assertEquals(expected_specs, actual_specs) + + def test_instance_type_get_by_id_with_extra_specs(self): + instance_type = db.api.instance_type_get_by_id( + context.get_admin_context(), + self.instance_type_id) + self.assertEquals(instance_type['extra_specs'], + dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2", + xpu_model="Tesla 2050")) + instance_type = db.api.instance_type_get_by_id( + context.get_admin_context(), + 5) + self.assertEquals(instance_type['extra_specs'], {}) + + def test_instance_type_get_by_name_with_extra_specs(self): + instance_type = db.api.instance_type_get_by_name( + context.get_admin_context(), + "cg1.4xlarge") + self.assertEquals(instance_type['extra_specs'], + dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2", + xpu_model="Tesla 2050")) + + instance_type = db.api.instance_type_get_by_name( + context.get_admin_context(), + "m1.small") + self.assertEquals(instance_type['extra_specs'], {}) + + def test_instance_type_get_by_id_with_extra_specs(self): + instance_type = db.api.instance_type_get_by_flavor_id( + context.get_admin_context(), + 105) + self.assertEquals(instance_type['extra_specs'], + dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus="2", + xpu_model="Tesla 2050")) + + instance_type = db.api.instance_type_get_by_flavor_id( + context.get_admin_context(), + 2) + self.assertEquals(instance_type['extra_specs'], {}) + + def test_instance_type_get_all(self): + specs = dict(cpu_arch="x86_64", + cpu_model="Nehalem", + xpu_arch="fermi", + xpus='2', + xpu_model="Tesla 2050") + + types = db.api.instance_type_get_all(context.get_admin_context()) + + self.assertEquals(types['cg1.4xlarge']['extra_specs'], specs) + self.assertEquals(types['m1.small']['extra_specs'], {}) -- cgit From 188dd9117318cc4f5ebe0be9d19b9737a43ce68b Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Thu, 23 Jun 2011 23:42:44 -0400 Subject: Starting to transition instance type extra specs API to an extension API --- nova/tests/api/openstack/test_flavors_extra_specs.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py index 14f6e7d43..1fe0884b6 100644 --- a/nova/tests/api/openstack/test_flavors_extra_specs.py +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -19,12 +19,16 @@ import json import stubout import unittest import webob +import os.path + from nova import flags from nova.api import openstack +from nova.api.openstack import extensions from nova.tests.api.openstack import fakes import nova.wsgi +FLAGS = flags.FLAGS def return_create_flavor_extra_specs(context, flavor_id, extra_specs): return stub_flavor_extra_specs() @@ -60,6 +64,8 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def setUp(self): super(FlavorsExtraSpecsTest, self).setUp() + FLAGS.osapi_extensions_path = os.path.join(os.path.dirname(__file__), + "extensions") self.stubs = stubout.StubOutForTesting() fakes.FakeAuthManager.auth_data = {} fakes.FakeAuthDatabase.data = {} @@ -73,13 +79,19 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_index(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra') - req.environ['api.version'] = '1.1' - res = req.get_response(fakes.wsgi_app()) + app = openstack.APIRouterV11() + ext_midware = extensions.ExtensionMiddleware(app) + #request = webob.Request.blank('/flavors-extra-specs/1') + request = webob.Request.blank('/flavors-extra-specs') + res = request.get_response(ext_midware) + print res + #req.environ['api.version'] = '1.1' + #res = req.get_response(fakes.wsgi_app()) self.assertEqual(200, res.status_int) res_dict = json.loads(res.body) self.assertEqual('application/json', res.headers['Content-Type']) - self.assertEqual('value1', res_dict['extra']['key1']) + print res_dict + self.assertEqual('value1', res_dict['1']['key1']) def test_index_no_data(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', -- cgit From 7a9dc4adc343aa9cf8c21cef741b3bfe409fc41e Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 24 Jun 2011 00:45:53 -0400 Subject: Committing some broken code in advance of trying a different strategy for specifying args to extensions.ResoruceExtensions, using parent --- .../api/openstack/test_flavors_extra_specs.py | 33 ++++++++++------------ 1 file changed, 15 insertions(+), 18 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py index 1fe0884b6..caa07ee73 100644 --- a/nova/tests/api/openstack/test_flavors_extra_specs.py +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -24,6 +24,7 @@ import os.path from nova import flags from nova.api import openstack +from nova.api.openstack import auth from nova.api.openstack import extensions from nova.tests.api.openstack import fakes import nova.wsgi @@ -61,6 +62,7 @@ def stub_flavor_extra_specs(): class FlavorsExtraSpecsTest(unittest.TestCase): + def setUp(self): super(FlavorsExtraSpecsTest, self).setUp() @@ -71,6 +73,9 @@ class FlavorsExtraSpecsTest(unittest.TestCase): fakes.FakeAuthDatabase.data = {} fakes.stub_out_auth(self.stubs) fakes.stub_out_key_pair_funcs(self.stubs) + self.mware = auth.AuthMiddleware( + extensions.ExtensionMiddleware( + openstack.APIRouterV11())) def tearDown(self): self.stubs.UnsetAll() @@ -79,39 +84,31 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_index(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_flavor_extra_specs) - app = openstack.APIRouterV11() - ext_midware = extensions.ExtensionMiddleware(app) - #request = webob.Request.blank('/flavors-extra-specs/1') - request = webob.Request.blank('/flavors-extra-specs') - res = request.get_response(ext_midware) - print res - #req.environ['api.version'] = '1.1' - #res = req.get_response(fakes.wsgi_app()) + request = webob.Request.blank('/flavor_extra_specs/1') + res = request.get_response(self.mware) self.assertEqual(200, res.status_int) res_dict = json.loads(res.body) self.assertEqual('application/json', res.headers['Content-Type']) - print res_dict - self.assertEqual('value1', res_dict['1']['key1']) + self.assertEqual('value1', res_dict['extra_specs']['key1']) def test_index_no_data(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_empty_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra') - req.environ['api.version'] = '1.1' - res = req.get_response(fakes.wsgi_app()) + req = webob.Request.blank('/flavor_extra_specs/1') + res = req.get_response(self.mware) res_dict = json.loads(res.body) self.assertEqual(200, res.status_int) self.assertEqual('application/json', res.headers['Content-Type']) - self.assertEqual(0, len(res_dict['extra'])) + self.assertEqual(0, len(res_dict['extra_specs'])) def test_show(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra/key5') - req.environ['api.version'] = '1.1' - res = req.get_response(fakes.wsgi_app()) - res_dict = json.loads(res.body) + req = webob.Request.blank('/flavor_extra_specs/1/extra/key5') + res = req.get_response(self.mware) + print res self.assertEqual(200, res.status_int) + res_dict = json.loads(res.body) self.assertEqual('application/json', res.headers['Content-Type']) self.assertEqual('value5', res_dict['key5']) -- cgit From 4a0fcd6c1d5540c4bec29ef2585987300654c8b7 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 24 Jun 2011 01:01:30 -0400 Subject: All tests passing --- .../api/openstack/test_flavors_extra_specs.py | 53 +++++++++------------- 1 file changed, 22 insertions(+), 31 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py index caa07ee73..0fe7ec19f 100644 --- a/nova/tests/api/openstack/test_flavors_extra_specs.py +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -31,6 +31,7 @@ import nova.wsgi FLAGS = flags.FLAGS + def return_create_flavor_extra_specs(context, flavor_id, extra_specs): return stub_flavor_extra_specs() @@ -62,7 +63,6 @@ def stub_flavor_extra_specs(): class FlavorsExtraSpecsTest(unittest.TestCase): - def setUp(self): super(FlavorsExtraSpecsTest, self).setUp() @@ -84,7 +84,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_index(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_flavor_extra_specs) - request = webob.Request.blank('/flavor_extra_specs/1') + request = webob.Request.blank('/flavors/1/flavor_extra_specs') res = request.get_response(self.mware) self.assertEqual(200, res.status_int) res_dict = json.loads(res.body) @@ -94,7 +94,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_index_no_data(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_empty_flavor_extra_specs) - req = webob.Request.blank('/flavor_extra_specs/1') + req = webob.Request.blank('/flavors/1/flavor_extra_specs') res = req.get_response(self.mware) res_dict = json.loads(res.body) self.assertEqual(200, res.status_int) @@ -104,9 +104,8 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_show(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_flavor_extra_specs) - req = webob.Request.blank('/flavor_extra_specs/1/extra/key5') + req = webob.Request.blank('/flavors/1/flavor_extra_specs/key5') res = req.get_response(self.mware) - print res self.assertEqual(200, res.status_int) res_dict = json.loads(res.body) self.assertEqual('application/json', res.headers['Content-Type']) @@ -115,57 +114,52 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_show_spec_not_found(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_empty_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra/key6') - req.environ['api.version'] = '1.1' - res = req.get_response(fakes.wsgi_app()) + req = webob.Request.blank('/flavors/1/flavor_extra_specs/key6') + res = req.get_response(self.mware) res_dict = json.loads(res.body) self.assertEqual(404, res.status_int) def test_delete(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_delete', delete_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra/key5') - req.environ['api.version'] = '1.1' + req = webob.Request.blank('/flavors/1/flavor_extra_specs/key5') req.method = 'DELETE' - res = req.get_response(fakes.wsgi_app()) + res = req.get_response(self.mware) self.assertEqual(200, res.status_int) def test_create(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra') - req.environ['api.version'] = '1.1' + req = webob.Request.blank('/flavors/1/flavor_extra_specs') req.method = 'POST' - req.body = '{"extra": {"key1": "value1"}}' + req.body = '{"extra_specs": {"key1": "value1"}}' req.headers["content-type"] = "application/json" - res = req.get_response(fakes.wsgi_app()) + res = req.get_response(self.mware) res_dict = json.loads(res.body) self.assertEqual(200, res.status_int) self.assertEqual('application/json', res.headers['Content-Type']) - self.assertEqual('value1', res_dict['extra']['key1']) + self.assertEqual('value1', res_dict['extra_specs']['key1']) def test_create_empty_body(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra') - req.environ['api.version'] = '1.1' + req = webob.Request.blank('/flavors/1/flavor_extra_specs') req.method = 'POST' req.headers["content-type"] = "application/json" - res = req.get_response(fakes.wsgi_app()) + res = req.get_response(self.mware) self.assertEqual(400, res.status_int) def test_update_item(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra/key1') - req.environ['api.version'] = '1.1' + req = webob.Request.blank('/flavors/1/flavor_extra_specs/key1') req.method = 'PUT' req.body = '{"key1": "value1"}' req.headers["content-type"] = "application/json" - res = req.get_response(fakes.wsgi_app()) + res = req.get_response(self.mware) self.assertEqual(200, res.status_int) self.assertEqual('application/json', res.headers['Content-Type']) res_dict = json.loads(res.body) @@ -175,33 +169,30 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra/key1') - req.environ['api.version'] = '1.1' + req = webob.Request.blank('/flavors/1/flavor_extra_specs/key1') req.method = 'PUT' req.headers["content-type"] = "application/json" - res = req.get_response(fakes.wsgi_app()) + res = req.get_response(self.mware) self.assertEqual(400, res.status_int) def test_update_item_too_many_keys(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra/key1') - req.environ['api.version'] = '1.1' + req = webob.Request.blank('/flavors/1/flavor_extra_specs/key1') req.method = 'PUT' req.body = '{"key1": "value1", "key2": "value2"}' req.headers["content-type"] = "application/json" - res = req.get_response(fakes.wsgi_app()) + res = req.get_response(self.mware) self.assertEqual(400, res.status_int) def test_update_item_body_uri_mismatch(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/v1.1/flavors/1/extra/bad') - req.environ['api.version'] = '1.1' + req = webob.Request.blank('/flavors/1/flavor_extra_specs/bad') req.method = 'PUT' req.body = '{"key1": "value1"}' req.headers["content-type"] = "application/json" - res = req.get_response(fakes.wsgi_app()) + res = req.get_response(self.mware) self.assertEqual(400, res.status_int) -- cgit From 52319f7e4e55e78f4fdd9c76b3ab593322edc875 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 24 Jun 2011 01:02:28 -0400 Subject: Renamed from flavor_extra_specs to extra_specs --- .../api/openstack/test_flavors_extra_specs.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py index 0fe7ec19f..686e9cf55 100644 --- a/nova/tests/api/openstack/test_flavors_extra_specs.py +++ b/nova/tests/api/openstack/test_flavors_extra_specs.py @@ -84,7 +84,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_index(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_flavor_extra_specs) - request = webob.Request.blank('/flavors/1/flavor_extra_specs') + request = webob.Request.blank('/flavors/1/extra_specs') res = request.get_response(self.mware) self.assertEqual(200, res.status_int) res_dict = json.loads(res.body) @@ -94,7 +94,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_index_no_data(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_empty_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs') + req = webob.Request.blank('/flavors/1/extra_specs') res = req.get_response(self.mware) res_dict = json.loads(res.body) self.assertEqual(200, res.status_int) @@ -104,7 +104,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_show(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs/key5') + req = webob.Request.blank('/flavors/1/extra_specs/key5') res = req.get_response(self.mware) self.assertEqual(200, res.status_int) res_dict = json.loads(res.body) @@ -114,7 +114,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_show_spec_not_found(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get', return_empty_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs/key6') + req = webob.Request.blank('/flavors/1/extra_specs/key6') res = req.get_response(self.mware) res_dict = json.loads(res.body) self.assertEqual(404, res.status_int) @@ -122,7 +122,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): def test_delete(self): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_delete', delete_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs/key5') + req = webob.Request.blank('/flavors/1/extra_specs/key5') req.method = 'DELETE' res = req.get_response(self.mware) self.assertEqual(200, res.status_int) @@ -131,7 +131,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs') + req = webob.Request.blank('/flavors/1/extra_specs') req.method = 'POST' req.body = '{"extra_specs": {"key1": "value1"}}' req.headers["content-type"] = "application/json" @@ -145,7 +145,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs') + req = webob.Request.blank('/flavors/1/extra_specs') req.method = 'POST' req.headers["content-type"] = "application/json" res = req.get_response(self.mware) @@ -155,7 +155,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs/key1') + req = webob.Request.blank('/flavors/1/extra_specs/key1') req.method = 'PUT' req.body = '{"key1": "value1"}' req.headers["content-type"] = "application/json" @@ -169,7 +169,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs/key1') + req = webob.Request.blank('/flavors/1/extra_specs/key1') req.method = 'PUT' req.headers["content-type"] = "application/json" res = req.get_response(self.mware) @@ -179,7 +179,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs/key1') + req = webob.Request.blank('/flavors/1/extra_specs/key1') req.method = 'PUT' req.body = '{"key1": "value1", "key2": "value2"}' req.headers["content-type"] = "application/json" @@ -190,7 +190,7 @@ class FlavorsExtraSpecsTest(unittest.TestCase): self.stubs.Set(nova.db.api, 'instance_type_extra_specs_update_or_create', return_create_flavor_extra_specs) - req = webob.Request.blank('/flavors/1/flavor_extra_specs/bad') + req = webob.Request.blank('/flavors/1/extra_specs/bad') req.method = 'PUT' req.body = '{"key1": "value1"}' req.headers["content-type"] = "application/json" -- cgit From 48f3bccc3372023c35a75671e25e9089dd4ed836 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 24 Jun 2011 01:34:47 -0400 Subject: pep8 fixes --- nova/tests/scheduler/test_host_filter.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'nova/tests') diff --git a/nova/tests/scheduler/test_host_filter.py b/nova/tests/scheduler/test_host_filter.py index 10eafde08..75a2cb21c 100644 --- a/nova/tests/scheduler/test_host_filter.py +++ b/nova/tests/scheduler/test_host_filter.py @@ -67,13 +67,24 @@ class HostFilterTestCase(test.TestCase): flavorid=1, swap=500, rxtx_quota=30000, - rxtx_cap=200) + rxtx_cap=200, + extra_specs={}) + self.gpu_instance_type = dict(name='tiny.gpu', + memory_mb=50, + vcpus=10, + local_gb=500, + flavorid=2, + swap=500, + rxtx_quota=30000, + rxtx_cap=200, + extra_specs={'gpu': 'nvidia'}) self.zone_manager = FakeZoneManager() states = {} for x in xrange(10): states['host%02d' % (x + 1)] = {'compute': self._host_caps(x)} self.zone_manager.service_states = states + self.zone_manager.service_states['host07']['compute']['gpu'] = 'nvidia' def tearDown(self): FLAGS.default_host_filter = self.old_flag @@ -116,6 +127,17 @@ class HostFilterTestCase(test.TestCase): self.assertEquals('host05', just_hosts[0]) self.assertEquals('host10', just_hosts[5]) + def test_instance_type_filter_extra_specs(self): + hf = host_filter.InstanceTypeFilter() + # filter all hosts that can support 50 ram and 500 disk + name, cooked = hf.instance_type_to_filter(self.gpu_instance_type) + self.assertEquals('nova.scheduler.host_filter.InstanceTypeFilter', + name) + hosts = hf.filter_hosts(self.zone_manager, cooked) + self.assertEquals(1, len(hosts)) + just_hosts = [host for host, caps in hosts] + self.assertEquals('host07', just_hosts[0]) + def test_json_filter(self): hf = host_filter.JsonFilter() # filter all hosts that can support 50 ram and 500 disk -- cgit From e6dcd9b4008feb9a053edcd7c6f6020772a03c59 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 24 Jun 2011 01:44:22 -0400 Subject: Dealing with cases where extra_specs wasn't defined --- nova/tests/test_host_filter.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'nova/tests') diff --git a/nova/tests/test_host_filter.py b/nova/tests/test_host_filter.py index 3361c7b73..438f3e522 100644 --- a/nova/tests/test_host_filter.py +++ b/nova/tests/test_host_filter.py @@ -67,7 +67,8 @@ class HostFilterTestCase(test.TestCase): flavorid=1, swap=500, rxtx_quota=30000, - rxtx_cap=200) + rxtx_cap=200, + extra_specs={}) self.zone_manager = FakeZoneManager() states = {} -- cgit From 58cc475649276a8722113960bf3f4d21d6513ca2 Mon Sep 17 00:00:00 2001 From: Yuriy Taraday Date: Fri, 24 Jun 2011 15:55:06 +0400 Subject: Add reconnect test. --- nova/tests/test_auth.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'nova/tests') diff --git a/nova/tests/test_auth.py b/nova/tests/test_auth.py index 7d00bddfe..4aebbe940 100644 --- a/nova/tests/test_auth.py +++ b/nova/tests/test_auth.py @@ -25,6 +25,7 @@ from nova import log as logging from nova import test from nova.auth import manager from nova.api.ec2 import cloud +from nova.auth import fakeldap FLAGS = flags.FLAGS LOG = logging.getLogger('nova.tests.auth_unittest') @@ -369,6 +370,14 @@ class _AuthManagerBaseTestCase(test.TestCase): class AuthManagerLdapTestCase(_AuthManagerBaseTestCase): auth_driver = 'nova.auth.ldapdriver.FakeLdapDriver' + def test_reconnect_on_server_failure(self): + self.manager.get_users() + fakeldap.server_fail = True + with self.assertRaises(fakeldap.SERVER_DOWN): + self.manager.get_users() + fakeldap.server_fail = False + self.manager.get_users() + class AuthManagerDbTestCase(_AuthManagerBaseTestCase): auth_driver = 'nova.auth.dbdriver.DbDriver' -- cgit From 101fcf7488f4f2b42102da0533c5d97c8f53dd49 Mon Sep 17 00:00:00 2001 From: Lorin Hochstein Date: Fri, 24 Jun 2011 10:52:59 -0400 Subject: Edited the host filter test case for extra specs --- nova/tests/scheduler/test_host_filter.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/scheduler/test_host_filter.py b/nova/tests/scheduler/test_host_filter.py index 75a2cb21c..b1892dab4 100644 --- a/nova/tests/scheduler/test_host_filter.py +++ b/nova/tests/scheduler/test_host_filter.py @@ -77,14 +77,26 @@ class HostFilterTestCase(test.TestCase): swap=500, rxtx_quota=30000, rxtx_cap=200, - extra_specs={'gpu': 'nvidia'}) + extra_specs={'xpu_arch': 'fermi', + 'xpu_info': 'Tesla 2050'}) self.zone_manager = FakeZoneManager() states = {} for x in xrange(10): states['host%02d' % (x + 1)] = {'compute': self._host_caps(x)} self.zone_manager.service_states = states - self.zone_manager.service_states['host07']['compute']['gpu'] = 'nvidia' + + # Add some extra capabilities to some hosts + host07 = self.zone_manager.service_states['host07']['compute'] + host07['xpu_arch'] = 'fermi' + host07['xpu_info'] = 'Tesla 2050' + + host08 = self.zone_manager.service_states['host08']['compute'] + host08['xpu_arch'] = 'radeon' + + host09 = self.zone_manager.service_states['host09']['compute'] + host09['xpu_arch'] = 'fermi' + host09['xpu_info'] = 'Tesla 2150' def tearDown(self): FLAGS.default_host_filter = self.old_flag -- cgit From 4b8bcf30f934ea91290b7fe41536ba06ee832b3f Mon Sep 17 00:00:00 2001 From: Monsyne Dragon Date: Tue, 28 Jun 2011 08:57:05 +0000 Subject: Re-merging code for generating system-usages to get around bzr merge braindeadness. --- nova/tests/test_compute.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'nova/tests') diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index 55e7ae0c4..30a65a4b1 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -38,6 +38,7 @@ from nova.compute import manager as compute_manager from nova.compute import power_state from nova.db.sqlalchemy import models from nova.image import local +from nova.notifier import test_notifier LOG = logging.getLogger('nova.tests.compute') FLAGS = flags.FLAGS @@ -63,6 +64,7 @@ class ComputeTestCase(test.TestCase): super(ComputeTestCase, self).setUp() self.flags(connection_type='fake', stub_network=True, + notification_driver='nova.notifier.test_notifier', network_manager='nova.network.manager.FlatManager') self.compute = utils.import_object(FLAGS.compute_manager) self.compute_api = compute.API() @@ -70,6 +72,7 @@ class ComputeTestCase(test.TestCase): self.user = self.manager.create_user('fake', 'fake', 'fake') self.project = self.manager.create_project('fake', 'fake', 'fake') self.context = context.RequestContext('fake', 'fake', False) + test_notifier.NOTIFICATIONS = [] def fake_show(meh, context, id): return {'id': 1, 'properties': {'kernel_id': 1, 'ramdisk_id': 1}} @@ -305,6 +308,50 @@ class ComputeTestCase(test.TestCase): self.assert_(console) self.compute.terminate_instance(self.context, instance_id) + def test_run_instance_usage_notification(self): + """Ensure run instance generates apropriate usage notification""" + instance_id = self._create_instance() + self.compute.run_instance(self.context, instance_id) + self.assertEquals(len(test_notifier.NOTIFICATIONS), 1) + msg = test_notifier.NOTIFICATIONS[0] + self.assertEquals(msg['priority'], 'INFO') + self.assertEquals(msg['event_type'], 'compute.instance.create') + payload = msg['payload'] + self.assertEquals(payload['tenant_id'], self.project.id) + self.assertEquals(payload['user_id'], self.user.id) + self.assertEquals(payload['instance_id'], instance_id) + self.assertEquals(payload['instance_type'], 'm1.tiny') + type_id = instance_types.get_instance_type_by_name('m1.tiny')['id'] + self.assertEquals(str(payload['instance_type_id']), str(type_id)) + self.assertTrue('display_name' in payload) + self.assertTrue('created_at' in payload) + self.assertTrue('launched_at' in payload) + self.assertEquals(payload['image_id'], '1') + self.compute.terminate_instance(self.context, instance_id) + + def test_terminate_usage_notification(self): + """Ensure terminate_instance generates apropriate usage notification""" + instance_id = self._create_instance() + self.compute.run_instance(self.context, instance_id) + test_notifier.NOTIFICATIONS = [] + self.compute.terminate_instance(self.context, instance_id) + + self.assertEquals(len(test_notifier.NOTIFICATIONS), 1) + msg = test_notifier.NOTIFICATIONS[0] + self.assertEquals(msg['priority'], 'INFO') + self.assertEquals(msg['event_type'], 'compute.instance.delete') + payload = msg['payload'] + self.assertEquals(payload['tenant_id'], self.project.id) + self.assertEquals(payload['user_id'], self.user.id) + self.assertEquals(payload['instance_id'], instance_id) + self.assertEquals(payload['instance_type'], 'm1.tiny') + type_id = instance_types.get_instance_type_by_name('m1.tiny')['id'] + self.assertEquals(str(payload['instance_type_id']), str(type_id)) + self.assertTrue('display_name' in payload) + self.assertTrue('created_at' in payload) + self.assertTrue('launched_at' in payload) + self.assertEquals(payload['image_id'], '1') + def test_run_instance_existing(self): """Ensure failure when running an instance that already exists""" instance_id = self._create_instance() @@ -334,6 +381,36 @@ class ComputeTestCase(test.TestCase): self.compute.terminate_instance(self.context, instance_id) + def test_resize_instance_notification(self): + """Ensure instance can be migrated/resized""" + instance_id = self._create_instance() + context = self.context.elevated() + + self.compute.run_instance(self.context, instance_id) + test_notifier.NOTIFICATIONS = [] + + db.instance_update(self.context, instance_id, {'host': 'foo'}) + self.compute.prep_resize(context, instance_id, 1) + migration_ref = db.migration_get_by_instance_and_status(context, + instance_id, 'pre-migrating') + + self.assertEquals(len(test_notifier.NOTIFICATIONS), 1) + msg = test_notifier.NOTIFICATIONS[0] + self.assertEquals(msg['priority'], 'INFO') + self.assertEquals(msg['event_type'], 'compute.instance.resize.prep') + payload = msg['payload'] + self.assertEquals(payload['tenant_id'], self.project.id) + self.assertEquals(payload['user_id'], self.user.id) + self.assertEquals(payload['instance_id'], instance_id) + self.assertEquals(payload['instance_type'], 'm1.tiny') + type_id = instance_types.get_instance_type_by_name('m1.tiny')['id'] + self.assertEquals(str(payload['instance_type_id']), str(type_id)) + self.assertTrue('display_name' in payload) + self.assertTrue('created_at' in payload) + self.assertTrue('launched_at' in payload) + self.assertEquals(payload['image_id'], '1') + self.compute.terminate_instance(context, instance_id) + def test_resize_instance(self): """Ensure instance can be migrated/resized""" instance_id = self._create_instance() -- cgit From f6390090ff48258078113b2e6d9dd5fbf49bea3a Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Tue, 28 Jun 2011 10:39:04 -0400 Subject: I accidently the whole unittest2 --- nova/tests/test_service.py | 1 - nova/tests/test_wsgi.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_service.py b/nova/tests/test_service.py index 350dc62ee..f45f76b73 100644 --- a/nova/tests/test_service.py +++ b/nova/tests/test_service.py @@ -21,7 +21,6 @@ Unit Tests for remote procedure calls using queue """ import mox -import unittest2 as unittest from nova import context from nova import db diff --git a/nova/tests/test_wsgi.py b/nova/tests/test_wsgi.py index 010fb819e..b71e8d418 100644 --- a/nova/tests/test_wsgi.py +++ b/nova/tests/test_wsgi.py @@ -21,7 +21,7 @@ import os.path import tempfile -import unittest2 as unittest +import unittest import nova.exception import nova.test -- cgit From 18ef175d766794c8a1a9b3e8c5d6b4f18232696c Mon Sep 17 00:00:00 2001 From: Yuriy Taraday Date: Tue, 28 Jun 2011 18:52:22 +0400 Subject: Prevent test case from ruining other tests. Make it work in earlier python versions. --- nova/tests/test_auth.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_auth.py b/nova/tests/test_auth.py index 4aebbe940..71e0d17c9 100644 --- a/nova/tests/test_auth.py +++ b/nova/tests/test_auth.py @@ -373,9 +373,10 @@ class AuthManagerLdapTestCase(_AuthManagerBaseTestCase): def test_reconnect_on_server_failure(self): self.manager.get_users() fakeldap.server_fail = True - with self.assertRaises(fakeldap.SERVER_DOWN): - self.manager.get_users() - fakeldap.server_fail = False + try: + self.assertRaises(fakeldap.SERVER_DOWN, self.manager.get_users) + finally: + fakeldap.server_fail = False self.manager.get_users() -- cgit From 24835b0348a9a6d8bd4e40107990d1abb41538c2 Mon Sep 17 00:00:00 2001 From: Monsyne Dragon Date: Tue, 28 Jun 2011 16:08:27 +0000 Subject: Fix merge issue in compute unittest. --- nova/tests/test_compute.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index e94a62679..4d42b1fdf 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -348,7 +348,7 @@ class ComputeTestCase(test.TestCase): self.assertTrue('display_name' in payload) self.assertTrue('created_at' in payload) self.assertTrue('launched_at' in payload) - self.assertEquals(payload['image_id'], '1') + self.assertEquals(payload['image_ref'], '1') self.compute.terminate_instance(self.context, instance_id) def test_terminate_usage_notification(self): @@ -372,7 +372,7 @@ class ComputeTestCase(test.TestCase): self.assertTrue('display_name' in payload) self.assertTrue('created_at' in payload) self.assertTrue('launched_at' in payload) - self.assertEquals(payload['image_id'], '1') + self.assertEquals(payload['image_ref'], '1') def test_run_instance_existing(self): """Ensure failure when running an instance that already exists""" @@ -452,7 +452,7 @@ class ComputeTestCase(test.TestCase): self.assertTrue('display_name' in payload) self.assertTrue('created_at' in payload) self.assertTrue('launched_at' in payload) - self.assertEquals(payload['image_id'], '1') + self.assertEquals(payload['image_ref'], '1') self.compute.terminate_instance(context, instance_id) def test_resize_instance(self): -- cgit