def test_generate_plan_persist_destroy( self, mock_graph_tags: PropertyMock) -> None: """Test generate plan persist destroy.""" mock_graph_tags.return_value = {} context = self._get_context( extra_config_args={"persistent_graph_key": "test.json"}) context._persistent_graph = Graph.from_steps( [Step.from_stack_name("removed", context)]) deploy_action = deploy.Action(context=context) plan = cast(Plan, deploy_action._Action__generate_plan()) # type: ignore self.assertIsInstance(plan, Plan) self.assertEqual(deploy.Action.DESCRIPTION, plan.description) mock_graph_tags.assert_called_once() # order is different between python2/3 so can't compare dicts result_graph_dict = plan.graph.to_dict() self.assertEqual(5, len(result_graph_dict)) self.assertEqual(set(), result_graph_dict["other"]) self.assertEqual(set(), result_graph_dict["removed"]) self.assertEqual(set(), result_graph_dict["vpc"]) self.assertEqual(set(["vpc"]), result_graph_dict["bastion"]) self.assertEqual(set(["bastion", "vpc"]), result_graph_dict["db"]) self.assertEqual(deploy_action._destroy_stack, plan.graph.steps["removed"].fn) self.assertEqual(deploy_action._launch_stack, plan.graph.steps["vpc"].fn) self.assertEqual(deploy_action._launch_stack, plan.graph.steps["bastion"].fn) self.assertEqual(deploy_action._launch_stack, plan.graph.steps["db"].fn) self.assertEqual(deploy_action._launch_stack, plan.graph.steps["other"].fn)
def setUp(self) -> None: """Run before tests.""" self.context = self._get_context() self.session = get_session(region=None) self.provider = Provider(self.session, interactive=False, recreate_failed=False) provider_builder = MockProviderBuilder(provider=self.provider) self.deploy_action = deploy.Action( self.context, provider_builder=provider_builder, cancel=MockThreadingEvent(), # type: ignore ) self.stack = MagicMock() self.stack.region = None self.stack.name = "vpc" self.stack.fqn = "vpc" self.stack.blueprint.rendered = "{}" self.stack.locked = False self.stack_status = None plan = cast( Plan, self.deploy_action._Action__generate_plan()) # type: ignore self.step = plan.steps[0] self.step.stack = self.stack def patch_object(*args: Any, **kwargs: Any) -> None: mock_object = patch.object(*args, **kwargs) self.addCleanup(mock_object.stop) mock_object.start() def get_stack(name: str, *_args: Any, **_kwargs: Any) -> Dict[str, Any]: if name != self.stack.name or not self.stack_status: raise StackDoesNotExist(name) return { "StackName": self.stack.name, "StackStatus": self.stack_status, "Outputs": [], "Tags": [], } def get_events(name: str, *_args: Any, **_kwargs: Any) -> List[Dict[str, str]]: return [{ "ResourceStatus": "ROLLBACK_IN_PROGRESS", "ResourceStatusReason": "CFN fail", }] patch_object(self.provider, "get_stack", side_effect=get_stack) patch_object(self.provider, "update_stack") patch_object(self.provider, "create_stack") patch_object(self.provider, "destroy_stack") patch_object(self.provider, "get_events", side_effect=get_events) patch_object(self.deploy_action, "s3_stack_push")
def test_execute_plan_when_outline_not_specified(self) -> None: """Test execute plan when outline not specified.""" context = self._get_context() deploy_action = deploy.Action( context, cancel=MockThreadingEvent()) # type: ignore with patch.object(deploy_action, "_generate_plan") as mock_generate_plan: deploy_action.run(outline=False) self.assertEqual(mock_generate_plan().execute.call_count, 1)
def setUp(self) -> None: """Run before tests.""" self.context = CfnginContext( config=CfnginConfig.parse_obj({"namespace": "namespace"})) self.provider = MockProvider() self.deploy_action = deploy.Action( self.context, provider_builder=MockProviderBuilder( provider=self.provider), # type: ignore )
def test_generate_plan(self) -> None: """Test generate plan.""" context = self._get_context() deploy_action = deploy.Action( context, cancel=MockThreadingEvent()) # type: ignore plan = cast(Plan, deploy_action._Action__generate_plan()) # type: ignore self.assertEqual( { "db": set(["bastion", "vpc"]), "bastion": set(["vpc"]), "other": set([]), "vpc": set([]), }, plan.graph.to_dict(), )
def test_run_persist( self, mock_execute: MagicMock, mock_unlock: MagicMock, mock_lock: MagicMock, mock_graph_tags: PropertyMock, ) -> None: """Test run persist.""" mock_graph_tags.return_value = {} context = self._get_context( extra_config_args={"persistent_graph_key": "test.json"}) context._persistent_graph = Graph.from_steps( [Step.from_stack_name("removed", context)]) deploy_action = deploy.Action(context=context) deploy_action.run() mock_graph_tags.assert_called_once() mock_lock.assert_called_once() mock_execute.assert_called_once() mock_unlock.assert_called_once()