def test_log_level_ignored(self): fake_cli_args = argparse.Namespace() config = configs.Config(cli_args=fake_cli_args) self.assertFalse(config.log_level_ignored('TRACE')) self.assertFalse(config.log_level_ignored('DEBUG')) self.assertFalse(config.log_level_ignored('INFO')) self.assertFalse(config.log_level_ignored('WARN')) self.assertFalse(config.log_level_ignored('ERROR')) self.assertFalse(config.log_level_ignored('FAIL')) self.assertFalse(config.log_level_ignored('OTHER_FOOBAR')) fake_cli_args = argparse.Namespace(ignore_logs_below='INFO') config = configs.Config(cli_args=fake_cli_args) self.assertTrue(config.log_level_ignored('TRACE')) self.assertTrue(config.log_level_ignored('DEBUG')) self.assertFalse(config.log_level_ignored('INFO')) self.assertFalse(config.log_level_ignored('WARN')) self.assertFalse(config.log_level_ignored('ERROR')) self.assertFalse(config.log_level_ignored('FAIL')) self.assertFalse(config.log_level_ignored('OTHER_FOOBAR')) fake_cli_args = argparse.Namespace(ignore_logs_below='WARN') config = configs.Config(cli_args=fake_cli_args) self.assertTrue(config.log_level_ignored('TRACE')) self.assertTrue(config.log_level_ignored('DEBUG')) self.assertTrue(config.log_level_ignored('INFO')) self.assertFalse(config.log_level_ignored('WARN')) self.assertFalse(config.log_level_ignored('ERROR')) self.assertFalse(config.log_level_ignored('FAIL')) self.assertFalse(config.log_level_ignored('OTHER_FOOBAR'))
def test_execution_id(self): fake_cli_args = argparse.Namespace(execution_id='job_name_here') execution_id = configs.Config(fake_cli_args).execution_id assert execution_id == 'job_name_here', 'Execution-id should be correct' fake_cli_args = argparse.Namespace() execution_id = configs.Config(fake_cli_args).execution_id assert execution_id == 'Not set', 'Execution-id should be correct'
def test_execution_context(self): fake_cli_args = argparse.Namespace(execution_context='PR') config = configs.Config(cli_args=fake_cli_args) self.assertEqual(config.execution_context, 'PR') fake_cli_args = argparse.Namespace() config = configs.Config(cli_args=fake_cli_args) self.assertEqual(config.execution_context, 'default')
def test_execution_context_and_changes(self, fake_changes_file_data): fake_cli_args = argparse.Namespace(execution_context='PR', changes='foobar.json') config = configs.Config(fake_cli_args) self.assertEqual(config.execution_context, 'PR') fake_cli_args = argparse.Namespace(changes='foobar.json') config = configs.Config(fake_cli_args) self.assertEqual(config.execution_context, 'Integration')
def test_allowing_major_schema_update_overrides_minor_updates(self): fake_cli_args = argparse.Namespace(allow_minor_schema_updates=True) config = configs.Config(cli_args=fake_cli_args) self.assertEqual(config.allow_minor_schema_updates, True) self.assertEqual(config.allow_major_schema_updates, False) fake_cli_args = argparse.Namespace(allow_major_schema_updates=True) config = configs.Config(cli_args=fake_cli_args) self.assertEqual(config.allow_minor_schema_updates, True) self.assertEqual(config.allow_major_schema_updates, True) fake_cli_args = argparse.Namespace(allow_major_schema_updates=True, allow_minor_schema_updates=False) config = configs.Config(cli_args=fake_cli_args) self.assertEqual(config.allow_minor_schema_updates, True) self.assertEqual(config.allow_major_schema_updates, True)
def test_check_and_update_schema_does_not_run_major_updates_without_permission(self): mock_db = self.mock_db_class(configs.Config(file_config={'allow_minor_schema_updates': True})) mock_db._latest_update_applied.return_value = 0 mock_db._schema_updates = ((1001, False, 'major_update.sql'),) with self.assertRaises(database.ArchiverSchemaException): mock_db.check_and_update_schema()
def test_cli_configs_are_resolved(self): fake_cli_args = argparse.Namespace(user='******', port=1234, metadata=['foo:bar']) config = configs.Config(cli_args=fake_cli_args) self.assertEqual(config.database, 'test_archive') self.assertEqual(config.user, 'cli_user') self.assertEqual(config.port, 1234) self.assertEqual(config.metadata, {'foo': 'bar'})
def test_file_configs_are_resolved(self): config = configs.Config(file_config=FAKE_CONFIG_FILE_DATA) self.assertEqual(config.database, 'archive.db') self.assertEqual(config.port, 1234) self.assertEqual(config.metadata, { 'version': '1.2.3', 'environment': 'integration' })
def test_changes(self, fake_changes_file_data): fake_cli_args = argparse.Namespace(changes='foobar.json') changes = configs.Config(fake_cli_args).changes self.assertTrue(len(changes) == 1) self.assertEqual(changes[0]['name'], '/path/to/file.py') self.assertEqual(changes[0]['repository'], 'RepoA') self.assertEqual(changes[0]['item_type'], 'my_item_type') self.assertEqual(changes[0]['subtype'], 'my_subtype')
def test_check_and_update_schema_initializes_schema(self): mock_db = self.mock_db_class(configs.Config()) mock_db._latest_update_applied.return_value = None mock_db._initialize_schema.return_value = True mock_db.check_and_update_schema() mock_db._initialize_schema.assert_called_once() mock_db._run_script.assert_not_called()
def test_cli_configs_have_higher_precedence_than_config_files(self): fake_cli_args = argparse.Namespace(user='******', port=4321, metadata=['version:3.2.1', 'cli_data:foobar']) config = configs.Config(cli_args=fake_cli_args, file_config=FAKE_CONFIG_FILE_DATA) self.assertEqual(config.database, 'archive.db') self.assertEqual(config.user, 'cli_user') self.assertEqual(config.port, 4321) self.assertEqual(config.metadata, {'version': '3.2.1', 'cli_data': 'foobar', 'environment': 'integration'})
def test_check_and_update_schema_runs_updates_on_v1_schema_when_allowed(self): config = configs.Config(file_config={'allow_major_schema_updates': True}) mock_db = self.mock_db_class(config) mock_db._latest_update_applied.return_value = None mock_db._initialize_schema.return_value = False mock_db.check_and_update_schema() mock_db._initialize_schema.assert_called_once() self.assertEqual(mock_db._run_script.call_count, len(database.SCHEMA_UPDATES))
def test_check_and_update_schema_fails_when_schema_is_too_new(self): mock_db = self.mock_db_class(configs.Config(file_config={'allow_major_schema_updates': True})) mock_db._latest_update_applied.return_value = 10002 mock_db.fetch_one_value.return_value = 'a.b.c' mock_db._schema_updates = ((1001, False, 'major_update.sql'),) with self.assertRaises(database.ArchiverSchemaException): mock_db.check_and_update_schema() mock_db._run_script.assert_not_called()
def test_check_and_update_schema_runs_updates_on_v2_schema_when_allowed(self): config = configs.Config(file_config={'allow_major_schema_updates': True}) mock_db = self.mock_db_class(config) mock_db._latest_update_applied.return_value = 1 mock_db._initialize_schema.return_value = False mock_db._schema_updates = ((1001, False, 'major update'),) mock_db.check_and_update_schema() mock_db._initialize_schema.assert_not_called() self.assertEqual(mock_db._run_script.call_count, 1)
def test_keyword_is_inserted_by_default(self): config = configs.Config(file_config={}) sut_archiver = archiver.Archiver(self.mock_db, config) sut_archiver.begin_suite('Some suite of tests') sut_archiver.begin_test('Some test case') keyword = sut_archiver.begin_keyword('Fake kw', 'unittests', 'mock') keyword.insert_results() self.mock_db.insert_or_ignore.assert_called_once() self.assertEqual(len(sut_archiver.keyword_statistics), 1)
def test_keywords_are_not_archived(self): config = configs.Config(file_config={'archive_keywords': False}) sut_archiver = archiver.Archiver(self.mock_db, config) sut_archiver.begin_suite('Some suite of tests') sut_archiver.begin_test('Some test case') keyword = sut_archiver.begin_keyword('Fake kw', 'unittests', 'mock') keyword.subtree_fingerprints = ['abcdef1234567890'] keyword.insert_results() self.mock_db.insert_or_ignore.assert_not_called() self.assertEqual(len(sut_archiver.keyword_statistics), 0)
def test_insert_adheres_to_log_level_cut_off(self): config = configs.Config(file_config={'ignore_logs_below': 'WARN'}) sut_archiver = archiver.Archiver(self.mock_db, config) sut_archiver.begin_suite('Some suite of tests') message = archiver.LogMessage(sut_archiver, 'WARN', 'some_timestamp') message.insert('Some log message') self.mock_db.insert.assert_called_once() message = archiver.LogMessage(sut_archiver, 'INFO', 'some_timestamp') message.insert('Some log message') self.mock_db.insert.assert_called_once() message = archiver.LogMessage(sut_archiver, 'TRACE', 'some_timestamp') message.insert('Some log message') self.mock_db.insert.assert_called_once()
def test_check_and_update_schema_does_not_run_any_updates_without_permission(self): mock_db = self.mock_db_class(configs.Config()) mock_db._latest_update_applied.return_value = 0 mock_db._initialize_schema.return_value = False mock_db._schema_updates = ((1001, False, 'major_update.sql'),) with self.assertRaises(database.ArchiverSchemaException): mock_db.check_and_update_schema() mock_db._run_script.assert_not_called() mock_db._schema_updates = ((1001, True, 'minor_update.sql'),) with self.assertRaises(database.ArchiverSchemaException): mock_db.check_and_update_schema() mock_db._run_script.assert_not_called()
def test_insert_not_ignored_by_default(self): config = configs.Config(file_config={}) sut_archiver = archiver.Archiver(self.mock_db, config) sut_archiver.begin_suite('Some suite of tests') message = archiver.LogMessage(sut_archiver, 'WARN', 'some_timestamp') message.insert('Some log message') self.mock_db.insert.assert_called_once() message = archiver.LogMessage(sut_archiver, 'INFO', 'some_timestamp') message.insert('Some log message') self.assertEqual(self.mock_db.insert.call_count, 2) message = archiver.LogMessage(sut_archiver, 'TRACE', 'some_timestamp') message.insert('Some log message') self.assertEqual(self.mock_db.insert.call_count, 3)
def test_logs_not_inserted_when_logs_ignored(self): config = configs.Config(file_config={'ignore_logs': True}) sut_archiver = archiver.Archiver(self.mock_db, config) sut_archiver.begin_suite('Some suite of tests') message = archiver.LogMessage(sut_archiver, 'WARN', 'some_timestamp') message.insert('Some log message') self.mock_db.insert.assert_not_called() message = archiver.LogMessage(sut_archiver, 'INFO', 'some_timestamp') message.insert('Some log message') self.mock_db.insert.assert_not_called() message = archiver.LogMessage(sut_archiver, 'TRACE', 'some_timestamp') message.insert('Some log message') self.mock_db.insert.assert_not_called() message = archiver.LogMessage(sut_archiver, 'FOO', 'some_timestamp') message.insert('Some log message') self.mock_db.insert.assert_not_called()
def test_config_file_is_read(self, fake_read_config_file): configs.Config(file_config='foobar.json') fake_read_config_file.asser_called_once()
def test_changes_when_no_changes_in_file(self, fake_changes_file_data): fake_cli_args = argparse.Namespace(changes='foobar.json') changes = configs.Config(fake_cli_args).changes self.assertEqual(changes, [])
def test_changes_when_no_changes(self): fake_cli_args = argparse.Namespace() changes = configs.Config(fake_cli_args).changes self.assertEqual(changes, [])
def setUp(self): self.mock_db = Mock() self.config = configs.Config(file_config={}) self.archiver = archiver.Archiver(self.mock_db, self.config) self.item = SutFingerprintedItem(self.archiver, 'SUT item')
def test_default_configs_are_resolved(self): config = configs.Config() self.assertEqual(config.database, 'test_archive') self.assertEqual(config.port, 5432) self.assertEqual(config.require_ssl, True) self.assertEqual(config.metadata, {})
def setUp(self): self.mock_db = Mock() self.config = configs.Config(file_config={}) self.archiver = archiver.Archiver(self.mock_db, self.config) self.item = archiver.TestItem(self.archiver)
def test_execution_context_when_not_set_in_changes(self, fake_changes_file_data): fake_cli_args = argparse.Namespace(changes='foobar.json') config = configs.Config(fake_cli_args) self.assertEqual(config.execution_context, 'default')
def mock_archiver(): mock_db = Mock() config = configs.Config(file_config={}) return archiver.Archiver(mock_db, config)
def setUp(self): # Create database file for each test case temp_db = '{}.{}.db'.format(self.__class__.__name__, self._testMethodName) full_path = os.path.join(self.__class__.dir_path, temp_db) self.database = database.SQLiteDatabase(configs.Config(file_config={'database': full_path})) self.assertTrue(self.database._initialize_schema())