Beispiel #1
0
def test_dist_git_package_url():
    di = {
        "dist_git_base_url": "https://packit.dev/",
        "downstream_package_name": "packit",
        "dist_git_namespace": "awesome",
        "synced_files": ["fedora/foobar.spec"],
        "specfile_path": "fedora/package.spec",
        "create_pr": False,
    }
    new_pc = PackageConfig.get_from_dict(di)
    pc = PackageConfig(
        dist_git_base_url="https://packit.dev/",
        downstream_package_name="packit",
        dist_git_namespace="awesome",
        synced_files=SyncFilesConfig(files_to_sync=[
            SyncFilesItem(src="fedora/foobar.spec", dest="fedora/foobar.spec")
        ]),
        specfile_path="fedora/package.spec",
        create_pr=False,
        jobs=get_default_job_config(),
    )
    assert new_pc.specfile_path.endswith("fedora/package.spec")
    assert pc.specfile_path.endswith("fedora/package.spec")
    assert pc == new_pc
    assert pc.dist_git_package_url == "https://packit.dev/awesome/packit.git"
    assert new_pc.dist_git_package_url == "https://packit.dev/awesome/packit.git"
    assert not pc.create_pr
Beispiel #2
0
def test_package_config_equal():
    assert PackageConfig(
        specfile_path="fedora/package.spec",
        synced_files=["a", "b"],
        jobs=[JobConfig(trigger=TriggerType.release, release_to=["f28"], metadata={})],
        metadata={"c": "d"},
    ) == PackageConfig(
        specfile_path="fedora/package.spec",
        synced_files=["a", "b"],
        jobs=[JobConfig(trigger=TriggerType.release, release_to=["f28"], metadata={})],
        metadata={"c": "d"},
    )
Beispiel #3
0
def test_package_config_equal(job_config_simple):
    assert PackageConfig(
        specfile_path="fedora/package.spec",
        synced_files=SyncFilesConfig(files_to_sync=[
            SyncFilesItem(src="packit.yaml", dest="packit.yaml")
        ]),
        jobs=[job_config_simple],
    ) == PackageConfig(
        specfile_path="fedora/package.spec",
        synced_files=SyncFilesConfig(files_to_sync=[
            SyncFilesItem(src="packit.yaml", dest="packit.yaml")
        ]),
        jobs=[job_config_simple],
    )
Beispiel #4
0
def test_precheck(github_pr_event):
    flexmock(PullRequestModel).should_receive("get_or_create").with_args(
        pr_id=342,
        namespace="packit-service",
        repo_name="packit",
        project_url="https://github.com/packit-service/packit",
    ).and_return(
        flexmock(id=342,
                 job_config_trigger_type=JobConfigTriggerType.pull_request))

    copr_build_handler = CoprBuildHandler(
        package_config=PackageConfig(jobs=[
            JobConfig(
                type=JobType.copr_build,
                trigger=JobConfigTriggerType.pull_request,
            ),
            JobConfig(
                type=JobType.tests,
                trigger=JobConfigTriggerType.pull_request,
            ),
        ]),
        job_config=JobConfig(
            type=JobType.copr_build,
            trigger=JobConfigTriggerType.pull_request,
        ),
        event=github_pr_event.get_dict(),
    )
    assert copr_build_handler.pre_check()
def test_precheck_skip_tests_when_build_defined(pull_request_event):
    flexmock(AbstractGithubCoprBuildHandler).should_receive(
        "get_package_config_from_repo").and_return(
            PackageConfig(jobs=[
                JobConfig(
                    type=JobType.copr_build,
                    trigger=JobConfigTriggerType.pull_request,
                    metadata={},
                ),
                JobConfig(
                    type=JobType.tests,
                    trigger=JobConfigTriggerType.pull_request,
                    metadata={},
                ),
            ]))
    copr_build_handler = AbstractGithubCoprBuildHandler(
        config=flexmock(),
        job_config=JobConfig(
            type=JobType.tests,
            trigger=JobConfigTriggerType.pull_request,
            metadata={},
        ),
        event=pull_request_event,
    )
    assert not copr_build_handler.pre_check()
