def test_isolated_scratch_restriction(self, tmpdir, scratch, isolated, valid): options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = ['test', 'test', '--git-branch', 'the-branch'] expected_args = ['test', 'test'] expected_opts = {'git_branch': 'the-branch'} release = '20.1' if scratch: test_args.append('--scratch') expected_opts['scratch'] = scratch if isolated: test_args.append('--isolated') expected_opts['isolated'] = isolated test_args.append('--release') test_args.append(release) expected_opts['release'] = release if not valid: with pytest.raises(SystemExit): parse_arguments(options, test_args, flatpak=False) return build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=False) assert build_opts.scratch == scratch assert build_opts.isolated == isolated assert parsed_args == expected_args assert opts == expected_opts
def test_source_restriction(self, tmpdir, source_url, valid, error_msg, capsys): options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = ['test', '--git-branch', 'the-branch'] test_args.insert(1, source_url) expected_args = ['test'] expected_args.append(source_url) expected_opts = {'git_branch': 'the-branch'} if not valid: with pytest.raises(SystemExit): parse_arguments(options, test_args, flatpak=False) _, stderr_output = capsys.readouterr() assert error_msg in stderr_output return # pylint: disable=unused-variable build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=False) # pylint: enable=unused-variable assert parsed_args == expected_args assert opts == expected_opts
def test_arch_override_restriction(self, tmpdir, scratch, arch_override, valid): options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = ['test', 'test', '--git-branch', 'the-branch'] expected_args = ['test', 'test'] expected_opts = {'git_branch': 'the-branch'} if scratch: test_args.append('--scratch') expected_opts['scratch'] = scratch if arch_override: test_args.append('--arch-override') test_args.append(arch_override) expected_opts['arch_override'] = arch_override.replace(',', ' ') if not valid: with pytest.raises(SystemExit): parse_arguments(options, test_args, flatpak=False) return build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=False) assert build_opts.scratch == scratch assert build_opts.arch_override == arch_override assert parsed_args == expected_args assert opts == expected_opts
def test_arch_override_restriction(self, tmpdir, scratch, arch_override, valid): options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = [ 'test', 'source_repo://image#ref', '--git-branch', 'the-branch' ] expected_args = ['test', 'source_repo://image#ref'] expected_opts = {'git_branch': 'the-branch'} if scratch: test_args.append('--scratch') expected_opts['scratch'] = scratch if arch_override: test_args.append('--arch-override') test_args.append(arch_override) expected_opts['arch_override'] = arch_override.replace(',', ' ') if not valid: with pytest.raises(SystemExit): parse_arguments(options, test_args, flatpak=False) return build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=False) assert build_opts.scratch == scratch assert build_opts.arch_override == arch_override assert parsed_args == expected_args assert opts == expected_opts
def test_isolated_operator_csv_modification_url(self, capsys, op_csv_mods_url, isolated, valid): """Operator CSV modification URL can be used only together with isolated build""" options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = [ 'test', 'source_repo://image#ref', '--git-branch', 'the-branch' ] test_op_csv_mods_url = "https://example.com/test.json" if op_csv_mods_url else None expected_args = ['test', 'source_repo://image#ref'] expected_opts = {'git_branch': 'the-branch'} release = '20.1' if op_csv_mods_url: test_args.extend( ['--operator-csv-modifications-url', test_op_csv_mods_url]) expected_opts[ 'operator_csv_modifications_url'] = test_op_csv_mods_url if isolated: test_args.append('--isolated') expected_opts['isolated'] = isolated test_args.append('--release') test_args.append(release) expected_opts['release'] = release if not valid: with pytest.raises(SystemExit): parse_arguments(options, test_args, flatpak=False) _, stderr_output = capsys.readouterr() error_msg = "Only --isolated builds support option --operator-csv-modifications-url" assert error_msg in stderr_output return build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=False) assert build_opts.operator_csv_modifications_url == test_op_csv_mods_url assert build_opts.isolated == isolated assert parsed_args == expected_args assert opts == expected_opts
def test_compose_id_arg_restrictions(self, tmpdir, compose_ids, signing_intent, yum_repourls, valid): options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = [ 'test', 'source_repo://image#ref', '--git-branch', 'the-branch' ] expected_args = ['test', 'source_repo://image#ref'] expected_opts = {'git_branch': 'the-branch'} if compose_ids: for ci in compose_ids: test_args.append('--compose-id') test_args.append(str(ci)) expected_opts['compose_ids'] = compose_ids if signing_intent: test_args.append('--signing-intent') test_args.append(signing_intent) expected_opts['signing_intent'] = signing_intent if yum_repourls: for yru in yum_repourls: test_args.append('--repo-url') test_args.append(yru) expected_opts['yum_repourls'] = yum_repourls if not valid: with pytest.raises(SystemExit): parse_arguments(options, test_args, flatpak=False) return build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=False) assert build_opts.compose_ids == compose_ids assert build_opts.signing_intent == signing_intent assert build_opts.yum_repourls == yum_repourls assert parsed_args == expected_args assert opts == expected_opts
def test_source_operator_csv_modification_url_invalid_value( self, url, valid, capsys): """Test if exception is raised when value for --operator-csv-modifications-url seems to be an invalid URL""" options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = [ 'test', 'source_repo://image#ref', '--git-branch', 'the-branch', '--isolated', '--release', '20.3', '--operator-csv-modifications-url', url ] expected_args = ['test', 'source_repo://image#ref'] expected_opts = { 'git_branch': 'the-branch', 'isolated': True, 'operator_csv_modifications_url': url, 'release': '20.3', } if not valid: with pytest.raises(SystemExit): parse_arguments(options, test_args, flatpak=False) _, stderr_output = capsys.readouterr() error_msg = ("Value provided to --operator-csv-modifications-url " "does not look like an URL") assert error_msg in stderr_output return # pylint: disable=unused-variable build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=False) # pylint: enable=unused-variable assert parsed_args == expected_args assert opts == expected_opts
def test_compose_id_arg_restrictions(self, tmpdir, compose_ids, signing_intent, yum_repourls, valid): options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = ['test', 'test', '--git-branch', 'the-branch'] expected_args = ['test', 'test'] expected_opts = {'git_branch': 'the-branch'} if compose_ids: for ci in compose_ids: test_args.append('--compose-id') test_args.append(str(ci)) expected_opts['compose_ids'] = compose_ids if signing_intent: test_args.append('--signing-intent') test_args.append(signing_intent) expected_opts['signing_intent'] = signing_intent if yum_repourls: for yru in yum_repourls: test_args.append('--repo-url') test_args.append(yru) expected_opts['yum_repourls'] = yum_repourls if not valid: with pytest.raises(SystemExit): parse_arguments(options, test_args, flatpak=False) return build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=False) assert build_opts.compose_ids == compose_ids assert build_opts.signing_intent == signing_intent assert build_opts.yum_repourls == yum_repourls assert parsed_args == expected_args assert opts == expected_opts
def test_cli_args(self, tmpdir, scratch, wait, quiet, epoch, repo_url, git_branch, channel_override, release, isolated, koji_parent_build, flatpak, compose_ids, signing_intent): options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = ['test', 'test'] expected_args = ['test', 'test'] expected_opts = {} if scratch: test_args.append('--scratch') expected_opts['scratch'] = scratch if wait: test_args.append('--wait') elif wait is False: test_args.append('--nowait') if quiet: test_args.append('--quiet') if epoch: test_args.append('--epoch') test_args.append(epoch) expected_opts['epoch'] = epoch if repo_url: expected_opts['yum_repourls'] = [] for url in repo_url: test_args.append('--repo-url') test_args.append(url) expected_opts['yum_repourls'].append(url) if git_branch: test_args.append('--git-branch') test_args.append(git_branch) expected_opts['git_branch'] = git_branch if channel_override: test_args.append('--channel-override') test_args.append(channel_override) if release: test_args.append('--release') test_args.append(release) expected_opts['release'] = release if koji_parent_build: test_args.append('--koji-parent-build') test_args.append(koji_parent_build) expected_opts['koji_parent_build'] = koji_parent_build if isolated: test_args.append('--isolated') expected_opts['isolated'] = isolated if flatpak: expected_opts['flatpak'] = flatpak if compose_ids: expected_opts['compose_ids'] = [] for cid in compose_ids: test_args.append('--compose-id') test_args.append(str(cid)) expected_opts['compose_ids'].append(cid) if signing_intent: test_args.append('--signing-intent') test_args.append(signing_intent) expected_opts['signing_intent'] = signing_intent build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=flatpak) expected_quiet = quiet or options.quiet expected_channel = channel_override or 'container' assert build_opts.scratch == scratch assert build_opts.wait == wait assert build_opts.quiet == expected_quiet assert build_opts.epoch == epoch assert build_opts.yum_repourls == repo_url assert build_opts.git_branch == git_branch assert build_opts.channel_override == expected_channel if not flatpak: assert build_opts.release == release assert build_opts.compose_ids == compose_ids assert build_opts.signing_intent == signing_intent assert parsed_args == expected_args assert opts == expected_opts
def test_cli_container_args(self, tmpdir, scratch, wait, quiet, repo_url, git_branch, channel_override, release, isolated, koji_parent_build, flatpak, compose_ids, signing_intent, userdata, replace_dependency): options = flexmock(allowed_scms='pkgs.example.com:/*:no') options.quiet = False test_args = ['test', 'source_repo://image#ref'] expected_args = ['test', 'source_repo://image#ref'] expected_opts = {} if scratch: test_args.append('--scratch') expected_opts['scratch'] = scratch if wait: test_args.append('--wait') elif wait is False: test_args.append('--nowait') if quiet: test_args.append('--quiet') if replace_dependency: expected_opts['dependency_replacements'] = [] for dr in replace_dependency: test_args.append('--replace-dependency') test_args.append(dr) expected_opts['dependency_replacements'].append(dr) if repo_url: expected_opts['yum_repourls'] = [] for url in repo_url: test_args.append('--repo-url') test_args.append(url) expected_opts['yum_repourls'].append(url) if git_branch: test_args.append('--git-branch') test_args.append(git_branch) expected_opts['git_branch'] = git_branch if channel_override: test_args.append('--channel-override') test_args.append(channel_override) if release: test_args.append('--release') test_args.append(release) expected_opts['release'] = release if koji_parent_build: test_args.append('--koji-parent-build') test_args.append(koji_parent_build) expected_opts['koji_parent_build'] = koji_parent_build if isolated: test_args.append('--isolated') expected_opts['isolated'] = isolated if flatpak: expected_opts['flatpak'] = flatpak if compose_ids: expected_opts['compose_ids'] = [] for cid in compose_ids: test_args.append('--compose-id') test_args.append(str(cid)) expected_opts['compose_ids'].append(cid) if signing_intent: test_args.append('--signing-intent') test_args.append(signing_intent) expected_opts['signing_intent'] = signing_intent if userdata: test_args.append('--userdata') test_args.append(json.dumps(userdata)) expected_opts['userdata'] = userdata build_opts, parsed_args, opts, _ = parse_arguments(options, test_args, flatpak=flatpak) expected_quiet = quiet or options.quiet expected_channel = channel_override or 'container' assert build_opts.scratch == scratch assert build_opts.wait == wait assert build_opts.quiet == expected_quiet assert build_opts.yum_repourls == repo_url assert build_opts.git_branch == git_branch assert build_opts.channel_override == expected_channel if not flatpak: assert build_opts.release == release assert build_opts.compose_ids == compose_ids assert build_opts.signing_intent == signing_intent assert parsed_args == expected_args assert opts == expected_opts