def test_copr_build_start(copr_build_start, pc_build_pr, copr_build_pr):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprHelper).should_receive("get_copr_client").and_return(
        Client(
            config={
                "copr_url": "https://copr.fedorainfracloud.org",
                "username": "******",
            }))
    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        pc_build_pr)
    flexmock(CoprBuildJobHelper).should_receive("get_build_check").and_return(
        EXPECTED_BUILD_CHECK_NAME)

    flexmock(CoprBuildModel).should_receive("get_by_build_id").and_return(
        copr_build_pr)
    url = get_log_url(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)

    copr_build_pr.should_receive("set_status").with_args("pending").once()
    copr_build_pr.should_receive("set_build_logs_url")

    # check if packit-service set correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="RPM build has started...",
        url=url,
        check_names=EXPECTED_BUILD_CHECK_NAME,
    ).once()

    steve.process_message(copr_build_start)
Example #2
0
def test_copr_build_start(copr_build_start, pc_build_pr, copr_build_pr):
    steve = SteveJobs()
    flexmock(GithubProject).should_receive("is_private").and_return(False)
    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        pc_build_pr)
    flexmock(CoprBuildJobHelper).should_receive("get_build_check").and_return(
        EXPECTED_BUILD_CHECK_NAME)

    flexmock(CoprBuildModel).should_receive("get_by_build_id").and_return(
        copr_build_pr)
    url = get_copr_build_log_url_from_flask(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)

    copr_build_pr.should_receive("set_start_time").once()
    copr_build_pr.should_receive("set_status").with_args("pending").once()
    copr_build_pr.should_receive("set_build_logs_url")

    # check if packit-service set correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="RPM build is in progress...",
        url=url,
        check_names=EXPECTED_BUILD_CHECK_NAME,
    ).once()

    steve.process_message(copr_build_start)
Example #3
0
def test_copr_build_not_comment_on_success(copr_build_end, pc_build_pr,
                                           copr_build_pr):
    steve = SteveJobs()
    flexmock(GithubProject).should_receive("is_private").and_return(False)
    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        pc_build_pr)
    flexmock(CoprBuildJobHelper).should_receive("get_build_check").and_return(
        EXPECTED_BUILD_CHECK_NAME)

    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_packit_comment_with_congratulation").and_return(True)
    flexmock(GithubProject).should_receive("pr_comment").never()

    flexmock(CoprBuildModel).should_receive("get_by_build_id").and_return(
        copr_build_pr)
    copr_build_pr.should_receive("set_status").with_args("success")
    copr_build_pr.should_receive("set_end_time").once()
    url = get_copr_build_log_url_from_flask(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)

    # check if packit-service set correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.success,
        description="RPMs were built successfully.",
        url=url,
        check_names=CoprBuildJobHelper.get_build_check(
            copr_build_end["chroot"]),
    ).once()

    # skip testing farm
    flexmock(CoprBuildJobHelper).should_receive("job_tests").and_return(None)

    steve.process_message(copr_build_end)
Example #4
0
def process_message(event: dict, topic: str = None):
    try:
        steve = SteveJobs()
        steve.process_message(event=event, topic=topic)
    except Exception as ex:
        logger.error("There was an exception while processing the event.")
        logger.exception(ex)