def build_handler(metadata=None, trigger=None):
    if not metadata:
        metadata = {
            "owner": "nobody",
            "targets": [
                "fedora-29-x86_64",
                "fedora-30-x86_64",
                "fedora-31-x86_64",
                "fedora-rawhide-x86_64",
            ],
        }
    jobs = [
        JobConfig(
            job=JobType.copr_build,
            trigger=trigger or JobTriggerType.pull_request,
            metadata=metadata,
        )
    ]
    pkg_conf = PackageConfig(jobs=jobs, downstream_package_name="dummy")
    event = Parser.parse_pr_event(pull_request())
    handler = CoprBuildHandler(
        config=ServiceConfig(),
        package_config=pkg_conf,
        project=GitProject("", GitService(), ""),
        event=event,
    )
    handler._api = PackitAPI(ServiceConfig, pkg_conf)
    return handler
Beispiel #7
0
def test_copr_project_and_namespace(
    jobs,
    job_config_trigger_type,
    tag_name,
    job_owner,
    job_project,
):
    copr_build_helper = CoprBuildJobHelper(
        service_config=flexmock(deployment="stg"),
        package_config=PackageConfig(jobs=jobs),
        job_config=jobs[0],  # BuildHelper looks at all jobs in the end
        project=flexmock(
            namespace="the/example/namespace",
            repo="the-example-repo",
            service=flexmock(instance_url="https://git.instance.io"),
        ),
        metadata=flexmock(pr_id=None,
                          identifier="the-event-identifier",
                          tag_name=tag_name),
        db_trigger=flexmock(job_config_trigger_type=job_config_trigger_type),
    )
    copr_build_helper._api = flexmock(copr_helper=flexmock(
        copr_client=flexmock(config={"username": "******"})))

    assert copr_build_helper.job_project == job_project
    assert copr_build_helper.job_owner == job_owner
def build_helper(
    event: Union[PullRequestEvent, PullRequestCommentEvent, CoprBuildEvent,
                 PushGitHubEvent, ReleaseEvent, ],
    metadata=None,
    trigger=None,
    jobs=None,
):
    if not metadata:
        metadata = {
            "owner":
            "nobody",
            "targets": [
                "fedora-29-x86_64",
                "fedora-30-x86_64",
                "fedora-31-x86_64",
                "fedora-rawhide-x86_64",
            ],
        }
    jobs = jobs or []
    jobs.append(
        JobConfig(
            type=JobType.copr_build,
            trigger=trigger or JobConfigTriggerType.pull_request,
            metadata=metadata,
        ))
    pkg_conf = PackageConfig(jobs=jobs, downstream_package_name="dummy")
    handler = CoprBuildJobHelper(
        config=ServiceConfig(),
        package_config=pkg_conf,
        project=GitProject("", GitService(), ""),
        event=event,
    )
    handler._api = PackitAPI(ServiceConfig(), pkg_conf)
    return handler
Beispiel #9
0
def test_package_config_parse(raw, expected):
    package_config = PackageConfig.get_from_dict(raw_dict=raw)
    assert package_config
    # tests for https://github.com/packit-service/packit-service/pull/342
    if expected.jobs:
        for j in package_config.jobs:
            assert j.type
    assert package_config == expected
Beispiel #10
0
def packit_repository_base_more_actions():
    return PackitRepositoryBase(
        config=Config(),
        package_config=PackageConfig(
            actions={
                ActionName.pre_sync: ["command --a", "command --a"],
                ActionName.get_current_version: "command --b",
            }),
    )
Beispiel #11
0
def test_dist_git_package_url():
    di = {
        "dist_git_base_url": "https://packit.dev/",
        "downstream_package_name": "packit",
        "dist_git_namespace": "awesome",
        "specfile_path": "fedora/package.spec",
        "synced_files": [],
    }
    new_pc = PackageConfig.get_from_dict(di)
    pc = PackageConfig(
        dist_git_base_url="https://packit.dev/",
        downstream_package_name="packit",
        dist_git_namespace="awesome",
        specfile_path="fedora/package.spec",
        synced_files=[],
    )
    assert pc == new_pc
    assert pc.dist_git_package_url == "https://packit.dev/awesome/packit.git"
    assert new_pc.dist_git_package_url == "https://packit.dev/awesome/packit.git"
