From ee1ac01cddb8ae89de2e4408d8329fca69a71ad0 Mon Sep 17 00:00:00 2001 From: Daniel Miranda Date: Sun, 14 Oct 2018 16:52:29 -0300 Subject: [PATCH] Update Build Action tests for external stack changes --- stacker/plan.py | 2 +- stacker/tests/actions/test_build.py | 65 +++++++++++------------------ 2 files changed, 25 insertions(+), 42 deletions(-) diff --git a/stacker/plan.py b/stacker/plan.py index 24b415e04..80f394384 100644 --- a/stacker/plan.py +++ b/stacker/plan.py @@ -34,7 +34,7 @@ def log_step(step): - msg = "%s: %s" % (step, step.status.name) + msg = "%s: %s" % (step.name, step.status.name) if step.status.reason: msg += " (%s)" % (step.status.reason) color_code = COLOR_CODES.get(step.status.code, 37) diff --git a/stacker/tests/actions/test_build.py b/stacker/tests/actions/test_build.py index 1abc9b01c..394e66490 100644 --- a/stacker/tests/actions/test_build.py +++ b/stacker/tests/actions/test_build.py @@ -13,12 +13,14 @@ _handle_missing_parameters, UsePreviousParameterValue, ) +from stacker.blueprints.base import Blueprint from stacker.blueprints.variables.types import CFNString from stacker.context import Context, Config from stacker.exceptions import StackDidNotChange, StackDoesNotExist from stacker.providers.base import BaseProvider from stacker.providers.aws.default import Provider from stacker.session_cache import get_session +from stacker.stack import Stack from stacker.status import ( NotSubmittedStatus, COMPLETE, @@ -28,7 +30,11 @@ FAILED ) -from ..factories import MockThreadingEvent, MockProviderBuilder +from ..factories import ( + MockThreadingEvent, + MockProviderBuilder, + generate_definition +) def mock_stack_parameters(parameters): @@ -155,22 +161,6 @@ def test_execute_plan_when_outline_not_specified(self): build_action.run(outline=False) self.assertEqual(mock_generate_plan().execute.call_count, 1) - def test_should_update(self): - test_scenarios = ( - dict(blueprint=None, locked=False, force=False, result=False), - dict(blueprint="BLUEPRINT", locked=False, force=False, - result=True), - dict(blueprint="BLUEPRINT", locked=False, force=True, result=True), - dict(blueprint="BLUEPRINT", locked=True, force=False, - result=False), - dict(blueprint="BLUEPRINT", locked=True, force=True, result=True) - ) - for t in test_scenarios: - mock_stack = mock.MagicMock( - ["blueprint", "locked", "force", "name"], - name='test-stack', **t) - self.assertEqual(build.should_update(mock_stack), t['result']) - def test_should_ensure_cfn_bucket(self): test_scenarios = [ dict(outline=False, dump=False, result=True), @@ -191,21 +181,18 @@ def test_should_ensure_cfn_bucket(self): e.args += ("scenario", str(scenario)) raise - def test_should_submit(self): - test_scenarios = ( - dict(blueprint=None, enabled=False, result=True), - dict(blueprint="BLUEPRINT", enabled=False, result=False), - dict(blueprint="BLUEPRINT", enabled=True, result=True), - ) - for t in test_scenarios: - mock_stack = mock.MagicMock( - ["blueprint", "enabled", "name"], - name='test-stack', **t) - self.assertEqual(build.should_submit(mock_stack), t['result']) +class TestLaunchStack(TestBuildAction): + def _get_stack(self): + stack = Stack(definition=generate_definition("vpc", 1), + context=self.context,) + blueprint_mock = mock.patch.object(type(stack), 'blueprint', + spec=Blueprint, rendered='{}') + self.addCleanup(blueprint_mock.stop) + blueprint_mock.start() + return stack -class TestLaunchStack(TestBuildAction): def setUp(self): self.context = self._get_context() self.session = get_session(region=None) @@ -215,13 +202,7 @@ def setUp(self): self.build_action = build.Action(self.context, provider_builder=provider_builder, cancel=MockThreadingEvent()) - - self.stack = mock.MagicMock() - self.stack.region = None - self.stack.name = 'vpc' - self.stack.fqn = 'vpc' - self.stack.blueprint.rendered = '{}' - self.stack.locked = False + self.stack = self._get_stack() self.stack_status = None plan = self.build_action._generate_plan() @@ -233,14 +214,16 @@ def patch_object(*args, **kwargs): self.addCleanup(m.stop) m.start() - def get_stack(name, *args, **kwargs): - if name != self.stack.name or not self.stack_status: - raise StackDoesNotExist(name) + def get_stack(fqn, *args, **kwargs): + if fqn != self.stack.fqn or not self.stack_status: + raise StackDoesNotExist(fqn) + tags = [{'Key': key, 'Value': value} + for (key, value) in self.stack.tags.items()] return {'StackName': self.stack.name, 'StackStatus': self.stack_status, - 'Outputs': [], - 'Tags': []} + 'Outputs': {}, + 'Tags': tags} patch_object(self.provider, 'get_stack', side_effect=get_stack) patch_object(self.provider, 'update_stack')