Example #5
0
def test_copr_build_just_tests_defined(copr_build_start, pc_tests, copr_build):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprHelper).should_receive("get_copr_client").and_return(
        Client(
            config={
                "copr_url": "https://copr.fedorainfracloud.org",
                "username": "******",
            }))
    flexmock(CoprBuildJobHelper).should_receive("copr_build_model").and_return(
        flexmock())
    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        pc_tests)
    flexmock(TestingFarmJobHelper).should_receive(
        "get_build_check").and_return(EXPECTED_BUILD_CHECK_NAME)
    flexmock(TestingFarmJobHelper).should_receive("get_test_check").and_return(
        EXPECTED_TESTING_FARM_CHECK_NAME)

    flexmock(CoprBuild).should_receive("get_by_build_id").and_return(
        copr_build)
    flexmock(CoprBuildDB).should_receive("get_build").and_return({
        "commit_sha":
        "XXXXX",
        "pr_id":
        24,
        "repo_name":
        "hello-world",
        "repo_namespace":
        "packit-service",
        "ref":
        "XXXX",
        "https_url":
        "https://github.com/packit-service/hello-world",
    })

    url = get_log_url(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)

    flexmock(CoprBuild).should_receive("set_status").with_args("pending")
    flexmock(CoprBuild).should_receive("set_build_logs_url")
    # check if packit-service sets the correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="RPM build has started...",
        url=url,
        check_names=EXPECTED_BUILD_CHECK_NAME,
    ).never()

    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="RPM build has started...",
        url=url,
        check_names=TestingFarmJobHelper.get_test_check(
            copr_build_start["chroot"]),
    ).once()

    steve.process_message(copr_build_start)
Example #6
0
def test_copr_build_not_comment_on_success(copr_build_end, pc_build_pr,
                                           copr_build):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprHelper).should_receive("get_copr_client").and_return(
        Client(
            config={
                "copr_url": "https://copr.fedorainfracloud.org",
                "username": "******",
            }))
    flexmock(CoprBuildJobHelper).should_receive("copr_build_model").and_return(
        flexmock())
    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        pc_build_pr)
    flexmock(CoprBuildJobHelper).should_receive("get_build_check").and_return(
        EXPECTED_BUILD_CHECK_NAME)

    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_build_successful").and_return(True)
    flexmock(GithubProject).should_receive("pr_comment").never()

    flexmock(CoprBuild).should_receive("get_by_build_id").and_return(
        copr_build)
    flexmock(CoprBuild).should_receive("set_status").with_args("success")
    flexmock(CoprBuildDB).should_receive("get_build").and_return({
        "commit_sha":
        "XXXXX",
        "pr_id":
        24,
        "repo_name":
        "hello-world",
        "repo_namespace":
        "packit-service",
        "ref":
        "XXXX",
        "https_url":
        "https://github.com/packit-service/hello-world",
    })

    url = get_log_url(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)

    # check if packit-service set correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.success,
        description="RPMs were built successfully.",
        url=url,
        check_names=CoprBuildJobHelper.get_build_check(
            copr_build_end["chroot"]),
    ).once()

    # skip testing farm
    flexmock(CoprBuildJobHelper).should_receive("job_tests").and_return(None)

    steve.process_message(copr_build_end)
Example #7
0
def test_copr_build_start(copr_build_start, pc_build, copr_build):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprHelper).should_receive("get_copr_client").and_return(
        Client(
            config={
                "copr_url": "https://copr.fedorainfracloud.org",
                "username": "******",
            }))
    flexmock(CoprBuildJobHelper).should_receive("copr_build_model").and_return(
        flexmock())
    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        pc_build)
    flexmock(PRCheckName).should_receive("get_build_check").and_return(
        PACKIT_STG_CHECK)

    flexmock(CoprBuild).should_receive("get_by_build_id").and_return(
        copr_build)
    flexmock(CoprBuildDB).should_receive("get_build").and_return({
        "commit_sha":
        "XXXXX",
        "pr_id":
        24,
        "repo_name":
        "hello-world",
        "repo_namespace":
        "packit-service",
        "ref":
        "XXXX",
        "https_url":
        "https://github.com/packit-service/hello-world",
    })

    url = get_log_url(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)

    flexmock(CoprBuild).should_receive("set_status").with_args(
        "pending").once()
    flexmock(CoprBuild).should_receive("set_build_logs_url")
    # check if packit-service set correct PR status
    flexmock(BuildStatusReporter).should_receive("report").with_args(
        state="pending",
        description="RPM build has started...",
        url=url,
        check_names=PACKIT_STG_CHECK,
    ).once()

    steve.process_message(copr_build_start)