Beispiel #12
0
def test_get_output_from_action_defined(echo_cmd, expected_output):
    packit_repository_base = PackitRepositoryBase(
        config=flexmock(Config()),
        package_config=flexmock(PackageConfig(actions={ActionName.pre_sync: echo_cmd})),
    )

    packit_repository_base.local_project = flexmock(working_dir=".")

    result = packit_repository_base.get_output_from_action(ActionName.pre_sync)
    assert result == expected_output
Beispiel #13
0
def test_run_in_sandbox():
    packit_repository_base = PackitRepositoryBase(
        config=Config(),
        package_config=PackageConfig(actions={ActionName.pre_sync: "ls -lha"}),
    )
    packit_repository_base.config.actions_handler = "sandcastle"

    result = packit_repository_base.get_output_from_action(ActionName.pre_sync)
    assert "total 4.0K" in result
    assert "drwxr-xr-x. 1 root root" in result
Beispiel #14
0
def distgit_with_actions():
    return DistGit(
        config=flexmock(Config()),
        package_config=flexmock(
            PackageConfig(
                actions={
                    ActionName.pre_sync: "command --a",
                    ActionName.get_current_version: "command --b",
                })),
    )
Beispiel #15
0
def test_raw_files_to_sync(packit_files, expected):
    with cwd(TESTS_DIR):
        pc = PackageConfig(
            dist_git_base_url="https://packit.dev/",
            downstream_package_name="packit",
            dist_git_namespace="awesome",
            specfile_path="fedora/package.spec",
            synced_files=packit_files,
        )
        assert set(pc.synced_files.raw_files_to_sync) == set(expected)
Beispiel #16
0
def packit_repository_base():
    return PackitRepositoryBase(
        config=flexmock(),
        package_config=flexmock(
            PackageConfig(
                actions={
                    ActionName.pre_sync: "command --a",
                    ActionName.get_current_version: "command --b",
                })),
    )
Beispiel #17
0
def test_pr_exists(title, description, branch, prs, exists):
    local_project = LocalProject(
        git_project=flexmock(service="something", get_pr_list=lambda: prs),
        refresh=False,
    )
    distgit = DistGit(
        config=flexmock(Config()),
        package_config=flexmock(PackageConfig()),
        local_project=local_project,
    )
    assert distgit.pr_exists(title, description, branch) == exists
Beispiel #18
0
def test_package_config_not_equal(not_equal_package_config):
    j = get_job_config_full()
    j.metadata["b"] = "c"
    assert (not PackageConfig(
        specfile_path="fedora/package.spec",
        synced_files=SyncFilesConfig(files_to_sync=[
            SyncFilesItem(src="c", dest="c"),
            SyncFilesItem(src="d", dest="d"),
        ]),
        jobs=[j],
    ) == not_equal_package_config)
Beispiel #19
0
def upstream_with_actions():
    return Upstream(
        config=flexmock(Config()),
        package_config=flexmock(
            PackageConfig(
                actions={
                    ActionName.pre_sync: "command --a",
                    ActionName.get_current_version: "command --b",
                })),
        local_project=flexmock(repo_name=flexmock()),
    )
Beispiel #20
0
def test_koji_targets_overrides(jobs, job_config_trigger_type,
                                targets_override, build_targets):
    koji_build_helper = KojiBuildJobHelper(
        service_config=flexmock(),
        package_config=PackageConfig(jobs=jobs),
        job_config=jobs[0],
        project=flexmock(),
        metadata=flexmock(),
        db_trigger=flexmock(job_config_trigger_type=job_config_trigger_type),
        targets_override=targets_override,
    )
    assert koji_build_helper.build_targets == build_targets
