コード例 #1
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_copy(self) -> None:
     """Test copy."""
     obj = CfnginContext(deploy_environment=self.env)
     obj_copy = obj.copy()
     assert obj_copy != obj
     assert obj_copy.config == obj.config
     assert obj_copy.env != obj.env
コード例 #2
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_unlock_persistent_graph_no_such_key(
         self, mocker: MockerFixture) -> None:
     """Test unlock_persistent_graph empty graph NoSuchKey."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     mocker.patch.object(CfnginContext, "persistent_graph_locked", True)
     mocker.patch.object(CfnginContext, "persistent_graph_lock_code", "123")
     obj = CfnginContext()
     obj.persistent_graph = Graph.from_dict({}, context=obj)
     stubber = Stubber(obj.s3_client)
     stubber.add_response(
         "get_object",
         {"Body": "{}".encode()},
         {
             "ResponseContentType": "application/json",
             **obj.persistent_graph_location,
         },
     )
     stubber.add_client_error("delete_object_tagging", "NoSuchKey")
     with stubber:
         assert obj.unlock_persistent_graph("123")
コード例 #3
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_lock_persistent_graph(self, mocker: MockerFixture) -> None:
     """Test lock_persistent_graph."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     mocker.patch.object(CfnginContext, "persistent_graph_locked", False)
     mocker.patch.object(CfnginContext, "persistent_graph", True)
     obj = CfnginContext()
     stubber = Stubber(obj.s3_client)
     stubber.add_response(
         "put_object_tagging",
         {},
         {
             "Tagging": {
                 # pylint: disable=protected-access
                 "TagSet": [{
                     "Key": obj._persistent_graph_lock_tag,
                     "Value": "123"
                 }]
             },
             **obj.persistent_graph_location,
         },
     )
     with stubber:
         assert not obj.lock_persistent_graph("123")
