179 lines
6.3 KiB
Python
179 lines
6.3 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
#
|
||
|
|
# Copyright 2022 The Chromium Authors
|
||
|
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
|
# found in the LICENSE file.
|
||
|
|
|
||
|
|
import unittest
|
||
|
|
from unittest import mock
|
||
|
|
|
||
|
|
import generate_skylab_deps
|
||
|
|
|
||
|
|
TAST_CONTROL = '''
|
||
|
|
# Ignore comments
|
||
|
|
tast_disabled_tests_from_chrome_all = [
|
||
|
|
"example.all.test1",
|
||
|
|
]
|
||
|
|
tast_disabled_tests_from_chrome_m100 = [
|
||
|
|
"example.m100.test1",
|
||
|
|
]
|
||
|
|
tast_disabled_tests_from_lacros_all = []
|
||
|
|
'''
|
||
|
|
|
||
|
|
TAST_EXPR = '"group:mainline" && "dep:chrome" && !informational'
|
||
|
|
|
||
|
|
REQUIRED_ARGS = ['script', 'generate-filter', '--output', 'output.filter']
|
||
|
|
|
||
|
|
|
||
|
|
class GenerateSkylabDepsTest(unittest.TestCase):
|
||
|
|
|
||
|
|
def testTastExpr(self):
|
||
|
|
file_mock = mock.mock_open(read_data=TAST_CONTROL)
|
||
|
|
args = REQUIRED_ARGS + ['--tast-expr', TAST_EXPR]
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', args),\
|
||
|
|
mock.patch('builtins.open', file_mock),\
|
||
|
|
mock.patch('os.chmod'),\
|
||
|
|
mock.patch("json.dump", mock.MagicMock()) as dump:
|
||
|
|
generate_skylab_deps.main()
|
||
|
|
filter_dict = dump.call_args[0][0]
|
||
|
|
self.assertEqual(filter_dict['default'], '(%s)' % TAST_EXPR)
|
||
|
|
|
||
|
|
def testTastExprAndDisableTests(self):
|
||
|
|
file_mock = mock.mock_open(read_data=TAST_CONTROL)
|
||
|
|
args = REQUIRED_ARGS + [
|
||
|
|
'--tast-expr', TAST_EXPR, '--disabled-tests', 'disabled.test1',
|
||
|
|
'--disabled-tests', 'disabled.test2'
|
||
|
|
]
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', args),\
|
||
|
|
mock.patch('builtins.open', file_mock),\
|
||
|
|
mock.patch('os.chmod'),\
|
||
|
|
mock.patch("json.dump", mock.MagicMock()) as dump:
|
||
|
|
generate_skylab_deps.main()
|
||
|
|
filter_dict = dump.call_args[0][0]
|
||
|
|
self.assertEqual(
|
||
|
|
filter_dict['default'],
|
||
|
|
'(%s && !"name:disabled.test1" && !"name:disabled.test2")' %
|
||
|
|
TAST_EXPR)
|
||
|
|
|
||
|
|
def testEnableTests(self):
|
||
|
|
file_mock = mock.mock_open(read_data=TAST_CONTROL)
|
||
|
|
args = REQUIRED_ARGS + [
|
||
|
|
'--enabled-tests', 'enabled.test1', '--enabled-tests', 'enabled.test2'
|
||
|
|
]
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', args),\
|
||
|
|
mock.patch('builtins.open', file_mock),\
|
||
|
|
mock.patch('os.chmod'),\
|
||
|
|
mock.patch("json.dump", mock.MagicMock()) as dump:
|
||
|
|
generate_skylab_deps.main()
|
||
|
|
filter_dict = dump.call_args[0][0]
|
||
|
|
self.assertEqual(filter_dict['default'],
|
||
|
|
'("name:enabled.test1" || "name:enabled.test2")')
|
||
|
|
|
||
|
|
def testTastControlWithTastExpr(self):
|
||
|
|
file_mock = mock.mock_open(read_data=TAST_CONTROL)
|
||
|
|
args = REQUIRED_ARGS + [
|
||
|
|
'--tast-expr',
|
||
|
|
TAST_EXPR,
|
||
|
|
'--tast-control',
|
||
|
|
'mocked_input',
|
||
|
|
]
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', args),\
|
||
|
|
mock.patch('builtins.open', file_mock),\
|
||
|
|
mock.patch('os.chmod'),\
|
||
|
|
mock.patch("json.dump", mock.MagicMock()) as dump:
|
||
|
|
generate_skylab_deps.main()
|
||
|
|
filter_dict = dump.call_args[0][0]
|
||
|
|
self.assertEqual(filter_dict['default'], '(%s)' % TAST_EXPR)
|
||
|
|
self.assertEqual(filter_dict['tast_disabled_tests_from_chrome_m100'],
|
||
|
|
'(%s && !"name:example.m100.test1")' % TAST_EXPR)
|
||
|
|
|
||
|
|
def testTastControlWithTastExprAndDisabledTests(self):
|
||
|
|
file_mock = mock.mock_open(read_data=TAST_CONTROL)
|
||
|
|
args = REQUIRED_ARGS + [
|
||
|
|
'--tast-expr', TAST_EXPR, '--tast-control', 'mocked_input',
|
||
|
|
'--disabled-tests', 'disabled.test1', '--disabled-tests',
|
||
|
|
'disabled.test2'
|
||
|
|
]
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', args),\
|
||
|
|
mock.patch('builtins.open', file_mock),\
|
||
|
|
mock.patch('os.chmod'),\
|
||
|
|
mock.patch("json.dump", mock.MagicMock()) as dump:
|
||
|
|
generate_skylab_deps.main()
|
||
|
|
filter_dict = dump.call_args[0][0]
|
||
|
|
self.assertEqual(
|
||
|
|
filter_dict['default'],
|
||
|
|
'("group:mainline" && "dep:chrome" && !informational && !'\
|
||
|
|
'"name:disabled.test1" && !"name:disabled.test2")'
|
||
|
|
)
|
||
|
|
|
||
|
|
# The list from a set is indeterminent
|
||
|
|
self.assertIn('"group:mainline" && "dep:chrome" && !informational',
|
||
|
|
filter_dict['tast_disabled_tests_from_chrome_m100'])
|
||
|
|
self.assertIn('&& !"name:disabled.test1"',
|
||
|
|
filter_dict['tast_disabled_tests_from_chrome_m100'])
|
||
|
|
self.assertIn('&& !"name:disabled.test2"',
|
||
|
|
filter_dict['tast_disabled_tests_from_chrome_m100'])
|
||
|
|
self.assertIn('&& !"name:example.m100.test1"',
|
||
|
|
filter_dict['tast_disabled_tests_from_chrome_m100'])
|
||
|
|
|
||
|
|
def testTastControlWithTastExprAndEnabledTests(self):
|
||
|
|
file_mock = mock.mock_open(read_data=TAST_CONTROL)
|
||
|
|
args = REQUIRED_ARGS + [
|
||
|
|
'--tast-expr', TAST_EXPR, '--tast-control', 'mocked_input',
|
||
|
|
'--enabled-tests', 'enabled.test1', '--enabled-tests', 'enabled.test2'
|
||
|
|
]
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', args),\
|
||
|
|
mock.patch('builtins.open', file_mock),\
|
||
|
|
mock.patch('os.chmod'),\
|
||
|
|
mock.patch("json.dump", mock.MagicMock()) as dump:
|
||
|
|
generate_skylab_deps.main()
|
||
|
|
filter_dict = dump.call_args[0][0]
|
||
|
|
self.assertEqual(
|
||
|
|
filter_dict['default'],
|
||
|
|
'("group:mainline" && "dep:chrome" && !informational && '\
|
||
|
|
'("name:enabled.test1" || "name:enabled.test2"))'
|
||
|
|
)
|
||
|
|
self.assertEqual(
|
||
|
|
filter_dict['tast_disabled_tests_from_chrome_m100'],
|
||
|
|
'("group:mainline" && "dep:chrome" && !informational && '\
|
||
|
|
'!"name:example.m100.test1" && ("name:enabled.test1" '\
|
||
|
|
'|| "name:enabled.test2"))'
|
||
|
|
)
|
||
|
|
|
||
|
|
def testTastControlWithEnabledTests(self):
|
||
|
|
file_mock = mock.mock_open(read_data=TAST_CONTROL)
|
||
|
|
args = REQUIRED_ARGS + [
|
||
|
|
'--tast-control',
|
||
|
|
'mocked_input',
|
||
|
|
'--enabled-tests',
|
||
|
|
'enabled.test1',
|
||
|
|
'--enabled-tests',
|
||
|
|
'enabled.test2',
|
||
|
|
]
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', args),\
|
||
|
|
mock.patch('builtins.open', file_mock),\
|
||
|
|
mock.patch('os.chmod'),\
|
||
|
|
mock.patch("json.dump", mock.MagicMock()) as dump:
|
||
|
|
generate_skylab_deps.main()
|
||
|
|
filter_dict = dump.call_args[0][0]
|
||
|
|
# Should not include 'all' collection from TAST_CONTROL since that would
|
||
|
|
# need to be passed in the --disabled-tests to be included
|
||
|
|
self.assertEqual(filter_dict['default'],
|
||
|
|
'("name:enabled.test1" || "name:enabled.test2")')
|
||
|
|
self.assertEqual(
|
||
|
|
filter_dict['tast_disabled_tests_from_chrome_m100'],
|
||
|
|
'(!"name:example.m100.test1" && '\
|
||
|
|
'("name:enabled.test1" || "name:enabled.test2"))'
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
unittest.main()
|