def test_show_player_in_show(self): with self.assertRaises(AssertionError) as e: super().setUp() self.post_event("play_broken_show") self.assertEqual(str(e.exception), 'Config File Error in show: "broken_show" >> Invalid section "light_player:" ' 'found. Did you mean "lights:" instead? Context: broken_show ' 'Error Code: CFE-show-3 ({})'.format(log_url.format("CFE-show-3"))) self.loop.close()
def __str__(self): """Return nice string.""" error_slug = "CFE-{}-{}".format(self._logger_name, self._error_no) error_url = log_url.format(error_slug) if self._context: return "Config File Error in {}: {} Context: {} Error Code: {} ({})".format( self._logger_name, super().__str__(), self._context, error_slug, error_url) else: return "Config File Error in {}: {} Error Code: {} ({})".format( self._logger_name, super().__str__(), error_slug, error_url)
def test_broken_mode_config(self): self.config = 'test_broken_mode_config.yaml' with self.assertRaises(AssertionError) as context: super(TestModesConfigValidation, self).setUp() self.loop.close() self.maxDiff = None self.assertEqual( 'Config File Error in ConfigValidator: Your config contains a value for the setting ' '"mode:invalid_key", but this is not a valid setting name. Error Code: CFE-ConfigValidator-2 ' '({})'.format(log_url.format("CFE-ConfigValidator-2")), str(context.exception))
def format_log_line(self, msg, context, error_no) -> str: """Return a formatted log line with log link and context.""" if error_no: error_slug = "Log-{}-{}".format(self.log.name if self.log else "", error_no) error_url = log_url.format(error_slug) if error_no and context: return "{} Context: {} Log Code: {} ({})".format(msg, context, error_slug, error_url) if context: return "{} Context: {} ".format(msg, context) if error_no: return "{} Log Code: {} ({})".format(msg, error_slug, error_url) return msg
def __str__(self): """Return nice string.""" error_slug = "{}-{}-{}".format(self.get_short_name(), self._url_name.replace(" ", "_"), self._error_no) error_url = log_url.format(error_slug) if self._context: return "{} in {}: {} Context: {} Error Code: {} ({})".format( self.get_long_name(), self._logger_name, super().__str__(), self._context, error_slug, error_url) return "{} in {}: {} Error Code: {} ({})".format( self.get_long_name(), self._logger_name, super().__str__(), error_slug, error_url)
def test_typo(self): """Test suggestion on typo.""" config_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), "machine_files/config_processor/typo.yaml") with self.assertRaises(ConfigFileError) as e: config = self.config_processor.load_config_files_with_cache( [config_file], "machine") self.assertEqual( 'Config File Error in ConfigProcessor: Found a "light:" section in config ' 'file {config_file}, ' 'but that section name is unknown. Did you mean "lights:" instead?. Context: ' '{config_file} ' 'Error Code: CFE-ConfigProcessor-3 ({})'.format( log_url.format("CFE-ConfigProcessor-3"), config_file=config_file), str(e.exception))
def test_config_validator(self): validation_failure_info = (("key", "entry"), "subkey") # test config spec syntax error self.assertRaises(ValueError, self.machine.config_validator.validate_config_item, 'single|int'.split("|"), None, None) # test default required, source is int validation_string = 'single|int|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 0) self.assertEqual(results, 0) # test default provided, source overrides default validation_string = 'single|int|0'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 1) self.assertEqual(results, 1) # test source type is converted to int validation_string = 'single|int|0'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '1') self.assertEqual(results, 1) # test default when no source is present validation_string = 'single|int|1'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info') # no item in config self.assertEqual(results, 1) # test default required with source missing raises error validation_string = 'single|int|'.split("|") # default required self.assertRaises(ConfigFileError, self.machine.config_validator.validate_config_item, validation_string, 'test_failure_info') # no item # test broken int validation_string = 'single|int|'.split("|") # default required with self.assertRaises(AssertionError) as e: results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, '1s') # test int with range validation_string = 'single|int(0,10)|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, '0') self.assertEqual(results, 0) results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, '7') self.assertEqual(results, 7) results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, '10') self.assertEqual(results, 10) with self.assertRaises(AssertionError) as e: results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, '-1') with self.assertRaises(AssertionError) as e: results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, 11) # int with open end validation_string = 'single|int(0,NONE)|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, 999) self.assertEqual(results, 999) with self.assertRaises(AssertionError) as e: results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, -1) # test str validations validation_string = 'single|str|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'hello') self.assertEqual(results, 'hello') results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 1) self.assertEqual(results, '1') results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', "none") self.assertEqual(results, None) # test lstr validation_string = 'single|lstr|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'HellO') self.assertEqual(results, 'hello') results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'hello') self.assertEqual(results, 'hello') results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'H1') self.assertEqual(results, 'h1') results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'none') self.assertEqual(results, None) # test float validations validation_string = 'single|float|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 1) self.assertAlmostEqual(results, 1.0, .01) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '1') self.assertAlmostEqual(results, 1.0, .01) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 1.0) self.assertAlmostEqual(results, 1.0, .01) # test num validations validation_string = 'single|num|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 1.0) self.assertAlmostEqual(results, 1.0, .01) self.assertEqual(type(results), float) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '1.0') self.assertAlmostEqual(results, 1.0, .01) self.assertEqual(type(results), float) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 1) self.assertEqual(results, 1) self.assertIs(type(results), int) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '1') self.assertEqual(results, 1) self.assertIs(type(results), int) # test int_from_hex validation_string = 'single|int_from_hex|ff'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info') # no item in config self.assertEqual(results, 255) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '0a') self.assertEqual(results, 10) with self.assertRaises(AssertionError): self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, 'white') # test bool validations validation_string = 'single|bool|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'f') self.assertFalse(results) validation_string = 'single|boolean|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'f') self.assertFalse(results) validation_string = 'single|bool|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'false') self.assertFalse(results) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', False) self.assertFalse(results) # test bool_int validations validation_string = 'single|bool_int|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'f') self.assertEqual(0, results) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 't') self.assertEqual(1, results) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'false') self.assertEqual(0, results) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', False) self.assertEqual(0, results) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', "True") self.assertEqual(1, results) # test ms conversions validation_string = 'single|ms|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 100) self.assertEqual(results, 100) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 100.0) self.assertEqual(results, 100) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '100') self.assertEqual(results, 100) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '100ms') self.assertEqual(results, 100) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '1s') self.assertEqual(results, 1000) # test sec conversions validation_string = 'single|secs|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 100) self.assertEqual(results, 100) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 100.0) self.assertEqual(results, 100) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '100') self.assertEqual(results, 100) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '100s') self.assertEqual(results, 100) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '100ms') self.assertEqual(results, .1) # test single list conversions # (this just test it gets converted to a list since string_to_list # is tested earlier) validation_string = 'single|list|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'hi') self.assertEqual(results, ['hi']) # Test lists validation_string = 'list|int|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '1, 2, 3') self.assertEqual(results, [1, 2, 3]) # Test set validation_string = 'set|int|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '1, 2, 3') self.assertEqual(results, {1, 2, 3}) # Test dict validation_string = 'dict|str:int|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', dict(hello='1')) self.assertEqual(results, dict(hello=1)) # Test color validation_string = 'single|color|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'red') self.assertEqual(results, (255, 0, 0)) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'ff0000') self.assertEqual(results, (255, 0, 0)) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '255, 0, 0') self.assertEqual(results, (255, 0, 0)) # Test kivycolor validation_string = 'single|kivycolor|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'red') self.assertEqual(results, [1, 0, 0, 1]) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'ff0000') self.assertEqual(results, [1, 0, 0, 1]) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '255, 0, 0') self.assertEqual(results, [1, 0, 0, 1]) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 'ff000000') self.assertEqual(results, [1, 0, 0, 0]) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '255, 0, 0, 255') self.assertEqual(results, [1, 0, 0, 1]) # Test gain validation_string = 'single|gain|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '0.0') self.assertEqual(results, 0.0) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '1.0') self.assertEqual(results, 1.0) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '2.0') self.assertEqual(results, 1.0) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '-3') self.assertEqual(results, 0.0) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '0 db') self.assertEqual(results, 1.0) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '-inf') self.assertEqual(results, 0.0) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '-3 DB') self.assertAlmostEqual(results, 0.707945784) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '-6db') self.assertAlmostEqual(results, 0.501187233) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '-17.5db') self.assertAlmostEqual(results, 0.133352143) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '3db') self.assertEqual(results, 1.0) # test pow2 validation_string = 'single|pow2|'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', 128) self.assertEqual(results, 128) results = self.machine.config_validator.validate_config_item( validation_string, 'test_failure_info', '128') self.assertEqual(results, '128') with self.assertRaises(AssertionError): self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, '127') # test enum validation_string = 'single|enum(None,test)|None'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, None) self.assertEqual(None, results) results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, "None") self.assertEqual(None, results) results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, "test") self.assertEqual("test", results) self.maxDiff = None with self.assertRaises(AssertionError) as e: self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, 'something else') self.assertEqual('Config File Error in ConfigValidator: Config validation error: Entry ' 'key:entry:subkey = "something else" is not valid. Entry "something else" is not valid for enum. ' 'Valid values are: None,test Error Code: CFE-ConfigValidator-5 ' '({})'.format(log_url.format("CFE-ConfigValidator-5")), str(e.exception)) # test enum with 'NO' setting validation_string = 'single|enum(nc,no)|no'.split("|") results = self.machine.config_validator.validate_config_item( validation_string, validation_failure_info, False) self.assertEqual('no', results)