From d3bdddee682bd7039d6febee332817be099e4f86 Mon Sep 17 00:00:00 2001 From: Chris Alfonso Date: Thu, 10 May 2012 15:31:31 -0400 Subject: [PATCH] Allowed the database call to return no parsed template. The database impl was raising an exception if no parsed template exists. The logic that was looking up the parsed template expects None to be returned if the template isn't stored. * I also fixed some pep8 errors. --- heat/db/sqlalchemy/api.py | 4 ---- heat/metadata/api/v1/__init__.py | 3 ++- heat/metadata/api/v1/metadata.py | 9 ++++----- heat/tests/__init__.py | 8 +++++--- heat/tests/test_cfn.py | 3 ++- heat/tests/test_stacks.py | 21 ++++----------------- heat/tests/v1_1/fakes.py | 3 +-- tools/experimental_ssh_eventlet.py | 3 ++- 8 files changed, 20 insertions(+), 34 deletions(-) diff --git a/heat/db/sqlalchemy/api.py b/heat/db/sqlalchemy/api.py index 1e8c10f005..61b5a295e4 100644 --- a/heat/db/sqlalchemy/api.py +++ b/heat/db/sqlalchemy/api.py @@ -60,10 +60,6 @@ def raw_template_create(context, values): def parsed_template_get(context, template_id): result = model_query(context, models.ParsedTemplate).\ filter_by(id=template_id).first() - - if not result: - raise Exception("parsed template with id %s not found" % template_id) - return result diff --git a/heat/metadata/api/v1/__init__.py b/heat/metadata/api/v1/__init__.py index a213e06b3f..0eabaad1e5 100644 --- a/heat/metadata/api/v1/__init__.py +++ b/heat/metadata/api/v1/__init__.py @@ -46,7 +46,8 @@ class API(wsgi.Router): controller=metadata_controller, action='create_stack', conditions=dict(method=['PUT'])) mapper.connect('/stacks/:stack_name/resources/:resource_id', - controller=metadata_controller, action='update_metadata', + controller=metadata_controller,\ + action='update_metadata', conditions=dict(method=['PUT'])) mapper.connect('/events/', controller=metadata_controller, action='create_event', diff --git a/heat/metadata/api/v1/metadata.py b/heat/metadata/api/v1/metadata.py index 7acd585eb8..f02c451bae 100644 --- a/heat/metadata/api/v1/metadata.py +++ b/heat/metadata/api/v1/metadata.py @@ -13,7 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -import logging import json from webob.exc import Response @@ -73,10 +72,10 @@ class MetadataController: if error: if error == 'stack': return json_error(404, - 'The stack "%s" does not exist.' % stack_name) + 'The stack "%s" does not exist.' % stack_name) else: return json_error(404, - 'The resource "%s" does not exist.' % resource_id) + 'The resource "%s" does not exist.' % resource_id) return metadata def update_metadata(self, req, body, stack_name, resource_id): @@ -89,10 +88,10 @@ class MetadataController: if error: if error == 'stack': return json_error(404, - 'The stack "%s" does not exist.' % stack_name) + 'The stack "%s" does not exist.' % stack_name) else: return json_error(404, - 'The resource "%s" does not exist.' % resource_id) + 'The resource "%s" does not exist.' % resource_id) return json_response(201, { 'resource': resource_id, 'metadata': body, diff --git a/heat/tests/__init__.py b/heat/tests/__init__.py index 6328de3ee9..a83367ed0e 100644 --- a/heat/tests/__init__.py +++ b/heat/tests/__init__.py @@ -22,17 +22,19 @@ import shutil from heat.db.sqlalchemy.session import get_engine + def reset_db(): if os.path.exists('heat-test.db'): os.remove('heat-test.db') - + + def setup(): import mox # Fail fast if you don't have mox. Workaround for bug 810424 from heat import db from heat.db import migration - reset_db() + + reset_db() migration.db_sync() engine = get_engine() conn = engine.connect() - diff --git a/heat/tests/test_cfn.py b/heat/tests/test_cfn.py index 6d68774a11..44cc77aa35 100644 --- a/heat/tests/test_cfn.py +++ b/heat/tests/test_cfn.py @@ -117,7 +117,8 @@ runas=root def tearDown_metadata_files(): - shutil.rmtree('/tmp/_files_test_', ignore_errors=True) + shutil.rmtree('/tmp/_files_test_',\ + ignore_errors=True) class PopenMock: diff --git a/heat/tests/test_stacks.py b/heat/tests/test_stacks.py index 78d61d9254..7e4e39ddda 100644 --- a/heat/tests/test_stacks.py +++ b/heat/tests/test_stacks.py @@ -14,22 +14,22 @@ from heat.engine import instance as instances import heat.db as db_api from heat.engine import parser + @attr(tag=['unit', 'resource']) @attr(speed='fast') -class instancesTest(unittest.TestCase): +class stacksTest(unittest.TestCase): def setUp(self): self.m = mox.Mox() self.fc = fakes.FakeClient() def tearDown(self): self.m.UnsetStubs() - print "instancesTest teardown complete" + print "stackTest teardown complete" def test_wordpress_single_instance_stack_create(self): f = open('../../templates/WordPress_Single_Instance_gold.template') t = json.loads(f.read()) f.close() - params = {} parameters = {} params['KeyStoneCreds'] = None @@ -40,15 +40,11 @@ class instancesTest(unittest.TestCase): instances.Instance.nova().AndReturn(self.fc) instances.Instance.nova().AndReturn(self.fc) instances.Instance.nova().AndReturn(self.fc) - - #instance = instances.Instance('WebServer',\ - # t['Resources']['WebServer'], stack) instance = stack.resources['WebServer'] instance.itype_oflavor['m1.large'] = 'm1.large' instance.stack.resolve_attributes(instance.t) instance.stack.resolve_joins(instance.t) instance.stack.resolve_base64(instance.t) - server_userdata = instance._build_userdata(\ instance.t['Properties']['UserData']) self.m.StubOutWithMock(self.fc.servers, 'create') @@ -57,17 +53,15 @@ class instancesTest(unittest.TestCase): userdata=server_userdata).\ AndReturn(self.fc.servers.list()[1]) self.m.ReplayAll() - stack.create_blocking() assert(stack.resources['WebServer'] != None) assert(stack.resources['WebServer'].instance_id > 0) assert(stack.resources['WebServer'].ipaddress != '0.0.0.0') - + def test_wordpress_single_instance_stack_delete(self): f = open('../../templates/WordPress_Single_Instance_gold.template') t = json.loads(f.read()) f.close() - params = {} parameters = {} params['KeyStoneCreds'] = None @@ -79,13 +73,11 @@ class instancesTest(unittest.TestCase): instances.Instance.nova().AndReturn(self.fc) instances.Instance.nova().AndReturn(self.fc) instances.Instance.nova().AndReturn(self.fc) - instance = stack.resources['WebServer'] instance.itype_oflavor['m1.large'] = 'm1.large' instance.stack.resolve_attributes(instance.t) instance.stack.resolve_joins(instance.t) instance.stack.resolve_base64(instance.t) - server_userdata = instance._build_userdata(\ instance.t['Properties']['UserData']) self.m.StubOutWithMock(self.fc.servers, 'create') @@ -94,27 +86,22 @@ class instancesTest(unittest.TestCase): userdata=server_userdata).\ AndReturn(self.fc.servers.list()[2]) self.m.ReplayAll() - rt = {} rt['template'] = stack.t rt['stack_name'] = stack.name new_rt = db_api.raw_template_create(None, rt) - s = {} s['name'] = stack.name s['raw_template_id'] = new_rt.id new_s = db_api.stack_create(None, s) stack.id = new_s.id - pt = {} pt['template'] = stack.t pt['raw_template_id'] = new_rt.id new_pt = db_api.parsed_template_create(None, pt) - stack.create_blocking() assert(stack.resources['WebServer'] != None) assert(stack.resources['WebServer'].instance_id > 0) - stack.delete_blocking() assert(stack.resources['WebServer'].state == 'DELETE_COMPLETE') assert(stack.t['stack_status'] == 'DELETE_COMPLETE') diff --git a/heat/tests/v1_1/fakes.py b/heat/tests/v1_1/fakes.py index daa40f1d74..8e222ca3e5 100644 --- a/heat/tests/v1_1/fakes.py +++ b/heat/tests/v1_1/fakes.py @@ -203,7 +203,7 @@ class FakeHTTPClient(base_client.HTTPClient): } }, { - "id": 9999, + "id": 9999, "name": "sample-server3", "image": { "id": 3, @@ -307,7 +307,6 @@ class FakeHTTPClient(base_client.HTTPClient): def delete_servers_9999_metadata_key2(self, **kw): return (204, None) - def post_servers_9999_metadata(self, **kw): return (204, {'metadata': {'test_key': 'test_value'}}) diff --git a/tools/experimental_ssh_eventlet.py b/tools/experimental_ssh_eventlet.py index 30c556f022..723d764ae9 100755 --- a/tools/experimental_ssh_eventlet.py +++ b/tools/experimental_ssh_eventlet.py @@ -55,6 +55,7 @@ i = 1 while True: pool.spawn_n(monitor, '192.168.122.238', 'root', i) i = i + 1 - if i > 800: break + if i > 800: + break pool.waitall()