blob: 9a30825f0db1ed58a1920e59088595ee7bd96fb5 [file] [log] [blame]
#!/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()