def test_report_item_doubling(local_config): """Test that, when we add the same data to the report items twice, we get two copies.""" manager = StateManager(local_config) manager.add_report_item(6, 'default', {'keyval': 42}) manager.add_report_item(6, 'default', {'keyval': 42}) returned_list = manager.get_current_report_items(6, 'default') assert returned_list == [{'keyval': 42}, {'keyval': 42}]
def test_empty_database_retrieval(local_config): """Tests the two retrieval APIs on an empty database.""" manager = StateManager(local_config) return_list = manager.get_unfinished_hashes('default') assert return_list == [] return_list = manager.get_previous_hashes('default') assert return_list == []
def test_any_reports_present_yes(config): """Does _any_reports_present return True correctly?""" state_manager = StateManager(config) state_manager.add_report_item(6, ENGINE_NAME, {'keyval': 1}) sut = AnalysisUtility(None) sut.config = config assert sut._any_reports_present(state_manager)
def test_clear_report_items(local_config): """Test the clear_report_items() API.""" manager = StateManager(local_config) manager.clear_report_items(6, 'default') assert getattr(manager._persistor, "_sc", 0) == 0 assert getattr(manager._persistor, "_gph", 0) == 0 assert getattr(manager._persistor, "_guh", 0) == 0 assert getattr(manager._persistor, "_p", 0) == 0 assert getattr(manager._persistor, "_ari", 0) == 0 assert getattr(manager._persistor, "_gcri", 0) == 0 assert getattr(manager._persistor, "_cri", 0) == 1
def test_add_report_item(local_config): """Test the add_report_item() API.""" manager = StateManager(local_config) manager.add_report_item(6, 'default', {'file_name': 'blort.exe'}) assert getattr(manager._persistor, "_sc", 0) == 0 assert getattr(manager._persistor, "_gph", 0) == 0 assert getattr(manager._persistor, "_guh", 0) == 0 assert getattr(manager._persistor, "_p", 0) == 0 assert getattr(manager._persistor, "_ari", 0) == 1 assert getattr(manager._persistor, "_gcri", 0) == 0 assert getattr(manager._persistor, "_cri", 0) == 0
def test_prune(local_config): """Test the prune() API.""" manager = StateManager(local_config) manager.prune("2020-01-01T00:00:00") assert getattr(manager._persistor, "_sc", 0) == 0 assert getattr(manager._persistor, "_gph", 0) == 0 assert getattr(manager._persistor, "_guh", 0) == 0 assert getattr(manager._persistor, "_p", 0) == 1 assert getattr(manager._persistor, "_ari", 0) == 0 assert getattr(manager._persistor, "_gcri", 0) == 0 assert getattr(manager._persistor, "_cri", 0) == 0
def test_set_checkpoint(local_config): """Test the set_checkpoint() API.""" manager = StateManager(local_config) manager.set_checkpoint("148429-4", "default", "DONE") assert getattr(manager._persistor, "_sc", 0) == 1 assert getattr(manager._persistor, "_gph", 0) == 0 assert getattr(manager._persistor, "_guh", 0) == 0 assert getattr(manager._persistor, "_p", 0) == 0 assert getattr(manager._persistor, "_ari", 0) == 0 assert getattr(manager._persistor, "_gcri", 0) == 0 assert getattr(manager._persistor, "_cri", 0) == 0
def test_get_unfinished_hashes(local_config): """Test the get_unfinished_hashes() API.""" manager = StateManager(local_config) return_list = manager.get_unfinished_hashes("default") assert len(return_list) == 2 assert getattr(manager._persistor, "_sc", 0) == 0 assert getattr(manager._persistor, "_gph", 0) == 0 assert getattr(manager._persistor, "_guh", 0) == 1 assert getattr(manager._persistor, "_p", 0) == 0 assert getattr(manager._persistor, "_ari", 0) == 0 assert getattr(manager._persistor, "_gcri", 0) == 0 assert getattr(manager._persistor, "_cri", 0) == 0
def test_get_current_report_items(local_config): """Test the get_current_report_items() API.""" manager = StateManager(local_config) items = manager.get_current_report_items(6, 'default') assert len(items) == 2 assert getattr(manager._persistor, "_sc", 0) == 0 assert getattr(manager._persistor, "_gph", 0) == 0 assert getattr(manager._persistor, "_guh", 0) == 0 assert getattr(manager._persistor, "_p", 0) == 0 assert getattr(manager._persistor, "_ari", 0) == 0 assert getattr(manager._persistor, "_gcri", 0) == 1 assert getattr(manager._persistor, "_cri", 0) == 0
def test_update_existing_hash(local_config): """Tests updating an exising hash in the database, and how it affects the retrieval APIs.""" manager = StateManager(local_config) manager.set_checkpoint('ABCDEFGH', 'default', 'ALPHA') return_list = manager.get_unfinished_hashes('default') assert return_list == [('ABCDEFGH', 'ALPHA')] return_list = manager.get_previous_hashes('default') assert return_list == [] manager.set_checkpoint('ABCDEFGH', 'default', 'DONE') return_list = manager.get_unfinished_hashes('default') assert return_list == [] return_list = manager.get_previous_hashes('default') assert return_list == ['ABCDEFGH']
def test_prune(local_config): """Tests the prune() functionality.""" manager = StateManager(local_config) manager.set_checkpoint('DEFGHIJK', 'default', 'DONE', '2020-01-15T12:00:00') manager.set_checkpoint('ABCDEFGH', 'default', 'DONE', '2020-01-10T12:00:00') manager.set_checkpoint('MNOPQRST', 'default', 'DONE', '2020-01-15T12:00:00') manager.set_checkpoint('JKLMNOPQ', 'default', 'DONE', '2020-01-10T14:00:00') manager.prune("2020-01-12T00:00:00") return_list = manager.get_previous_hashes('default') assert return_list == ['DEFGHIJK', 'MNOPQRST']
def test_add_mixed_hashes(local_config): """Tests adding both done and not-done hashes to make sure they're separated properly.""" manager = StateManager(local_config) manager.set_checkpoint('ABCDEFGH', 'default', 'ALPHA') manager.set_checkpoint('DEFGHIJK', 'default', 'DONE') return_list = manager.get_unfinished_hashes('default') assert return_list == [('ABCDEFGH', 'ALPHA')] return_list = manager.get_previous_hashes('default') assert return_list == ['DEFGHIJK']
def test_add_finished_hashes(local_config): """Tests adding hashes that are finished and getting them with get_previous_hashes().""" manager = StateManager(local_config) manager.set_checkpoint('DEFGHIJK', 'default', 'DONE') manager.set_checkpoint('ABCDEFGH', 'default', 'DONE') manager.set_checkpoint('MNOPQRST', 'default', 'DONE') manager.set_checkpoint('ABCDEFGH', 'another', 'DONE') return_list = manager.get_previous_hashes('default') assert return_list == ['ABCDEFGH', 'DEFGHIJK', 'MNOPQRST'] return_list = manager.get_previous_hashes('another') assert return_list == ['ABCDEFGH']
def test_config_without_provider_set(): """Test the configuration without having a provider class set.""" cfg = Config.load(""" id: cbc_binary_toolkit version: 0.0.1 database: is_test: "True" """) with pytest.raises(KeyError): StateManager(cfg)
def test_config_with_bogus_class(): """Test the configuration while trying to load a bogus class.""" cfg = Config.load(""" id: cbc_binary_toolkit version: 0.0.1 database: _provider: not_exist_package.NotExist is_test: "True" """) with pytest.raises(ImportError): StateManager(cfg)
def test_add_unfinished_hashes(local_config): """Tests adding hashes that are unfinished and getting them with get_unfinished_hashes().""" manager = StateManager(local_config) manager.set_checkpoint('ABCDEFGH', 'default', 'ALPHA') manager.set_checkpoint('EFGHIJKL', 'default', 'BRAVO') manager.set_checkpoint('ABCDEFGH', 'another', 'CHARLIE') return_list = manager.get_unfinished_hashes('default') assert len(return_list) == 2 tmp = _unfinished_as_map(return_list) assert tmp['ABCDEFGH'] == 'ALPHA' assert tmp['EFGHIJKL'] == 'BRAVO' return_list = manager.get_unfinished_hashes('another') assert len(return_list) == 1 tmp = _unfinished_as_map(return_list) assert tmp['ABCDEFGH'] == 'CHARLIE'
def test_any_reports_present_no(config): """Does _any_reports_present return False correctly?""" state_manager = StateManager(config) sut = AnalysisUtility(None) sut.config = config assert not sut._any_reports_present(state_manager)
def test_add_report_item_persistent(local_persistent_config): """Tests that add_report_item actually adds stuff to the database file on disk.""" if os.path.exists(PERSISTENCE_FILE): os.remove(PERSISTENCE_FILE) manager = StateManager(local_persistent_config) manager.add_report_item(6, 'default', {'keyval': 1}) manager.add_report_item(6, 'default', {'keyval': 4}) manager.add_report_item(6, 'default', {'keyval': 9}) manager.add_report_item(2, 'default', {'keyval': 2}) manager.add_report_item(2, 'default', {'keyval': 3}) manager.force_close() manager2 = StateManager(local_persistent_config) _test_check_report_items(manager2.get_current_report_items(6, 'default'), 'keyval', [1, 4, 9]) _test_check_report_items(manager2.get_current_report_items(2, 'default'), 'keyval', [2, 3]) _test_check_report_items(manager2.get_current_report_items(9, 'default'), 'keyval', [])
def test_set_checkpoint_persistent(local_persistent_config): """Tests that set_checkpoint actually adds stuff to the database file on disk.""" if os.path.exists(PERSISTENCE_FILE): os.remove(PERSISTENCE_FILE) manager = StateManager(local_persistent_config) manager.set_checkpoint('ABCDEFGH', 'default', 'ALPHA') manager.set_checkpoint('EFGHIJKL', 'default', 'BRAVO') manager.set_checkpoint('ABCDEFGH', 'another', 'CHARLIE') manager.force_close() manager2 = StateManager(local_persistent_config) return_list = manager2.get_unfinished_hashes('default') assert len(return_list) == 2 return_list = manager2.get_unfinished_hashes('another') assert len(return_list) == 1
def test_exception_handling(local_config): """Tests that OperationalError is handled by all methods without throwing an exception.""" manager = StateManager(local_config) manager._persistor._cursor_factory = BreakingCursor manager.set_checkpoint('ABCDEFGH', 'default', 'ALPHA') assert manager.get_previous_hashes('default') == [] manager.prune("2020-01-12T00:00:00") manager.add_report_item(6, 'default', {'keyval': 1}) assert manager.get_current_report_items(6, 'default') == [] manager.clear_report_items(6, 'default')
def test_report_items_nodata(local_config): """Tests the extraction of report items when there are none in the database.""" manager = StateManager(local_config) items = manager.get_current_report_items(6, 'default') assert len(items) == 0
def test_report_items(local_config): """Tests the management of report items.""" manager = StateManager(local_config) manager.add_report_item(6, 'default', {'keyval': 1}) manager.add_report_item(6, 'default', {'keyval': 4}) manager.add_report_item(6, 'default', {'keyval': 9}) manager.add_report_item(2, 'default', {'keyval': 2}) manager.add_report_item(2, 'default', {'keyval': 3}) _test_check_report_items(manager.get_current_report_items(6, 'default'), 'keyval', [1, 4, 9]) _test_check_report_items(manager.get_current_report_items(2, 'default'), 'keyval', [2, 3]) _test_check_report_items(manager.get_current_report_items(9, 'default'), 'keyval', []) manager.clear_report_items(6, 'default') _test_check_report_items(manager.get_current_report_items(6, 'default'), 'keyval', []) _test_check_report_items(manager.get_current_report_items(2, 'default'), 'keyval', [2, 3]) _test_check_report_items(manager.get_current_report_items(9, 'default'), 'keyval', [])