blob: a2f16b6f3027387cc919671c23c47811754ead0b [file] [log] [blame]
# Copyright 2025 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import annotations
import json
from unittest import mock
import requests
from crossbench.exception import MultiException
from crossbench.pinpoint.api import PINPOINT_START_JOB_API_URL
from crossbench.pinpoint.config import PinpointTryJobConfig
from crossbench.pinpoint.start_job import start_job
from tests import test_helper
from tests.crossbench.pinpoint.requests_mixin import MockRequestsMixin
class StartJobTest(MockRequestsMixin):
def setUp(self):
super().setUp()
def mock_post_side_effect(url, *args, **kwargs):
self.assertEqual(url, PINPOINT_START_JOB_API_URL,
f"Unexpected URL called: {url}")
mock_response = mock.Mock()
mock_response.json.return_value = {
"jobId": "123",
"jobUrl": "https://example.com/123"
}
mock_response.raise_for_status.return_value = None
return mock_response
self.mock_post.side_effect = mock_post_side_effect
def test_start_job_correct_parameters(self):
start_job(
config=PinpointTryJobConfig.parse(
json.dumps({
"benchmark": "test_benchmark",
"bot": "test_bot",
"story": "test_story",
"story_tags": "test_tag",
"repeat": 42,
"bug": 123456789,
"base": {
"commit": "HEAD",
"patch": "https://chromium-review.googlesource.com/12345",
"flags": "--test-flag --js-flags=--base-js-flag",
},
"experiment": {
"commit": "abcd1234",
"patch": "https://chromium-review.googlesource.com/67890",
"flags": "--js-flags=--exp-js-flag",
}
})))
expected_payload = {
"comparison_mode":
"try",
"benchmark":
"test_benchmark",
"configuration":
"test_bot",
"story":
"test_story",
"story_tags":
"test_tag",
"initial_attempt_count":
42,
"bug_id":
123456789,
"base_git_hash":
"HEAD",
"end_git_hash":
"abcd1234",
"base_patch":
"https://chromium-review.googlesource.com/12345",
"experiment_patch":
"https://chromium-review.googlesource.com/67890",
"base_extra_args":
'--extra-browser-args="--test-flag --js-flags=--base-js-flag"',
"experiment_extra_args":
'--extra-browser-args="--js-flags=--exp-js-flag"',
}
self.mock_post.assert_called_with(
PINPOINT_START_JOB_API_URL, data=expected_payload)
def test_start_job_api_error(self):
self.mock_post.side_effect = requests.exceptions.HTTPError("API Error")
with self.assertRaises(MultiException):
start_job(
PinpointTryJobConfig(
benchmark="test_benchmark",
bot="test_bot",
))
if __name__ == "__main__":
test_helper.run_pytest(__file__)