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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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',