Beispiel #21
0
def test_base_push_good(upstream_distgit_remote):
    _, distgit, _ = upstream_distgit_remote
    b = PackitRepositoryBase(config=Config(), package_config=PackageConfig())
    b.local_project = LocalProject(
        working_dir=str(distgit),
        git_url="https://github.com/packit-service/lol")
    flexmock(
        LocalProject,
        push=lambda *args, **kwargs:
        [PushInfo(PushInfo.FAST_FORWARD, None, None, None, None)],
    )
    b.push("master")
Beispiel #22
0
    def test_download_remote_sources_via_spec(self):
        """
        Use case: package_config.sources and Source0 are out of sync,
        make sure packit downloads correct archive specifiec in the spec file
        """
        # we should use an actual git.centos.org url but we'd store the tarball in our history
        # which we don't want I'd say
        # "https://git.centos.org/sources/rsync/c8s/82e7829c0b3cefbd33c233005341e2073c425629"
        git_centos_org_url = "https://example.org/"
        package_config = PackageConfig(
            specfile_path="rsync.spec",
            sources=[
                SourcesItem(
                    path="rsync-3.1.2.tar.gz",
                    url=git_centos_org_url,
                ),
            ],
            jobs=[],
        )
        # same drill here, let's not store tarballs in our git-history
        # source = "https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz"
        source = "https://httpbin.org/anything/rsync-3.1.3.tar.gz"

        base_git = PackitRepositoryBase(config=flexmock(),
                                        package_config=package_config)
        specfile_content = ("Name: rsync\n"
                            "Version: 3.1.3\n"
                            "Release: 1\n"
                            f"Source0: {source}\n"
                            "License: GPLv3+\n"
                            "Summary: rsync\n"
                            "%description\nrsync\n")
        tmp = Path(self.static_tmp)
        spec_path = tmp / "rsync.spec"
        spec_path.write_text(specfile_content)
        specfile = Specfile(spec_path, sourcedir=tmp, autosave=True)
        flexmock(base_git).should_receive("specfile").and_return(specfile)

        def mocked_is_file():
            import inspect

            # return False only if Path.is_file() is called directly from within
            # the download_remote_sources() method
            # this is necessary because specfile relies on Path.is_file() as well
            return inspect.stack()[3].function != "download_remote_sources"

        flexmock(Path).should_receive("is_file").replace_with(mocked_is_file)

        base_git.download_remote_sources()

        expected_path = tmp / "rsync-3.1.3.tar.gz"
        assert Path(expected_path).exists()
Beispiel #23
0
def test_check_copr_build_updated():
    flexmock(CoprBuildModel).should_receive("get_by_build_id").and_return()
    flexmock(CoprBuildModel).should_receive("get_all_by_build_id").with_args(
        1).and_return([
            flexmock(
                status="pending",
                target="the-target",
                owner="the-owner",
                project_name="the-project-name",
                commit_sha="123456",
                job_trigger=flexmock(type=JobTriggerModelType.pull_request).
                should_receive("get_trigger_object").and_return(
                    flexmock(
                        project=flexmock(
                            repo_name="repo_name",
                            namespace="the-namespace",
                            project_url=
                            "https://github.com/the-namespace/repo_name",
                        ),
                        pr_id=5,
                        job_config_trigger_type=JobConfigTriggerType.
                        pull_request,
                        id=123,
                    )).mock(),
                srpm_build=flexmock(url=None).should_receive(
                    "set_url").with_args("https://some.host/my.srpm").mock(),
            )
        ])
    flexmock(Client).should_receive("create_from_config_file").and_return(
        flexmock(
            build_proxy=flexmock().should_receive("get").with_args(
                1).and_return(
                    flexmock(
                        ended_on=True,
                        state="completed",
                        source_package={
                            "name": "source_package_name",
                            "url": "https://some.host/my.srpm",
                        },
                    )).mock(),
            build_chroot_proxy=flexmock().should_receive("get").with_args(
                1, "the-target").and_return(
                    flexmock(ended_on="timestamp", state="completed")).mock(),
        ))
    flexmock(AbstractCoprBuildEvent).should_receive(
        "get_package_config").and_return(
            PackageConfig(jobs=[
                JobConfig(type=JobType.build,
                          trigger=JobConfigTriggerType.pull_request)
            ]))
    flexmock(CoprBuildEndHandler).should_receive("run").and_return().once()
    assert check_copr_build(build_id=1)
