def test_render_parameter_store(self, *args): sys.stdout = StringIO() with open(TEST_CONFIG, 'wt') as f: f.write(test_config_file) fake_aws = self.FakeAws() with fake_aws.patch(): with mock.patch.object(config.AWSCredentialCache, 'get_awscreds', self.fake_awscreds): config.main([ '-c', TEST_CONFIG, 'render', 'prod', '--parameter-store', '/super-service/blah' ]) sys.stdout.seek(0) data = sys.stdout.read() actual_lines = [line for line in data.split('\n') if line] self.assertEqual( 'Writing config with parameter store prefix ' '/super-service/blah to AWS account 12345', actual_lines[0]) for index, actual_line in enumerate(actual_lines[1:]): self.assertTrue( actual_line.startswith('Writing /super-service/blah/'), msg='Line {} was {}'.format(index + 1, actual_line)) self.assertEqual( { '/super-service/blah/foo': 'bar', '/super-service/blah/password': '******', '/super-service/blah/nest/bird': 'pigeon', '/super-service/blah/nest/tree': 'birch', }, fake_aws.fake_parameter_store)
def test_import_json_config(self, *args): stdin = sys.stdin sys.stdin = StringIO(test_json_config) config.main(['-c', TEST_CONFIG, 'import']) sys.stdin = stdin with open(TEST_CONFIG, 'rt') as f: data = yaml.load(f.read()) self.assertEqual( data, { 'stages': { '/.*/': { 'environment': 'dev', 'key': 'dev-key' }, 'prod': { 'environment': 'prod', 'key': 'prod-key' } }, 'config': { 'foo': 'bar', 'password': { '+dev': ':decrypt:ZGV2OmRldi1wYXNzd29yZA==', '+prod': ':decrypt:cHJvZDpwcm9kLXBhc3N3b3Jk' }, 'nest': { 'bird': 'pigeon', 'tree': 'birch', } } })
def test_export_json_config(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, 'wt') as f: f.write(test_config_file) config.main(['-c', TEST_CONFIG, 'export', '--json']) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout self.assertEqual( json.loads(data), { 'stages': { '/.*/': { 'environment': 'dev', 'key': 'dev-key' }, 'prod': { 'environment': 'prod', 'key': 'prod-key' } }, 'config': { 'foo': 'bar', 'password': { '+dev': ':encrypt:dev-password', '+prod': ':encrypt:prod-password', '+foo': ':encrypt:foo-password', '+/ba.*/': ':encrypt:bar-password' }, 'nest': { 'bird': 'pigeon', 'tree': 'birch', } } })
def test_import_json_config(self, *args): stdin = sys.stdin sys.stdin = StringIO(test_json_config) config.main(["-c", TEST_CONFIG, "import"]) sys.stdin = stdin with open(TEST_CONFIG, "rt") as f: data = yaml.safe_load(f.read()) self.assertEqual( data, { "stages": { "/.*/": { "environment": "dev", "key": "dev-key" }, "prod": { "environment": "prod", "key": "prod-key" }, }, "config": { "foo": "bar", "password": { "+dev": ":decrypt:ZGV2OmRldi1wYXNzd29yZA==", "+prod": ":decrypt:cHJvZDpwcm9kLXBhc3N3b3Jk", }, "nest": { "bird": "pigeon", "tree": "birch" }, }, }, )
def test_render_json_config(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, 'wt') as f: f.write(test_config_file) config.main(['-c', TEST_CONFIG, 'render', 'prod', '--json']) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout self.assertEqual(json.loads(data), { 'foo': 'bar', 'password': '******' })
def test_render_yaml_config_custom_regex(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, 'wt') as f: f.write(test_config_file) config.main(['-c', TEST_CONFIG, 'render', 'baz']) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout self.assertEqual(yaml.load(data), { 'foo': 'bar', 'password': '******' })
def test_render_python_config(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, 'wt') as f: f.write(test_config_file) config.main(['-c', TEST_CONFIG, 'render', 'prod', '--python']) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout g = {'ENCRYPTED_CONFIG': None} exec(data.split('\n')[0], g) data = mock_decrypt(g['ENCRYPTED_CONFIG'][0], 'prod') self.assertEqual(json.loads(data), { 'foo': 'bar', 'password': '******' })
def test_render_encrypted_config(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, 'wt') as f: f.write(test_config_file) config.main(['-c', TEST_CONFIG, 'render', 'prod', '--encrypt']) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout self.assertEqual( json.loads(mock_decrypt(json.loads(data)[0], 'prod')), { 'foo': 'bar', 'password': '******', 'nest': { 'bird': 'pigeon', 'tree': 'birch', } })
def test_render_yaml_config_custom(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, 'wt') as f: f.write(test_config_file) config.main(['-c', TEST_CONFIG, 'render', 'foo']) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout self.assertEqual( yaml.load(data), { 'foo': 'bar', 'password': '******', 'nest': { 'bird': 'pigeon', 'tree': 'birch', } })
def test_render_parameter_store(self, *args): sys.stdout = StringIO() with open(TEST_CONFIG, "wt") as f: f.write(test_config_file) fake_aws = self.FakeAws() with fake_aws.patch(): with mock.patch.object(config.AWSCredentialCache, "get_awscreds", self.fake_awscreds): config.main([ "-c", TEST_CONFIG, "render", "prod", "--parameter-store", "/super-service/blah", ]) sys.stdout.seek(0) data = sys.stdout.read() actual_lines = [line for line in data.split("\n") if line] self.assertEqual( "Writing config with parameter store prefix " "/super-service/blah to AWS account 12345", actual_lines[0], ) for index, actual_line in enumerate(actual_lines[1:]): self.assertTrue( actual_line.startswith("Writing /super-service/blah/"), msg="Line {} was {}".format(index + 1, actual_line), ) self.assertEqual( { "/super-service/blah/foo": "bar", "/super-service/blah/password": "******", "/super-service/blah/nest/bird": "pigeon", "/super-service/blah/nest/tree": "birch", }, fake_aws.fake_parameter_store, )
def test_render_encrypted_config(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, "wt") as f: f.write(test_config_file) config.main(["-c", TEST_CONFIG, "render", "prod", "--encrypt"]) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout self.assertEqual( json.loads(mock_decrypt(json.loads(data)[0], "prod")), { "foo": "bar", "password": "******", "nest": { "bird": "pigeon", "tree": "birch" }, }, )
def test_render_yaml_config_custom_regex(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, "wt") as f: f.write(test_config_file) config.main(["-c", TEST_CONFIG, "render", "baz"]) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout self.assertEqual( yaml.safe_load(data), { "foo": "bar", "password": "******", "nest": { "bird": "pigeon", "tree": "birch" }, }, )
def test_render_python_config(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, "wt") as f: f.write(test_config_file) config.main(["-c", TEST_CONFIG, "render", "prod", "--python"]) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout g = {"ENCRYPTED_CONFIG": None} exec(data.split("\n")[0], g) data = mock_decrypt(g["ENCRYPTED_CONFIG"][0], "prod") self.assertEqual( json.loads(data), { "foo": "bar", "password": "******", "nest": { "bird": "pigeon", "tree": "birch" }, }, )
def test_export_json_config(self, *args): stdout = sys.stdout sys.stdout = StringIO() with open(TEST_CONFIG, "wt") as f: f.write(test_config_file) config.main(["-c", TEST_CONFIG, "export", "--json"]) sys.stdout.seek(0) data = sys.stdout.read() sys.stdout = stdout self.assertEqual( json.loads(data), { "stages": { "/.*/": { "environment": "dev", "key": "dev-key" }, "prod": { "environment": "prod", "key": "prod-key" }, }, "config": { "foo": "bar", "password": { "+dev": ":encrypt:dev-password", "+prod": ":encrypt:prod-password", "+foo": ":encrypt:foo-password", "+/ba.*/": ":encrypt:bar-password", }, "nest": { "bird": "pigeon", "tree": "birch" }, }, }, )