Example #8
0
def test_dist_git_push_release_handle(release_event):
    packit_yaml = (
        "{'specfile_path': '', 'synced_files': []"
        ", jobs: [{trigger: release, job: propose_downstream, metadata: {targets:[]}}]}"
    )
    flexmock(Github, get_repo=lambda full_name_or_id: None)
    flexmock(
        GithubProject,
        get_file_content=lambda path, ref: packit_yaml,
        full_repo_name="packit-service/hello-world",
    )
    flexmock(LocalProject, refresh_the_arguments=lambda: None)
    flexmock(Whitelist, check_and_report=True)
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    config = Config()
    config.command_handler_work_dir = SANDCASTLE_WORK_DIR
    flexmock(Config).should_receive("get_service_config").and_return(config)
    # it would make sense to make LocalProject offline
    flexmock(PackitAPI).should_receive("sync_release").with_args(
        dist_git_branch="master", version="0.3.0", create_pr=False).once()

    results = steve.process_message(release_event)
    assert "propose_downstream" in results.get("jobs", {})
    assert results.get("jobs", {}).get("propose_downstream", {}).get("success")
    assert results["trigger"] == str(JobTriggerType.release)
def test_copr_build_not_comment_on_success(copr_build_end):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        flexmock())
    flexmock(PRCheckName).should_receive("get_build_check").and_return(
        PACKIT_STG_CHECK)

    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_build_successful").and_return(True)
    flexmock(GithubProject).should_receive("pr_comment").never()

    flexmock(CoprBuildDB).should_receive("get_build").and_return({
        "commit_sha":
        "XXXXX",
        "pr_id":
        24,
        "repo_name":
        "hello-world",
        "repo_namespace":
        "packit-service",
        "ref":
        "XXXX",
        "https_url":
        "https://github.com/packit-service/hello-world",
    })

    url = (f"https://copr-be.cloud.fedoraproject.org/results/"
           f"packit/packit-service-hello-world-24-stg/fedora-rawhide-x86_64/"
           f"01044215-hello/builder-live.log.gz")
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)

    # check if packit-service set correct PR status
    flexmock(BuildStatusReporter).should_receive("report").with_args(
        state="success",
        description="RPMs were built successfully.",
        url=url,
        check_names=PACKIT_STG_CHECK,
    ).once()

    # skip testing farm
    flexmock(CoprBuildEndHandler).should_receive(
        "get_tests_for_build").and_return(None)

    steve.process_message(copr_build_end)
def test_copr_build_end(copr_build_end, pc_build_pr, copr_build_pr,
                        pc_comment_pr_succ, pr_comment_called):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprHelper).should_receive("get_copr_client").and_return(
        Client(
            config={
                "copr_url": "https://copr.fedorainfracloud.org",
                "username": "******",
            }))
    pc_build_pr.notifications.pull_request.successful_build = pc_comment_pr_succ
    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        pc_build_pr)
    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_build_successful").and_return(False)
    if pr_comment_called:
        flexmock(GithubProject).should_receive("pr_comment")
    else:
        flexmock(GithubProject).should_receive("pr_comment").never()

    flexmock(CoprBuildModel).should_receive("get_by_build_id").and_return(
        copr_build_pr)
    copr_build_pr.should_receive("set_status").with_args("success")
    url = get_log_url(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)
    # check if packit-service set correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.success,
        description="RPMs were built successfully.",
        url=url,
        check_names=CoprBuildJobHelper.get_build_check(
            copr_build_end["chroot"]),
    ).once()

    # skip testing farm
    flexmock(CoprBuildJobHelper).should_receive("job_tests").and_return(None)

    steve.process_message(copr_build_end)
