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 1e8c10f0..61b5a295 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 a213e06b..0eabaad1 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 7acd585e..f02c451b 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 6328de3e..a83367ed 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 6d68774a..44cc77aa 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 78d61d92..7e4e39dd 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 daa40f1d..8e222ca3 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 30c556f0..723d764a 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() -- 2.45.2