123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- #!/usr/bin/env python
- # Copyright 2020 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """Tests for mb_validate.py."""
- from __future__ import print_function
- from __future__ import absolute_import
- import sys
- import ast
- import os
- import unittest
- sys.path.insert(0, os.path.join(
- os.path.dirname(os.path.abspath(__file__)), '..'))
- from mb import mb
- from mb import mb_unittest
- from mb.lib import validation
- TEST_UNREFERENCED_MIXIN_CONFIG = """\
- {
- 'public_artifact_builders': {},
- 'configs': {
- 'rel_bot_1': ['rel'],
- 'rel_bot_2': ['rel'],
- },
- 'builder_groups': {
- 'fake_builder_group_a': {
- 'fake_builder_a': 'rel_bot_1',
- 'fake_builder_b': 'rel_bot_2',
- },
- },
- 'mixins': {
- 'unreferenced_mixin': {
- 'gn_args': 'proprietary_codecs=true',
- },
- 'rel': {
- 'gn_args': 'is_debug=false',
- },
- },
- }
- """
- TEST_UNKNOWNMIXIN_CONFIG = """\
- {
- 'public_artifact_builders': {},
- 'configs': {
- 'rel_bot_1': ['rel'],
- 'rel_bot_2': ['rel', 'unknown_mixin'],
- },
- 'builder_groups': {
- 'fake_builder_group_a': {
- 'fake_builder_a': 'rel_bot_1',
- 'fake_builder_b': 'rel_bot_2',
- },
- },
- 'mixins': {
- 'rel': {
- 'gn_args': 'is_debug=false',
- },
- },
- }
- """
- TEST_UNKNOWN_NESTED_MIXIN_CONFIG = """\
- {
- 'public_artifact_builders': {},
- 'configs': {
- 'rel_bot_1': ['rel', 'nested_mixin'],
- 'rel_bot_2': ['rel'],
- },
- 'builder_groups': {
- 'fake_builder_group_a': {
- 'fake_builder_a': 'rel_bot_1',
- 'fake_builder_b': 'rel_bot_2',
- },
- },
- 'mixins': {
- 'nested_mixin': {
- 'mixins': {
- 'unknown_mixin': {
- 'gn_args': 'proprietary_codecs=true',
- },
- },
- },
- 'rel': {
- 'gn_args': 'is_debug=false',
- },
- },
- }
- """
- TEST_CONFIG_UNSORTED_GROUPS = """\
- {
- 'builder_groups': {
- 'groupB': {},
- 'groupA': {},
- 'groupC': {},
- },
- 'configs': {
- },
- 'mixins': {
- },
- }
- """
- TEST_CONFIG_UNSORTED_BUILDERNAMES = """\
- {
- 'builder_groups': {
- 'group': {
- 'builderB': '',
- 'builderA': ''
- },
- },
- 'configs': {
- },
- 'mixins': {
- },
- }
- """
- TEST_CONFIG_UNSORTED_CONFIGS = """\
- {
- 'builder_groups': {
- },
- 'configs': {
- 'configB': {},
- 'configA': {},
- },
- 'mixins': {
- },
- }
- """
- TEST_CONFIG_UNSORTED_MIXINS = """\
- {
- 'builder_groups': {
- },
- 'configs': {
- },
- 'mixins': {
- 'mixinB': {},
- 'mixinA': {},
- },
- }
- """
- class UnitTest(unittest.TestCase):
- def test_GetAllConfigs(self):
- configs = ast.literal_eval(mb_unittest.TEST_CONFIG)
- all_configs = validation.GetAllConfigs(configs['builder_groups'])
- self.assertEqual(all_configs['rel_bot'], 'fake_builder_group')
- self.assertEqual(all_configs['debug_goma'], 'fake_builder_group')
- def test_CheckAllConfigsAndMixinsReferenced_ok(self):
- configs = ast.literal_eval(mb_unittest.TEST_CONFIG)
- errs = []
- all_configs = validation.GetAllConfigs(configs['builder_groups'])
- config_configs = configs['configs']
- mixins = configs['mixins']
- validation.CheckAllConfigsAndMixinsReferenced(errs, all_configs,
- config_configs, mixins)
- self.assertEqual(errs, [])
- def test_CheckAllConfigsAndMixinsReferenced_unreferenced(self):
- configs = ast.literal_eval(TEST_UNREFERENCED_MIXIN_CONFIG)
- errs = []
- all_configs = validation.GetAllConfigs(configs['builder_groups'])
- config_configs = configs['configs']
- mixins = configs['mixins']
- validation.CheckAllConfigsAndMixinsReferenced(errs, all_configs,
- config_configs, mixins)
- self.assertIn('Unreferenced mixin "unreferenced_mixin".', errs)
- def test_CheckAllConfigsAndMixinsReferenced_unknown(self):
- configs = ast.literal_eval(TEST_UNKNOWNMIXIN_CONFIG)
- errs = []
- all_configs = validation.GetAllConfigs(configs['builder_groups'])
- config_configs = configs['configs']
- mixins = configs['mixins']
- validation.CheckAllConfigsAndMixinsReferenced(errs, all_configs,
- config_configs, mixins)
- self.assertIn(
- 'Unknown mixin "unknown_mixin" '
- 'referenced by config "rel_bot_2".', errs)
- def test_CheckAllConfigsAndMixinsReferenced_unknown_nested(self):
- configs = ast.literal_eval(TEST_UNKNOWN_NESTED_MIXIN_CONFIG)
- errs = []
- all_configs = validation.GetAllConfigs(configs['builder_groups'])
- config_configs = configs['configs']
- mixins = configs['mixins']
- validation.CheckAllConfigsAndMixinsReferenced(errs, all_configs,
- config_configs, mixins)
- self.assertIn(
- 'Unknown mixin "unknown_mixin" '
- 'referenced by mixin "nested_mixin".', errs)
- def test_CheckAllConfigsAndMixinsReferenced_unused(self):
- configs = ast.literal_eval(TEST_UNKNOWN_NESTED_MIXIN_CONFIG)
- errs = []
- all_configs = validation.GetAllConfigs(configs['builder_groups'])
- config_configs = configs['configs']
- mixins = configs['mixins']
- validation.CheckAllConfigsAndMixinsReferenced(errs, all_configs,
- config_configs, mixins)
- self.assertIn(
- 'Unknown mixin "unknown_mixin" '
- 'referenced by mixin "nested_mixin".', errs)
- def test_EnsureNoProprietaryMixins(self):
- bad_configs = ast.literal_eval(mb_unittest.TEST_BAD_CONFIG)
- errs = []
- builder_groups = bad_configs['builder_groups']
- mixins = bad_configs['mixins']
- config_configs = bad_configs['configs']
- validation.EnsureNoProprietaryMixins(errs, builder_groups, config_configs,
- mixins)
- self.assertIn(
- 'Public artifact builder "a" '
- 'can not contain the "chrome_with_codecs" mixin.', errs)
- self.assertIn(
- 'Public artifact builder "b" '
- 'can not contain the "chrome_with_codecs" mixin.', errs)
- self.assertEqual(len(errs), 2)
- def test_CheckDuplicateConfigs_ok(self):
- configs = ast.literal_eval(mb_unittest.TEST_CONFIG)
- config_configs = configs['configs']
- mixins = configs['mixins']
- grouping = configs['builder_groups']
- errs = []
- validation.CheckDuplicateConfigs(errs, config_configs, mixins, grouping,
- mb.FlattenConfig)
- self.assertEqual(errs, [])
- @unittest.skip('bla')
- def test_CheckDuplicateConfigs_dups(self):
- configs = ast.literal_eval(mb_unittest.TEST_DUP_CONFIG)
- config_configs = configs['configs']
- mixins = configs['mixins']
- grouping = configs['builder_groups']
- errs = []
- validation.CheckDuplicateConfigs(errs, config_configs, mixins, grouping,
- mb.FlattenConfig)
- self.assertIn(
- 'Duplicate configs detected. When evaluated fully, the '
- 'following configs are all equivalent: \'some_config\', '
- '\'some_other_config\'. Please consolidate these configs '
- 'into only one unique name per configuration value.', errs)
- def test_CheckKeyOrderingOK(self):
- mb_config = ast.literal_eval(mb_unittest.TEST_CONFIG)
- errs = []
- validation.CheckKeyOrdering(errs, mb_config['builder_groups'],
- mb_config['configs'], mb_config['mixins'])
- self.assertEqual(errs, [])
- def test_CheckKeyOrderingBad(self):
- mb_config = ast.literal_eval(TEST_CONFIG_UNSORTED_GROUPS)
- errs = []
- validation.CheckKeyOrdering(errs, mb_config['builder_groups'],
- mb_config['configs'], mb_config['mixins'])
- self.assertIn('\nThe keys in "builder_groups" are not sorted:', errs)
- mb_config = ast.literal_eval(TEST_CONFIG_UNSORTED_BUILDERNAMES)
- errs = []
- validation.CheckKeyOrdering(errs, mb_config['builder_groups'],
- mb_config['configs'], mb_config['mixins'])
- self.assertIn('\nThe builders in group "group" are not sorted:', errs)
- mb_config = ast.literal_eval(TEST_CONFIG_UNSORTED_CONFIGS)
- errs = []
- validation.CheckKeyOrdering(errs, mb_config['builder_groups'],
- mb_config['configs'], mb_config['mixins'])
- self.assertIn('\nThe config names are not sorted:', errs)
- mb_config = ast.literal_eval(TEST_CONFIG_UNSORTED_MIXINS)
- errs = []
- validation.CheckKeyOrdering(errs, mb_config['builder_groups'],
- mb_config['configs'], mb_config['mixins'])
- self.assertIn('\nThe mixin names are not sorted:', errs)
- if __name__ == '__main__':
- unittest.main()
|