def test_missing_supported_options(self): config = { 'reader': { 'name': 'exporters.readers.random_reader.RandomReader', 'options': {} }, 'writer': { 'name': 'exporters.writers.console_writer.ConsoleWriter', 'options': {} }, 'filter': { 'name': 'exporters.filters.no_filter.NoFilter', 'options': {} }, 'transform': { 'name': 'exporters.transform.jq_transform.JQTransform', 'options': {} }, 'exporter_options': {}, 'persistence': { 'name': 'exporters.persistence.PicklePersistence', 'options': { 'file_path': '/tmp' } } } with self.assertRaises(ConfigurationError) as cm: check_for_errors(config) exception = cm.exception expected_errors = { 'transform': {'jq_filter': 'Option jq_filter is missing'} } self.assertEqual(expected_errors, exception.errors)
def test_stream_only_sections(self): config = valid_config_with_updates({ "decompressor": { "name": "exporters.decompressors.ZLibDecompressor", }, "deserializer": { "name": "exporters.deserializers.CSVDeserializer", }, }) with self.assertRaises(ConfigurationError) as cm: check_for_errors(config) expected_errors = { 'decompressor': "The 'decompressor' section can only be used with a stream reader.", 'deserializer': "The 'deserializer' section can only be used with a stream reader.", } assert expected_errors == cm.exception.errors config = valid_config_with_updates({ "reader": { "name": "exporters.readers.fs_reader.FSReader", "options": { "input": "." } }, "decompressor": { "name": "exporters.decompressors.ZLibDecompressor", }, "deserializer": { "name": "exporters.deserializers.CSVDeserializer", }, }) check_for_errors(config) # should not raise
def test_wrong_type_supported_options(self): config = { 'reader': { 'name': 'exporters.readers.random_reader.RandomReader', 'options': { 'number_of_items': {}, 'batch_size': [] } }, 'writer': { 'name': 'exporters.writers.console_writer.ConsoleWriter', 'options': {} }, 'filter': { 'name': 'exporters.filters.no_filter.NoFilter', 'options': {} }, 'transform': { 'name': 'exporters.transform.jq_transform.JQTransform', 'options': { 'jq_filter': 5 } }, 'exporter_options': {}, 'persistence': { 'name': 'exporters.persistence.PicklePersistence', 'options': { 'file_path': 567 } } } with self.assertRaises(ConfigurationError) as cm: check_for_errors(config) exception = cm.exception wrong_type_msg = 'Wrong type: found %s, expected %s' expected_errors = { 'reader': { 'number_of_items': wrong_type_msg % (dict, six.integer_types), 'batch_size': wrong_type_msg % (list, six.integer_types)}, 'transform': { 'jq_filter': wrong_type_msg % (int, six.string_types)}, 'persistence': { 'file_path': wrong_type_msg % (int, six.string_types)} } self.assertEqual(expected_errors, exception.errors) self.assertEqual(len(exception.errors), 3) self.assertEqual(len(exception.errors['reader']), 2)
def test_validate_returns_errors(self): errors = check_for_errors({}, raise_exception=False) self.assertIsInstance(errors, dict) self.assertNotEqual(len(errors), 0)
def test_check_configuration(self): try: check_for_errors(VALID_EXPORTER_CONFIG) except Exception: self.fail("check_for_errors() raised Exception unexpectedly!")
def test_find_missing_sections(self): with self.assertRaises(ConfigurationError): check_for_errors({})