def test_pr_comment_copr_build_handler(mock_pr_comment_functionality,
                                       pr_copr_build_comment_event):
    flexmock(CoprBuildHandler).should_receive("run_copr_build").and_return(
        HandlerResults(success=True, details={}))
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    results = steve.process_message(pr_copr_build_comment_event)
    assert results.get("jobs", {})
    assert "pull_request_action" in results.get("jobs", {})
    assert "created" in results.get("event", {}).get("action", None)
    assert results.get("event", {}).get("pr_id", None) == 9
    assert "comment" in results.get("trigger", None)
    assert results.get("event", {}).get("comment",
                                        None) == "/packit copr-build"
    assert results.get("jobs", {}).get("pull_request_action",
                                       {}).get("success")
Example #12
0
def test_issue_comment_propose_update_handler(
        mock_issue_comment_functionality, issue_comment_propose_update_event):
    flexmock(PackitAPI).should_receive("sync_release").and_return(
        HandlerResults(success=True, details={}))
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    results = steve.process_message(issue_comment_propose_update_event)
    assert results.get("jobs", {})
    assert "pull_request_action" in results.get("jobs", {})
    assert "created" in results.get("event", {}).get("action", None)
    assert results.get("event", {}).get("issue_id", None) == 512
    assert "comment" in results.get("trigger", None)
    assert results.get("event", {}).get("comment",
                                        None) == "/packit propose-update"
    assert results.get("jobs", {}).get("pull_request_action",
                                       {}).get("success")
def test_pr_comment_wrong_packit_command_handler(
        mock_pr_comment_functionality, pr_wrong_packit_comment_event):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)

    results = steve.process_message(pr_wrong_packit_comment_event)
    assert results.get("jobs", {})
    jobs = results.get("jobs", {})
    event = results.get("event", {})
    assert "pull_request_action" in jobs
    assert "created" in event.get("action", None)
    assert event.get("pr_id", None) == 9
    assert "comment" in results.get("trigger", None)
    assert event.get("comment", None) == "/packit foobar"
    assert not jobs.get("pull_request_action", {}).get("success")
    msg = "PR comment '/packit foobar' does not contain a valid packit-service command."
    assert jobs.get("pull_request_action", {}).get("details",
                                                   {}).get("msg") == msg
def test_pr_comment_empty_handler(mock_pr_comment_functionality,
                                  pr_empty_comment_event):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)

    results = steve.process_message(pr_empty_comment_event)
    assert results.get("jobs", {})
    jobs = results.get("jobs", {})
    event = results.get("event", {})
    assert "pull_request_action" in jobs
    assert "created" in event.get("action", None)
    assert event.get("pr_id", None) == 9
    assert "comment" in results.get("trigger", None)
    assert event.get("comment", None) == ""
    assert not jobs.get("pull_request_action", {}).get("success")
    msg = "PR comment '' is empty."
    assert jobs.get("pull_request_action", {}).get("details",
                                                   {}).get("msg") == msg
Example #15
0
def test_wrong_collaborator(pr_event):
    packit_yaml = (
        "{'specfile_path': '', 'synced_files': []"
        ", jobs: [{trigger: pull_request, job: copr_build, metadata: {targets:[]}}]}"
    )
    copr_dict = {
        "login": "******",
        "username": "******",
        "token": "apple",
        "copr_url": "https://copr.fedorainfracloud.org",
    }
    flexmock(Github, get_repo=lambda full_name_or_id: None)
    flexmock(
        GithubProject,
        get_file_content=lambda path, ref: packit_yaml,
        full_repo_name="packit-service/hello-world",
    )
    flexmock(GithubProject).should_receive("who_can_merge_pr").and_return({"foobar"})
    flexmock(BuildStatusReporter).should_receive("set_status").and_return(None)
    flexmock(
        LocalProject,
        refresh_the_arguments=lambda: None,
        checkout_pr=lambda full_name_or_id: None,
    )
    flexmock(CoprClient).should_receive("create_from_config_file").and_return(
        CoprClient(copr_dict)
    )
    flexmock(Whitelist, check_and_report=True)
    flexmock(Model, save=lambda: None)

    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    result = steve.process_message(pr_event)
    copr_build = result["jobs"]["copr_build"]
    assert not copr_build["success"]
    assert (
        copr_build["details"]["msg"]
        == "Only collaborators can trigger Packit-as-a-Service"
    )
