def test_historical_check_percentage(device_association_list_importer, logger, mocked_statsd, db_conn, metadata_db_conn, mocked_config, tmpdir): """Verify that the list data is not imported if it fails the historical check.""" expect_success(device_association_list_importer, 5, db_conn, logger) # size increased, importer succeeds with get_importer(DeviceAssociationListImporter, db_conn, metadata_db_conn, mocked_config.db_config, tmpdir, logger, mocked_statsd, DeviceAssociationListParams(filename='sample_association_list_large.csv', import_size_variation_percent=mocked_config .associations_threshold_config .import_size_variation_percent, import_size_variation_absolute=mocked_config .associations_threshold_config .import_size_variation_absolute )) as imp: expect_success(imp, 99, db_conn, logger) # importing file with drop in size greater then 5% with get_importer(DeviceAssociationListImporter, db_conn, metadata_db_conn, mocked_config.db_config, tmpdir, logger, mocked_statsd, DeviceAssociationListParams(filename='sample_association_list_large_drop_5_percent_greater.csv', import_size_variation_percent=mocked_config .associations_threshold_config .import_size_variation_percent, import_size_variation_absolute=mocked_config .associations_threshold_config .import_size_variation_absolute )) as imp: expect_failure(imp, exc_message='Failed import size historic check') # importing file with drop in size greater then 5% with get_importer(DeviceAssociationListImporter, db_conn, metadata_db_conn, mocked_config.db_config, tmpdir, logger, mocked_statsd, DeviceAssociationListParams(filename='sample_association_list_large_drop_5_percent_less.csv', import_size_variation_percent=mocked_config .associations_threshold_config .import_size_variation_percent, import_size_variation_absolute=mocked_config .associations_threshold_config .import_size_variation_absolute )) as imp: expect_success(imp, 95, db_conn, logger)
def test_repeat_import(device_association_list_importer, logger, mocked_statsd, db_conn, metadata_db_conn, mocked_config, tmpdir): """Verify that same import doesn't affect db.""" expect_success(device_association_list_importer, 5, db_conn, logger) # importing same file with get_importer( DeviceAssociationListImporter, db_conn, metadata_db_conn, mocked_config.db_config, tmpdir, logger, mocked_statsd, DeviceAssociationListParams( filename='sample_associationlist.csv')) as imp: expect_success(imp, 5, db_conn, logger)
def test_override_historical_check(device_association_list_importer, logger, mocked_statsd, db_conn, metadata_db_conn, mocked_config, tmpdir): """Verify that the user can override historical checks when importing list data.""" expect_success(device_association_list_importer, 5, db_conn, logger) with get_importer( DeviceAssociationListImporter, db_conn, metadata_db_conn, mocked_config.db_config, tmpdir, logger, mocked_statsd, DeviceAssociationListParams( filename='sample_associationlist_historial_check.csv', perform_historic_check=False)) as imp: expect_success(imp, 0, db_conn, logger)
def test_historical_check_empty(device_association_list_importer, logger, mocked_statsd, db_conn, metadata_db_conn, mocked_config, tmpdir): """Verify that list data is not imported if it fails historical check.""" expect_success(device_association_list_importer, 5, db_conn, logger) # attempting to import empty subscribers list with get_importer( DeviceAssociationListImporter, db_conn, metadata_db_conn, mocked_config.db_config, tmpdir, logger, mocked_statsd, DeviceAssociationListParams( filename='sample_associationlist_historial_check.csv')) as imp: expect_failure(imp, exc_message='Failed import size historic check')
def test_delta_file_prevalidation(logger, db_conn, metadata_db_conn, mocked_config, tmpdir, mocked_statsd, device_association_list_importer): """Test delta file pre-validation schemas.""" # update change-type is not allowed here expect_failure(device_association_list_importer, exc_message='Pre-validation failed: b\'Error: regex("^(add|remove)$") fails for line: 2, ' 'column: change_type, value: "update"\\nFAIL') # change-type must be lower case with get_importer(DeviceAssociationListImporter, db_conn, metadata_db_conn, mocked_config.db_config, tmpdir, logger, mocked_statsd, DeviceAssociationListParams(content='uid,imei,change_type\n' '12345678901234,11111111111111,ADD', delta=True)) as imp: expect_failure(imp, exc_message='Pre-validation failed: b\'Error: regex("^(add|remove)$") fails for line: ' '1, column: change_type, value: "ADD"\\nFAIL')
valid_zip_data_file_path], obj={'APP_CONFIG': mocked_config}) with db_conn.cursor() as cursor: cursor.execute('SELECT uid, imei_norm FROM device_association_list ORDER BY uid, imei_norm') # noqa: Q440 res = {(res.uid, res.imei_norm) for res in cursor.fetchall()} assert result.exit_code == 0 assert len(res) == 3 assert res == {('3536260220456285', '11108080805796'), ('3541200302086361', '11108951160476'), ('3567120606015081', '11108864102404')} @pytest.mark.parametrize('device_association_list_importer', [DeviceAssociationListParams(filename='association_list_insensitive_header.csv')], indirect=True) def test_case_insensitive_headers(device_association_list_importer, logger, db_conn): """Verify that the association list file is accepted and imported if the headers have mixed cases.""" expect_success(device_association_list_importer, 1, db_conn, logger) @pytest.mark.parametrize('device_association_list_importer', [DeviceAssociationListParams(filename='association_list_duplicate_record.csv')], indirect=True) def test_duplicate_check_override(device_association_list_importer, logger, db_conn): """Verify that if duplicate record exists in the file, only one record gets written to the db.""" expect_success(device_association_list_importer, 1, db_conn, logger) @pytest.mark.parametrize('device_association_list_importer',