コード例 #4
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_unlock_persistent_graph(self, graph_dict: Dict[str, List[str]],
                                  mocker: MockerFixture) -> None:
     """Test unlock_persistent_graph."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     mocker.patch.object(CfnginContext, "persistent_graph_locked", True)
     mocker.patch.object(CfnginContext, "persistent_graph_lock_code", "123")
     obj = CfnginContext()
     obj.persistent_graph = Graph.from_dict(graph_dict, context=obj)
     stubber = Stubber(obj.s3_client)
     if not graph_dict:
         stubber.add_response(
             "get_object",
             {"Body": "{}".encode()},
             {
                 "ResponseContentType": "application/json",
                 **obj.persistent_graph_location,
             },
         )
     stubber.add_response("delete_object_tagging", {},
                          obj.persistent_graph_location)
     with stubber:
         assert obj.unlock_persistent_graph("123")
コード例 #5
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_persistent_graph_lock_code_none(self,
                                          mocker: MockerFixture) -> None:
     """Test persistent_graph_lock_code None."""
     mocker.patch.object(CfnginContext, "persistent_graph_location", False)
     assert not CfnginContext().persistent_graph_lock_code
     mocker.patch.object(CfnginContext, "persistent_graph_location", True)
     mocker.patch.object(CfnginContext, "persistent_graph_tags",
                         {"key": "val"})
     assert not CfnginContext().persistent_graph_lock_code
コード例 #6
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_get_fqn(self, mocker: MockerFixture) -> None:
     """Test get_fqn."""
     mock_get_fqn = mocker.patch(f"{MODULE}.get_fqn",
                                 return_value="success")
     obj = CfnginContext(config=self.config)
     assert obj.get_fqn("name") == "success"
     mock_get_fqn.assert_called_once_with(obj.base_fqn,
                                          self.config.namespace_delimiter,
                                          "name")
コード例 #7
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
    def test_persistent_graph_tags(self, mocker: MockerFixture) -> None:
        """Test persistent_graph_tags."""
        bucket = "test-bucket"
        key = "persistent_graphs/test/something.json"
        mocker.patch.object(CfnginContext, "persistent_graph_location", {
            "Bucket": bucket,
            "Key": key
        })
        obj = CfnginContext()
        stubber = Stubber(obj.s3_client)

        stubber.add_response("get_object_tagging", {"TagSet": []},
                             obj.persistent_graph_location)
        stubber.add_response(
            "get_object_tagging",
            {"TagSet": [{
                "Key": "key",
                "Value": "val"
            }]},
            obj.persistent_graph_location,
        )

        with stubber:
            assert obj.persistent_graph_tags == {}
            assert obj.persistent_graph_tags == {"key": "val"}
コード例 #8
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
    def test_persistent_graph(self, mocker: MockerFixture) -> None:
        """Test persistent_graph."""
        mocker.patch.object(
            CfnginContext,
            "persistent_graph_location",
            {
                "Bucket": "test-bucket",
                "Key": "something.json"
            },
        )
        mocker.patch.object(CfnginContext, "s3_bucket_verified", True)
        obj = CfnginContext()
        stubber = Stubber(obj.s3_client)

        stubber.add_response(
            "get_object",
            {"Body": gen_s3_object_content(self.persist_graph_raw)},
            {
                "ResponseContentType": "application/json",
                **obj.persistent_graph_location,
            },
        )

        with stubber:
            assert isinstance(obj.persistent_graph, Graph)
            assert obj.persistent_graph.to_dict() == self.persist_graph_raw
コード例 #9
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
    def test_persistent_graph_no_such_key(self, mocker: MockerFixture) -> None:
        """Test persistent_graph NoSuchKey."""
        mocker.patch.object(
            CfnginContext,
            "persistent_graph_location",
            {
                "Bucket": "test-bucket",
                "Key": "something.json"
            },
        )
        mocker.patch.object(CfnginContext, "s3_bucket_verified", True)
        obj = CfnginContext()
        stubber = Stubber(obj.s3_client)

        stubber.add_client_error("get_object", "NoSuchKey")
        stubber.add_response(
            "put_object",
            {},
            {
                "Body": "{}".encode(),
                "ServerSideEncryption": "AES256",
                "ACL": "bucket-owner-full-control",
                "ContentType": "application/json",
                **obj.persistent_graph_location,
            },
        )

        with stubber:
            assert isinstance(obj.persistent_graph, Graph)
            assert obj.persistent_graph.to_dict() == {}
コード例 #10
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_stacks_dict(self) -> None:
     """Test stacks_dict."""
     obj = CfnginContext(config=self.config)
     assert obj.stacks_dict == {
         "test-stack1": obj.stacks[0],
         "test-stack2": obj.stacks[1],
     }
コード例 #11
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_tags_empty(self) -> None:
     """Test tags empty."""
     obj = CfnginContext(config=CfnginConfig.parse_obj({
         "namespace": "test",
         "tags": {}
     }))
     assert obj.tags == {}
コード例 #12
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_tags_none(self) -> None:
     """Test tags None."""
     obj = CfnginContext(config=CfnginConfig.parse_obj({
         "namespace": "test",
         "tags": None
     }))
     assert obj.tags == {"cfngin_namespace": obj.config.namespace}
コード例 #13
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_put_persistent_graph_empty(self, mocker: MockerFixture) -> None:
     """Test put_persistent_graph empty."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     obj = CfnginContext()
     obj.persistent_graph = Graph.from_dict({}, context=obj)
     stubber = Stubber(obj.s3_client)
     stubber.add_response("delete_object", {},
                          obj.persistent_graph_location)
     with stubber:
         assert not obj.put_persistent_graph("123")
コード例 #14
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_bucket_name_config(self, mocker: MockerFixture) -> None:
     """Test bucket_name from Config."""
     mocker.patch.object(CfnginContext, "upload_to_s3", True)
     assert (CfnginContext(
         config=CfnginConfig.parse_obj({
             "namespace": "test",
             "cfngin_bucket": "test-bucket"
         })).bucket_name == "test-bucket")
コード例 #15
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_stacks(self) -> None:
     """Test stacks."""
     obj = CfnginContext(config=self.config)
     assert len(obj.stacks) == len(self.config.stacks)
     assert isinstance(obj.stacks[0], Stack)
     assert obj.stacks[0].name == self.config.stacks[0].name
     assert isinstance(obj.stacks[1], Stack)
     assert obj.stacks[1].name == self.config.stacks[1].name
