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)
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)
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)
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)
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)
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)
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)
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")
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
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" )
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)
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)
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)
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)
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)