blob: cd2f8ae88c72abd79b259579109a563cd77f9e6a [file] [log] [blame] [edit]
#!/usr/bin/env vpython3
# Copyright 2024 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for run.py"""
import argparse
import logging
import unittest
from unittest import mock
import run
class ParseArgsTest(unittest.TestCase):
def testRunModes(self):
argv = [
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'compile',
]
args = run.parse_args(argv)
self.assertEqual(args.run_mode, 'compile')
argv = [
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'wrong-mode',
]
# Invalid run_mode choice should make the parser error out.
with self.assertRaises(SystemExit):
args = run.parse_args(argv)
argv = [
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
]
# No run_mode choice should make the parser error out.
with self.assertRaises(SystemExit):
args = run.parse_args(argv)
def testPrintSurvey(self):
patch_random = mock.patch('random.random')
mock_random = patch_random.start()
mock_random.return_value = 0.005
with self.assertLogs() as info_log:
run.maybe_print_survey_link()
self.assertIn(
'INFO:root:Help us improve by sharing your feedback in this short '
'survey: https://forms.gle/tA41evzW5goqR5WF9', info_log.output)
# No logs to the mock result in an exception trying to assert
# Verify nothing new is logged instead
mock_random.return_value = 0.051
with self.assertLogs() as info_log:
logging.info('')
run.maybe_print_survey_link()
self.assertEqual(
['INFO:root:'],
info_log.output,
)
mock_random.stop()
def testTests(self):
argv = [
'-B',
'bucket',
'-b',
'builder',
'test',
]
# No test should make the parser error out.
with self.assertRaises(SystemExit):
args = run.parse_args(argv)
argv = [
'-B',
'bucket',
'-b',
'builder',
'-t',
'test1',
'-t',
'test2',
'test',
'--',
'--gtest_repeat=100',
]
args = run.parse_args(argv)
self.assertEqual(args.tests, ['test1', 'test2'])
self.assertEqual(args.run_mode, 'test')
self.assertEqual(args.additional_test_args, ['--gtest_repeat=100'])
def testProject(self):
argv = [
'-p',
'some-weird-project',
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'compile',
]
# Unknown project should make the parser error out.
with self.assertRaises(SystemExit):
args = run.parse_args(argv)
argv = [
'-p',
'chrome-m123xyz',
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'compile',
]
# Wrong milestone project format should make the parser error out.
with self.assertRaises(SystemExit):
args = run.parse_args(argv)
argv = [
'-p',
'chromium-m123',
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'compile',
]
# 'chromium123' should get corrected to just 'chromium'.
args = run.parse_args(argv)
self.assertEqual(args.project, 'chromium')
argv = [
'-p',
'chromium',
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'-d',
'foo:bar',
'compile',
]
# Dimensions with 'compile' should error out.
with self.assertRaises(SystemExit):
args = run.parse_args(argv)
argv = [
'-p',
'chromium',
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'-d',
'foobar',
'test',
]
# Bad dimension arg should error out.
with self.assertRaises(SystemExit):
args = run.parse_args(argv)
argv = [
'-p',
'chromium',
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'-d',
'foo=bar',
'test',
]
# Key=Value dimension passes the regex.
args = run.parse_args(argv)
self.assertEqual(args.dimensions, ['foo=bar'])
argv = [
'-p',
'chromium',
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'-d',
'foo=',
'test',
]
# Key= dimension passes the regex.
args = run.parse_args(argv)
self.assertEqual(args.dimensions, ['foo='])
argv = [
'-p',
'chromium',
'-B',
'bucket',
'-b',
'builder',
'-t',
'some_test',
'-d',
'foo=bar=baz',
'test',
]
# Accept dimension value with =.
args = run.parse_args(argv)
self.assertEqual(args.dimensions, ['foo=bar=baz'])
if __name__ == '__main__':
unittest.main()