コード例 #16
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_namespace_delimiter(self) -> None:
     """Test namespace_delimiter."""
     config = CfnginConfig.parse_obj({
         "namespace": "test",
         "namespace_delimiter": "."
     })
     assert (CfnginContext(
         config=config).namespace_delimiter == config.namespace_delimiter)
コード例 #17
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_put_persistent_graph_not_locked(self,
                                          mocker: MockerFixture) -> None:
     """Test put_persistent_graph not locked."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     mocker.patch.object(CfnginContext, "persistent_graph_locked", False)
     obj = CfnginContext()
     obj.persistent_graph = Graph.from_dict(self.persist_graph_raw,
                                            context=obj)
     with pytest.raises(PersistentGraphUnlocked):
         obj.put_persistent_graph("123")
コード例 #18
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_unlock_persistent_graph_empty_no_such_key(
         self, mocker: MockerFixture) -> None:
     """Test unlock_persistent_graph empty graph NoSuchKey."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     obj = CfnginContext()
     obj.persistent_graph = Graph.from_dict({}, context=obj)
     stubber = Stubber(obj.s3_client)
     stubber.add_client_error("get_object", "NoSuchKey")
     with stubber:
         assert obj.unlock_persistent_graph("123")
コード例 #19
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_unlock_persistent_graph_lock_code_mismatch(
         self, mocker: MockerFixture) -> None:
     """Test unlock_persistent_graph lock code mismatch."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     mocker.patch.object(CfnginContext, "persistent_graph_locked", True)
     mocker.patch.object(CfnginContext, "persistent_graph_lock_code", "0")
     obj = CfnginContext()
     obj.persistent_graph = Graph.from_dict(self.persist_graph_raw,
                                            context=obj)
     with pytest.raises(PersistentGraphCannotUnlock):
         assert obj.unlock_persistent_graph("123")
コード例 #20
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_tags(self) -> None:
     """Test tags."""
     obj = CfnginContext(config=CfnginConfig.parse_obj({
         "namespace": "test",
         "tags": {
             "key": "val"
         }
     }))
     assert obj.tags == obj.config.tags
コード例 #21
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_lock_persistent_graph_no_such_key(self,
                                            mocker: MockerFixture) -> None:
     """Test lock_persistent_graph NoSuchKey."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     mocker.patch.object(CfnginContext, "persistent_graph_locked", False)
     mocker.patch.object(CfnginContext, "persistent_graph", True)
     obj = CfnginContext()
     stubber = Stubber(obj.s3_client)
     stubber.add_client_error("put_object_tagging", "NoSuchKey")
     with stubber, pytest.raises(PersistentGraphCannotLock):
         obj.lock_persistent_graph("123")
コード例 #22
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_s3_client(self, mocker: MockerFixture) -> None:
     """Test s3_client."""
     mock_client = MagicMock()
     mock_session = MagicMock(client=MagicMock(return_value=mock_client))
     mock_get_session = mocker.patch.object(CfnginContext,
                                            "get_session",
                                            return_value=mock_session)
     assert CfnginContext(
         deploy_environment=self.env).s3_client == mock_client
     mock_get_session.assert_called_once_with(region=self.env.aws_region)
     mock_session.client.assert_called_once_with("s3")
コード例 #23
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_s3_bucket_verified(self, mocker: MockerFixture) -> None:
     """Test s3_bucket_verified."""
     mock_ensure_s3_bucket = mocker.patch(f"{MODULE}.ensure_s3_bucket")
     mocker.patch.object(CfnginContext, "bucket_name", "test-bucket")
     mocker.patch.object(CfnginContext, "persistent_graph_location", {})
     obj = CfnginContext()
     assert obj.s3_bucket_verified is True
     assert obj.s3_bucket_verified is True  # value should be cached
     mock_ensure_s3_bucket.assert_called_once_with(obj.s3_client,
                                                   obj.bucket_name,
                                                   obj.bucket_region,
                                                   persist_graph=False)
