def test_infra_directory_added_to_release_bundle( self, TemporaryDirectory, copytree, _, _1, _2, _3, _4 ): # Given release_plugin = Mock() release_plugin.create.return_value = {} platform_config_paths = 'test-platform-config-path' release_data = ["ami_id=ami-a12345", "foo=bar"] account_scheme = Mock() account_scheme.raw_scheme = {} release = Release( boto_session=Mock(), release_bucket=ANY, platform_config_paths=platform_config_paths, release_data=release_data, commit='dummy', version='dummy-version', component_name='dummy-component', team='dummy-team', account_scheme=account_scheme, multi_region=False, ) temp_dir = 'test-temp-dir' TemporaryDirectory.return_value.__enter__.return_value = temp_dir # When release.create(release_plugin) # Then copytree.assert_any_call( 'infra', '{}/{}-{}/infra'.format( temp_dir, 'dummy-component', 'dummy-version' ) )
def test_app_config_add_skipped_to_release_bundle_if_not_existing( self, TemporaryDirectory, copytree, patch_path, _, _1, _2, _3, _4 ): # Given release_plugin = Mock() release_plugin.create.return_value = {} platform_config_paths = ['test-platform-config-path'] release_data = ["ami_id=ami-a12345", "foo=bar"] account_scheme = Mock() account_scheme.raw_scheme = {} release = Release( boto_session=Mock(), release_bucket=ANY, platform_config_paths=platform_config_paths, release_data=release_data, commit='dummy', version='dummy-version', component_name='dummy-component', team='dummy-team', account_scheme=account_scheme, multi_region=False, ) temp_dir = 'test-temp-dir' TemporaryDirectory.return_value.__enter__.return_value = temp_dir patch_path.exists.return_value = False # When release.create(release_plugin) # Then for args, kwargs in copytree.call_args_list: for arg in args: self.assertNotEqual('config', arg) self.assertEqual(copytree.call_count, 1)
def test_create_uploads_archive_to_release_account( self, mock_open, TemporaryDirectory, make_archive, copytree, check_call, mkdir, _ ): # Given release_plugin = Mock() release_plugin.create.return_value = {} commit = 'test-git-commit' version = 'test-version' component_name = 'test-component' release_bucket = 'test-release-bucket' mock_session = Mock() account_scheme = Mock() account_scheme.raw_scheme = {} account_scheme.classic_metadata_handling = False team_name = 'dummy-team' release = Release( boto_session=mock_session, release_bucket=release_bucket, platform_config_paths='test-platform-config-path', release_data=["1234=5678"], commit=commit, version=version, component_name=component_name, team=team_name, account_scheme=account_scheme, multi_region=False, ) temp_dir = 'test-temp-dir' TemporaryDirectory.return_value.__enter__.return_value = temp_dir mock_file = MagicMock(spec=TextIOWrapper) mock_open.return_value.__enter__.return_value = mock_file make_archive_result = '/path/to/dummy.zip' make_archive.return_value = make_archive_result # When release.create(release_plugin) # Then Object = mock_session.resource.return_value.Object Object.return_value.upload_file.assert_called_once_with( make_archive_result, ExtraArgs={'Metadata': { 'cdflow_image_digest': 'hash', }}, ) Object.assert_called_once_with( release_bucket, f'{team_name}/{component_name}/{component_name}-{version}.zip', )
def test_account_scheme_added_to_release_bundle( self, TemporaryDirectory, _open, _1, _2, _3, _4, _5 ): # Given release_plugin = Mock() release_plugin.create.return_value = {} platform_config_paths = ['test-platform-config-path'] release_data = ["ami_id=ami-a12345", "foo=bar"] account_scheme = Mock() account_scheme.raw_scheme = {"test": "scheme"} release = Release( boto_session=Mock(), release_bucket=ANY, platform_config_paths=platform_config_paths, release_data=release_data, commit='dummy', version='dummy-version', component_name='dummy-component', team='dummy-team', account_scheme=account_scheme, multi_region=False, ) temp_dir = 'test-temp-dir' TemporaryDirectory.return_value.__enter__.return_value = temp_dir mock_account_scheme = MagicMock(spec=TextIOWrapper) mock_account_scheme_open = MagicMock() mock_account_scheme_open.__enter__.return_value = mock_account_scheme generic_mock_open = MagicMock() generic_mock_open.__enter__.return_value = \ MagicMock(spec=TextIOWrapper) _open.side_effect = lambda filename, _: \ mock_account_scheme_open \ if filename.endswith(ACCOUNT_SCHEME_FILE) \ else generic_mock_open # When release.create(release_plugin) # Then _open.assert_any_call('test-temp-dir/{}-{}/{}'.format( 'dummy-component', 'dummy-version', ACCOUNT_SCHEME_FILE ), 'w') mock_account_scheme.write.assert_called_once_with(json.dumps({ "test": "scheme" }))
def test_release_bundle_added_to_archive( self, mock_open, TemporaryDirectory, make_archive, _, _1, _2, _3 ): # Given release_plugin = Mock() release_plugin.create.return_value = {} commit = 'test-git-commit' version = 'test-version' component_name = 'test-component' account_scheme = Mock() account_scheme.raw_scheme = {} release = Release( boto_session=Mock(), release_bucket=ANY, platform_config_paths='test-platform-config-path', release_data=["1234=5678"], commit=commit, version=version, component_name=component_name, team='dummy-team', account_scheme=account_scheme, multi_region=False, ) temp_dir = 'test-temp-dir' TemporaryDirectory.return_value.__enter__.return_value = temp_dir mock_file = MagicMock(spec=TextIOWrapper) mock_open.return_value.__enter__.return_value = mock_file make_archive_result = '/path/to/dummy.zip' make_archive.return_value = make_archive_result # When release.create(release_plugin) # Then make_archive.assert_called_once_with( '{}/{}-{}'.format(temp_dir, component_name, version), 'zip', temp_dir, '{}-{}'.format(component_name, version), )
def test_terraform_is_initialised( self, mkdir, getcwd, TemporaryDirectory, _, check_call, _1, _2, _3 ): # Given release_plugin = Mock() release_plugin.create.return_value = {} account_scheme = Mock() account_scheme.raw_scheme = {} release = Release( boto_session=Mock(), release_bucket=ANY, platform_config_paths=[ANY], release_data=["1=1"], commit='dummy', version='dummy-version', component_name='dummy-component', team='dummy-team', account_scheme=account_scheme, multi_region=False, ) temp_dir = 'test-tmp-dir' TemporaryDirectory.return_value.__enter__.return_value = temp_dir getcwd.return_value = '/cwd' # When release.create(release_plugin) # Then mkdir.assert_called_once_with('{}/{}-{}'.format( temp_dir, 'dummy-component', 'dummy-version' )) check_call.assert_any_call([ 'terraform', 'init', './infra', ], cwd='{}/{}-{}'.format(temp_dir, 'dummy-component', 'dummy-version'))
def test_component_name(self, component_name): # Given account_scheme = Mock() account_scheme.raw_scheme = {} release = Release( boto_session=Mock(), release_bucket=ANY, platform_config_paths=[ANY], release_data=["1=1"], commit=ANY, version=ANY, component_name=component_name, team=ANY, account_scheme=account_scheme, multi_region=False, ) # When/Then assert release.component_name == component_name
def test_release_added_to_release_bundle(self, fixtures): # Given component_name = fixtures['component_name'] commit = fixtures['commit'] version = fixtures['version'] team = fixtures['team'] plugin_data = fixtures['plugin_data'] temp_dir = fixtures['temp_dir'] release_data = ["1234=2345"] account_scheme = Mock() account_scheme.raw_scheme = {} release_plugin = Mock() release_plugin.create.return_value = plugin_data release = Release( boto_session=Mock(), release_bucket=ANY, platform_config_paths='platform-config', release_data=release_data, commit=commit, version=version, component_name=component_name, team=team, account_scheme=account_scheme, multi_region=False, ) with ExitStack() as stack: stack.enter_context(patch('cdflow_commands.release.mkdir')) stack.enter_context(patch('cdflow_commands.release.check_call')) stack.enter_context(patch('cdflow_commands.release.copytree')) stack.enter_context(patch('cdflow_commands.release.make_archive')) stack.enter_context( patch('cdflow_commands.release._copy_platform_config') ) TemporaryDirectory = stack.enter_context( patch('cdflow_commands.release.TemporaryDirectory') ) _open = stack.enter_context(patch('cdflow_commands.release.open')) TemporaryDirectory.return_value.__enter__.return_value = temp_dir mock_release_json_file = MagicMock(spec=TextIOWrapper) mock_release_json_open = MagicMock() mock_release_json_open.__enter__.return_value = \ mock_release_json_file mock_account_scheme_file = MagicMock(spec=TextIOWrapper) mock_account_scheme_open = MagicMock() mock_account_scheme_open.__enter__.return_value = \ mock_account_scheme_file _open.side_effect = lambda filename, _: \ mock_release_json_open if filename.endswith('/release.json') \ else mock_account_scheme_open base_release_metadata = { 'commit': commit, 'version': version, 'component': component_name, 'team': team, } release_map = dict(item.split('=', 1) for item in release_data) # When release.create(release_plugin) # Then release_plugin.create.assert_called_once_with() _open.assert_any_call( '{}/{}-{}/release.json'.format( temp_dir, component_name, version ), 'w' ) mock_release_json_file.write.assert_called_once_with(json.dumps({ 'release': dict(**base_release_metadata, **release_map, **plugin_data) }))
def test_platform_config_added_to_release_bundle( self, TemporaryDirectory, listdir, isdir, makedirs, isfile, copyfile, _1, _2, _3, _4, _5 ): # Given release_plugin = Mock() release_plugin.create.return_value = {} platform_config_paths = [ 'test-platform-config-path-a', 'test-platform-config-path-b', ] release_data = ["ami_id=ami-a12345", "foo=bar"] account_scheme = Mock() account_scheme.raw_scheme = {} release = Release( boto_session=Mock(), release_bucket=ANY, platform_config_paths=platform_config_paths, release_data=release_data, commit='dummy', version='dummy-version', component_name='dummy-component', team='dummy-team', account_scheme=account_scheme, multi_region=False, ) temp_dir = 'test-temp-dir' TemporaryDirectory.return_value.__enter__.return_value = temp_dir dirs = { "test-platform-config-path-a": ["alias1", "alias2"], "test-platform-config-path-b": ["alias3"], "test-platform-config-path-a/alias1": ["1.json", "2.json"], "test-platform-config-path-a/alias2": ["3.json"], "test-platform-config-path-b/alias3": ["4.json", "5.json"], } listdir.side_effect = lambda d: dirs[d] isdir.side_effect = lambda d: d in dirs isfile.return_value = True # When release.create(release_plugin) # Then copyfile.assert_any_call( 'test-platform-config-path-a/alias1/1.json', 'test-temp-dir/dummy-component-dummy-version/' 'platform-config/alias1/1.json', ) copyfile.assert_any_call( 'test-platform-config-path-a/alias1/2.json', 'test-temp-dir/dummy-component-dummy-version/' 'platform-config/alias1/2.json', ) copyfile.assert_any_call( 'test-platform-config-path-a/alias2/3.json', 'test-temp-dir/dummy-component-dummy-version/' 'platform-config/alias2/3.json', ) copyfile.assert_any_call( 'test-platform-config-path-b/alias3/4.json', 'test-temp-dir/dummy-component-dummy-version/' 'platform-config/alias3/4.json', ) copyfile.assert_any_call( 'test-platform-config-path-b/alias3/5.json', 'test-temp-dir/dummy-component-dummy-version/' 'platform-config/alias3/5.json', ) makedirs.assert_any_call( 'test-temp-dir/dummy-component-dummy-version/' 'platform-config/alias1', exist_ok=True ) makedirs.assert_any_call( 'test-temp-dir/dummy-component-dummy-version/' 'platform-config/alias2', exist_ok=True ) makedirs.assert_any_call( 'test-temp-dir/dummy-component-dummy-version/' 'platform-config/alias3', exist_ok=True )