Example #16
0
def test_copr_build_end_failed_testing_farm_no_json(copr_build_end,
                                                    copr_build):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprHelper).should_receive("get_copr_client").and_return(
        Client(
            config={
                "copr_url": "https://copr.fedorainfracloud.org",
                "username": "******",
            }))
    flexmock(CoprBuildJobHelper).should_receive("job_owner").and_return(
        "some-owner")
    flexmock(CoprBuildJobHelper).should_receive("copr_build_model").and_return(
        flexmock())
    config = PackageConfig(jobs=[
        JobConfig(
            type=JobType.copr_build,
            trigger=JobConfigTriggerType.pull_request,
            metadata={"targets": ["fedora-rawhide"]},
        ),
        JobConfig(
            type=JobType.tests,
            trigger=JobConfigTriggerType.pull_request,
            metadata={"targets": ["fedora-rawhide"]},
        ),
    ])

    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        config)
    flexmock(GithubTestingFarmHandler).should_receive(
        "get_package_config_from_repo").and_return(config)
    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_build_successful").and_return(False)
    flexmock(GithubProject).should_receive("pr_comment")

    flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(
        None)

    flexmock(CoprBuild).should_receive("get_by_build_id").and_return(
        copr_build)
    flexmock(CoprBuild).should_receive("set_status").with_args("success")
    flexmock(CoprBuildDB).should_receive("get_build").and_return({
        "commit_sha":
        "XXXXX",
        "pr_id":
        24,
        "repo_name":
        "hello-world",
        "repo_namespace":
        "packit-service",
        "ref":
        "XXXX",
        "https_url":
        "https://github.com/packit-service/hello-world",
    })

    url = get_log_url(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)
    # check if packit-service set correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.success,
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_BUILD_CHECK_NAME,
    ).once()

    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
    ).once()

    flexmock(TestingFarmJobHelper).should_receive(
        "send_testing_farm_request").and_return(
            RequestResponse(
                status_code=400,
                ok=False,
                content="some text error".encode(),
                reason="some text error",
                json=None,
            ))

    flexmock(CoprBuild).should_receive("set_status").with_args("failure")
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="Build succeeded. Submitting the tests ...",
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
        url="",
    ).once()
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.failure,
        description="Failed to submit tests: some text error",
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
        url="",
    ).once()

    steve.process_message(copr_build_end)