コード例 #24
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_persistent_graph_location_add_json(self) -> None:
     """Test persistent_graph_location adds `.json` extension."""
     config = CfnginConfig.parse_obj({
         "namespace": "test",
         "cfngin_bucket": "test-bucket",
         "persistent_graph_key": "something",
     })
     obj = CfnginContext(config=config)
     assert obj.persistent_graph_location["Bucket"] == config.cfngin_bucket
     assert (
         obj.persistent_graph_location["Key"] ==
         f"persistent_graphs/{config.namespace}/{config.persistent_graph_key}.json"
     )
コード例 #25
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_init_defaults(self) -> None:
     """Test init defaults."""
     obj = CfnginContext()
     assert obj.bucket_region == self.env.aws_region
     assert isinstance(obj.config, CfnginConfig)
     assert obj.config.namespace == "example"
     assert obj.config_path == Path.cwd()
     assert isinstance(obj.env, DeployEnvironment)
     assert obj.force_stacks == []
     assert obj.hook_data == {}
     assert obj.logger
     assert obj.parameters == {}
     assert obj.stack_names == []
コード例 #26
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_mappings(self) -> None:
     """Test mappings."""
     config = CfnginConfig.parse_obj({
         "namespace": "test",
         "mappings": {
             "my_map": {
                 "something": {
                     "key": "val"
                 }
             }
         }
     })
     assert CfnginContext(config=config).mappings == config.mappings
コード例 #27
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_get_stack(self) -> None:
     """Test get_stack."""
     obj = CfnginContext(config=self.config)
     assert obj.get_stack("test-stack1") == obj.stacks[0]
     # namespace is added if not provided
     assert obj.get_stack("stack1") == obj.stacks[0]
     assert not obj.get_stack("dev-stack1")
     assert not obj.get_stack("stack12")
コード例 #28
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_put_persistent_graph(self, mocker: MockerFixture) -> None:
     """Test put_persistent_graph."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "something.json"
         },
     )
     mocker.patch.object(CfnginContext, "persistent_graph_locked", True)
     mocker.patch.object(CfnginContext, "persistent_graph_lock_code", "123")
     obj = CfnginContext()
     obj.persistent_graph = Graph.from_dict(self.persist_graph_raw,
                                            context=obj)
     stubber = Stubber(obj.s3_client)
     stubber.add_response(
         "put_object",
         {},
         {
             "Body":
             json.dumps(self.persist_graph_raw,
                        default=json_serial,
                        indent=4).encode(),
             "ServerSideEncryption":
             "AES256",
             "ACL":
             "bucket-owner-full-control",
             "ContentType":
             "application/json",
             "Tagging":
             "cfngin_lock_code=123",
             **obj.persistent_graph_location,
         },
     )
     with stubber:
         assert not obj.put_persistent_graph("123")
コード例 #29
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_persistent_graph_tags_no_such_key(self,
                                            mocker: MockerFixture) -> None:
     """Test persistent_graph_tags NoSuchKey."""
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "Key": "persistent_graphs/test/something.json"
         },
     )
     obj = CfnginContext()
     stubber = Stubber(obj.s3_client)
     stubber.add_client_error("get_object_tagging", "NoSuchKey")
     with stubber:
         assert obj.persistent_graph_tags == {}
コード例 #30
0
ファイル: test_cfngin.py プロジェクト: onicagroup/runway
 def test_persistent_graph_s3_not_verified(self,
                                           mocker: MockerFixture) -> None:
     """Test persistent_graph s3 not verified."""
     mock_graph = mocker.patch(
         f"{MODULE}.Graph",
         MagicMock(from_dict=MagicMock(return_value="success")))
     mocker.patch.object(
         CfnginContext,
         "persistent_graph_location",
         {
             "Bucket": "test-bucket",
             "key": "something.json"
         },
     )
     mocker.patch.object(CfnginContext, "s3_bucket_verified", False)
     obj = CfnginContext()
     assert obj.persistent_graph == "success"
     mock_graph.from_dict.assert_called_once_with({}, obj)