#!/usr/bin/env python3 # # Copyright 2018 - The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import unittest from acts.config import entries class ConfigEntryMetaValidatorTest(unittest.TestCase): """Tests the ConfigEntryMetas are all valid.""" def test_config_entries_have_valid_cli_flags(self): """Tests that all config_entries have valid cli_flags.""" for entry in entries.config_entries: if entry.cli_flags is None: continue if type(entry.cli_flags) is not list: self.fail('Entry %s has an invalid cli_flags argument. This ' 'value must be a string or list of strings.' % entry) for cli_flag in entry.cli_flags: if type(cli_flag) is not str: self.fail('Entry %s has an invalid cli_flags argument. ' 'Flag %s is of type %s, but must be a str.' % (entry, cli_flag, type(cli_flag))) def test_config_entries_define_help(self): """Tests that all config_entries define a help function.""" for entry in entries.config_entries: if entry.help is None: self.fail('Entry %s must define the help kwarg.' % entry) def test_config_entries_env_variables_has_acts_config_key(self): """Tests that all env var configs have a corresponding config key.""" for entry in entries.config_entries: if entry.env_var_name is not None and entry.acts_config_key is None: self.fail('Entry %s defines env_var_name %s, but does not ' 'define a corresponding acts_config_key value. In ' 'order to access this config value during tests, ' 'This value must be specified.') def test_config_no_conflicting_acts_config_keys(self): """Tests that all config_entries have unique ACTS config keys. This will prevent values from overwriting each other. """ config_entries = entries.config_entries uniques = {entry.acts_config_key for entry in config_entries} if len(uniques) != len(config_entries): keys_list = [entry.acts_config_key for entry in config_entries] for key in uniques: keys_list.remove(key) self.fail('The following acts_config_keys are used at least ' 'twice: %s. Duplicate acts_config_keys can cause values ' 'to be overwritten, resulting in lost data.' % set(keys_list)) if __name__ == "__main__": unittest.main()