Example #17
0
def test_copr_build_end_testing_farm(copr_build_end, copr_build):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprHelper).should_receive("get_copr_client").and_return(
        Client(
            config={
                "copr_url": "https://copr.fedorainfracloud.org",
                "username": "******",
            }))
    flexmock(CoprBuildJobHelper).should_receive("job_owner").and_return(
        "some-owner")
    flexmock(CoprBuildJobHelper).should_receive("copr_build_model").and_return(
        flexmock())
    config = PackageConfig(jobs=[
        JobConfig(
            type=JobType.copr_build,
            trigger=JobConfigTriggerType.pull_request,
            metadata={"targets": ["fedora-rawhide"]},
        ),
        JobConfig(
            type=JobType.tests,
            trigger=JobConfigTriggerType.pull_request,
            metadata={"targets": ["fedora-rawhide"]},
        ),
    ])

    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        config)
    flexmock(GithubTestingFarmHandler).should_receive(
        "get_package_config_from_repo").and_return(config)
    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_build_successful").and_return(False)
    flexmock(GithubProject).should_receive("pr_comment")

    flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(
        None)

    flexmock(CoprBuild).should_receive("get_by_build_id").and_return(
        copr_build)
    flexmock(CoprBuild).should_receive("set_status").with_args("success")
    flexmock(CoprBuildDB).should_receive("get_build").and_return({
        "commit_sha":
        "XXXXX",
        "pr_id":
        24,
        "repo_name":
        "hello-world",
        "repo_namespace":
        "packit-service",
        "ref":
        "XXXX",
        "https_url":
        "https://github.com/packit-service/hello-world",
    })

    url = "https://localhost:5000/copr-build/1/logs"
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)
    # check if packit-service set correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.success,
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_BUILD_CHECK_NAME,
    ).once()

    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
    ).once()

    flexmock(uuid).should_receive("uuid4").and_return(
        uuid.UUID("5e8079d8-f181-41cf-af96-28e99774eb68"))
    payload: dict = {
        "pipeline": {
            "id": "5e8079d8-f181-41cf-af96-28e99774eb68"
        },
        "api": {
            "token": ""
        },
        "response-url": "https://stg.packit.dev/api/testing-farm/results",
        "artifact": {
            "repo-name": "bar",
            "repo-namespace": "foo",
            "copr-repo-name": "some-owner/foo-bar-123-stg",
            "copr-chroot": "fedora-rawhide-x86_64",
            "commit-sha": "0011223344",
            "git-url": "https://github.com/foo/bar.git",
            "git-ref": "0011223344",
        },
    }

    flexmock(TestingFarmJobHelper).should_receive(
        "send_testing_farm_request").with_args(
            TESTING_FARM_TRIGGER_URL, "POST", {},
            json.dumps(payload)).and_return(
                RequestResponse(
                    status_code=200,
                    ok=True,
                    content='{"url": "some-url"}'.encode(),
                    json={"url": "some-url"},
                ))

    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="Build succeeded. Submitting the tests ...",
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
        url="",
    ).once()
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="Tests are running ...",
        url="some-url",
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
    ).once()

    steve.process_message(copr_build_end)
Example #18
0
def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr):
    steve = SteveJobs()
    flexmock(GithubProject).should_receive("is_private").and_return(False)
    flexmock(TestingFarmJobHelper).should_receive("job_owner").and_return(
        "some-owner")
    flexmock(TestingFarmJobHelper).should_receive("job_project").and_return(
        "foo-bar-123-stg")
    config = PackageConfig(jobs=[
        JobConfig(
            type=JobType.copr_build,
            trigger=JobConfigTriggerType.pull_request,
            metadata=JobMetadataConfig(targets=["fedora-rawhide"]),
        ),
        JobConfig(
            type=JobType.tests,
            trigger=JobConfigTriggerType.pull_request,
            metadata=JobMetadataConfig(targets=["fedora-rawhide"]),
        ),
    ])

    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        config)
    flexmock(PackageConfigGetter).should_receive(
        "get_package_config_from_repo").and_return(config)
    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_packit_comment_with_congratulation").and_return(False)
    flexmock(GithubProject).should_receive("pr_comment")

    flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(
        None)

    flexmock(CoprBuildModel).should_receive("get_by_build_id").and_return(
        copr_build_pr)
    copr_build_pr.should_receive("set_status").with_args("success")
    copr_build_pr.should_receive("set_end_time").once()
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)
    # check if packit-service set correct PR status
    url = get_copr_build_log_url_from_flask(1)
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.success,
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_BUILD_CHECK_NAME,
    ).once()

    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
    ).once()

    pipeline_id = "5e8079d8-f181-41cf-af96-28e99774eb68"
    flexmock(uuid).should_receive("uuid4").and_return(uuid.UUID(pipeline_id))
    payload: dict = {
        "pipeline": {
            "id": pipeline_id
        },
        "api": {
            "token": ""
        },
        "response-url": "https://stg.packit.dev/api/testing-farm/results",
        "artifact": {
            "repo-name": "bar",
            "repo-namespace": "foo",
            "copr-repo-name": "some-owner/foo-bar-123-stg",
            "copr-chroot": "fedora-rawhide-x86_64",
            "commit-sha": "0011223344",
            "git-url": "https://github.com/foo/bar.git",
            "git-ref": "0011223344",
        },
    }
    trigger = flexmock(
        job_config_trigger_type=JobConfigTriggerType.pull_request,
        job_trigger_model_type=JobTriggerModelType.pull_request,
    )
    flexmock(CoprBuildEvent).should_receive("db_trigger").and_return(trigger)

    tft_test_run_model = flexmock()
    tft_test_run_model.should_receive("set_status").with_args(
        TestingFarmResult.running).and_return().once()
    flexmock(TFTTestRunModel).should_receive("create").with_args(
        pipeline_id=pipeline_id,
        commit_sha="0011223344",
        status=TestingFarmResult.new,
        target="fedora-rawhide-x86_64",
        trigger_model=trigger,
        web_url=None,
    ).and_return(tft_test_run_model)

    flexmock(TestingFarmJobHelper).should_receive(
        "send_testing_farm_request").with_args(
            TESTING_FARM_TRIGGER_URL, "POST", {},
            json.dumps(payload)).and_return(
                RequestResponse(
                    status_code=200,
                    ok=True,
                    content='{"url": "some-url"}'.encode(),
                    json={"url": "some-url"},
                ))

    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="Build succeeded. Submitting the tests ...",
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
        url="",
    ).once()
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="Tests are running ...",
        url="some-url",
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
    ).once()

    steve.process_message(copr_build_end)