Beispiel #24
0
def test_get_output_from_action_defined():
    echo_cmd = "echo 'hello world'"

    packit_repository_base = PackitRepositoryBase(
        config=flexmock(),
        package_config=flexmock(
            PackageConfig(actions={ActionName.pre_sync: echo_cmd})),
    )

    packit_repository_base.local_project = flexmock(working_dir=".")

    result = packit_repository_base.get_output_from_action(ActionName.pre_sync)
    assert result == "hello world\n"
Beispiel #25
0
def packit_repository_base_with_sandcastle_object(tmp_path):
    c = Config()
    c.command_handler = RunCommandType.sandcastle
    b = PackitRepositoryBase(
        config=c,
        package_config=PackageConfig(
            actions={
                ActionName.pre_sync: "command -a",
                ActionName.get_current_version: "command -b",
            }),
    )
    b.local_project = LocalProject(working_dir=tmp_path)
    return b
def test_targets(jobs, trigger, build_targets, test_targets):
    copr_build_handler = CoprBuildJobHelper(
        config=flexmock(),
        package_config=PackageConfig(jobs=jobs),
        project=flexmock(),
        event=flexmock(trigger=trigger),
    )

    assert copr_build_handler.package_config.jobs
    assert [j.type for j in copr_build_handler.package_config.jobs]

    assert set(copr_build_handler.build_chroots) == build_targets
    assert set(copr_build_handler.tests_chroots) == test_targets
Beispiel #27
0
def test_base_push_bad(upstream_distgit_remote):
    _, distgit, _ = upstream_distgit_remote
    b = PackitRepositoryBase(config=Config(), package_config=PackageConfig())
    b.local_project = LocalProject(
        working_dir=str(distgit),
        git_url="https://github.com/packit-service/lol")
    flexmock(
        LocalProject,
        push=lambda *args, **kwargs:
        [PushInfo(PushInfo.REMOTE_REJECTED, None, None, None, None)],
    )
    with pytest.raises(PackitException) as e:
        b.push("master")
    assert "unable to push" in str(e.value)
Beispiel #28
0
def test_existing_pr(title, description, branch, prs, exists):
    local_project = LocalProject(
        git_project=flexmock(service="something", get_pr_list=lambda: prs),
        refresh=False,
    )
    distgit = DistGit(
        config=flexmock(Config()),
        package_config=flexmock(PackageConfig()),
        local_project=local_project,
    )
    pr = distgit.existing_pr(title, description, branch)
    if exists:
        assert pr is not None
    else:
        assert pr is None
Beispiel #29
0
def test_targets(jobs, job_config_trigger_type, build_chroots, test_chroots):
    copr_build_helper = CoprBuildJobHelper(
        service_config=flexmock(),
        package_config=PackageConfig(jobs=jobs),
        job_config=jobs[0],  # BuildHelper looks at all jobs in the end
        project=flexmock(),
        metadata=flexmock(pr_id=None),
        db_trigger=flexmock(job_config_trigger_type=job_config_trigger_type),
    )

    assert copr_build_helper.package_config.jobs
    assert [j.type for j in copr_build_helper.package_config.jobs]

    assert copr_build_helper.configured_build_targets == build_chroots
    assert copr_build_helper.configured_tests_targets == test_chroots
Beispiel #30
0
def test_get_output_from_action_defined_in_sandcastle():
    echo_cmd = "hello world"
    flexmock(Sandcastle).should_receive("get_api_client")
    flexmock(Sandcastle).should_receive("is_pod_already_deployed").and_return(True)
    c = Config()
    c.command_handler = RunCommandType.sandcastle
    packit_repository_base = PackitRepositoryBase(
        config=c, package_config=PackageConfig(actions={ActionName.pre_sync: echo_cmd})
    )
    packit_repository_base.local_project = LocalProject()

    flexmock(Sandcastle).should_receive("run")
    flexmock(Sandcastle).should_receive("exec").and_return(echo_cmd)
    result = packit_repository_base.get_output_from_action(ActionName.pre_sync)
    assert result == echo_cmd