Example #19
0
def test_copr_build_end_failed_testing_farm_no_json(copr_build_end,
                                                    copr_build_pr):
    steve = SteveJobs()
    flexmock(GithubProject).should_receive("is_private").and_return(False)
    flexmock(TestingFarmJobHelper).should_receive("job_owner").and_return(
        "some-owner")
    flexmock(TestingFarmJobHelper).should_receive("job_project").and_return(
        "foo-bar-123-stg")
    config = PackageConfig(jobs=[
        JobConfig(
            type=JobType.copr_build,
            trigger=JobConfigTriggerType.pull_request,
            metadata=JobMetadataConfig(targets=["fedora-rawhide"]),
        ),
        JobConfig(
            type=JobType.tests,
            trigger=JobConfigTriggerType.pull_request,
            metadata=JobMetadataConfig(targets=["fedora-rawhide"]),
        ),
    ])

    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        config)
    flexmock(PackageConfigGetter).should_receive(
        "get_package_config_from_repo").and_return(config)
    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_packit_comment_with_congratulation").and_return(False)
    flexmock(GithubProject).should_receive("pr_comment")

    flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(
        None)

    flexmock(CoprBuildModel).should_receive("get_by_build_id").and_return(
        copr_build_pr)
    copr_build_pr.should_receive("set_status").with_args("success")
    copr_build_pr.should_receive("set_end_time").once()
    url = get_copr_build_log_url_from_flask(1)
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)
    # check if packit-service set correct PR status
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.success,
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_BUILD_CHECK_NAME,
    ).once()

    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
    ).once()

    flexmock(TestingFarmJobHelper).should_receive(
        "send_testing_farm_request").and_return(
            RequestResponse(
                status_code=400,
                ok=False,
                content="some text error".encode(),
                reason="some text error",
                json=None,
            ))

    flexmock(CoprBuildModel).should_receive("set_status").with_args("failure")
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.pending,
        description="Build succeeded. Submitting the tests ...",
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
        url="",
    ).once()
    flexmock(StatusReporter).should_receive("report").with_args(
        state=CommitStatus.failure,
        description="Failed to submit tests: some text error",
        check_names=EXPECTED_TESTING_FARM_CHECK_NAME,
        url="",
    ).once()

    trigger = flexmock(
        job_config_trigger_type=JobConfigTriggerType.pull_request,
        job_trigger_model_type=JobTriggerModelType.pull_request,
    )
    flexmock(CoprBuildEvent).should_receive("db_trigger").and_return(trigger)

    tft_test_run_model = flexmock()
    tft_test_run_model.should_receive("set_status").with_args(
        TestingFarmResult.error).and_return().once()
    pipeline_id = "5e8079d8-f181-41cf-af96-28e99774eb68"
    flexmock(uuid).should_receive("uuid4").and_return(uuid.UUID(pipeline_id))
    flexmock(TFTTestRunModel).should_receive("create").with_args(
        pipeline_id=pipeline_id,
        commit_sha="0011223344",
        status=TestingFarmResult.new,
        target="fedora-rawhide-x86_64",
        trigger_model=trigger,
        web_url=None,
    ).and_return(tft_test_run_model)

    steve.process_message(copr_build_end)
Example #20
0
def test_copr_build_end_testing_farm(copr_build_end, copr_build):
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    flexmock(CoprHelper).should_receive("get_copr_client").and_return(
        Client(
            config={
                "copr_url": "https://copr.fedorainfracloud.org",
                "username": "******",
            }))
    flexmock(CoprBuildJobHelper).should_receive("copr_build_model").and_return(
        flexmock())
    config = PackageConfig(jobs=[
        JobConfig(
            job=JobType.copr_build,
            trigger=JobTriggerType.pull_request,
            metadata={"targets": ["fedora-rawhide"]},
        ),
        JobConfig(
            job=JobType.tests,
            trigger=JobTriggerType.pull_request,
            metadata={"targets": ["fedora-rawhide"]},
        ),
    ])

    flexmock(CoprBuildEvent).should_receive("get_package_config").and_return(
        config)
    flexmock(GithubTestingFarmHandler).should_receive(
        "get_package_config_from_repo").and_return(config)
    flexmock(CoprBuildEndHandler).should_receive(
        "was_last_build_successful").and_return(False)
    flexmock(GithubProject).should_receive("pr_comment")

    flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(
        None)

    flexmock(CoprBuild).should_receive("get_by_build_id").and_return(
        copr_build)
    flexmock(CoprBuild).should_receive("set_status").with_args("success")
    flexmock(CoprBuildDB).should_receive("get_build").and_return({
        "commit_sha":
        "XXXXX",
        "pr_id":
        24,
        "repo_name":
        "hello-world",
        "repo_namespace":
        "packit-service",
        "ref":
        "XXXX",
        "https_url":
        "https://github.com/packit-service/hello-world",
    })

    url = "https://localhost:5000/copr-build/1/logs"
    flexmock(requests).should_receive("get").and_return(requests.Response())
    flexmock(
        requests.Response).should_receive("raise_for_status").and_return(None)
    # check if packit-service set correct PR status
    flexmock(BuildStatusReporter).should_receive("report").with_args(
        state="success",
        description="RPMs were built successfully.",
        url=url,
        check_names=EXPECTED_CHECK_NAME,
    ).once()

    flexmock(BuildStatusReporter).should_receive("report").with_args(
        state="success",
        description="RPMs were built successfully.",
        url=url,
        check_names=f"{PACKIT_STG_TESTING_FARM_CHECK}-{CHROOT}",
    ).once()

    flexmock(TestingFarmJobHelper).should_receive(
        "send_testing_farm_request").and_return(
            RequestResponse(
                status_code=200,
                ok=True,
                content='{"url": "some-url"}'.encode(),
                json={"url": "some-url"},
            ))

    flexmock(BuildStatusReporter).should_receive("report").with_args(
        state="pending",
        description="Build succeeded. Submitting the tests ...",
        check_names=f"{PACKIT_STG_TESTING_FARM_CHECK}-{CHROOT}",
    ).once()
    flexmock(BuildStatusReporter).should_receive("report").with_args(
        state="pending",
        description="Tests are running ...",
        url="some-url",
        check_names=f"{PACKIT_STG_TESTING_FARM_CHECK}-{CHROOT}",
    ).once()

    steve.process_message(copr_build_end)