def test_get_stats_limited_ordering(populated_database):
    test_data, databases = populated_database
    all_stats = mod.get_stats(databases.librarian, limit=None)
    oldest_two_stats = mod.get_stats(databases.librarian, limit=2)
    assert all_stats[0]['time'] == oldest_two_stats[0]['time']
    assert all_stats[1]['time'] == oldest_two_stats[1]['time']
    assert oldest_two_stats[0]['time'] < oldest_two_stats[1]['time']
def test_clear_transmitted(populated_database):
    test_data, databases = populated_database
    stats = mod.get_stats(databases.librarian, limit=None)
    # We want to set one item aside to prevent it from being cleared
    first = stats.pop(0)
    ids = [s['id'] for s in stats]
    mod.clear_transmitted(databases.librarian, ids)
    stats = mod.get_stats(databases.librarian, limit=None)
    assert len(stats) == 1
    assert stats[0]['id'] == first['id']
def test_cleanup_stats(sorted_database):
    max_records = 2
    test_data, databases = sorted_database
    stats_before = mod.get_stats(databases.librarian, limit=None)
    rowcount = mod.cleanup_stats(databases.librarian, max_records=max_records)
    stats_after = mod.get_stats(databases.librarian, limit=None)
    assert len(stats_after) == max_records
    assert rowcount == len(test_data) - max_records
    # make sure the stats found after the cleanup are the stats that were the
    # last ones in the results set acquired before cleanup
    expected = stats_before[-max_records:]
    assert all([a['id'] == b['id'] for (a, b) in zip(stats_after, expected)])
def test_get_stats(populated_database):
    test_data, databases = populated_database
    stats = mod.get_stats(databases.librarian, limit=None)
    raw_payload = stats[0]['payload']
    payload = bytes(raw_payload)
    assert isinstance(raw_payload, types.BufferType)
    assert len(stats) == len(test_data)
    assert payload in [d.payload for d in test_data]
def test_save_stats(random_datapoint, databases):
    data = {
        'time': random_datapoint.timestamp,
        'payload': random_datapoint.payload
    }
    mod.save_stats(databases.librarian, data)
    stats = mod.get_stats(databases.librarian, limit=None)
    assert len(stats) == 1
    assert bytes(stats[0]['payload']) == random_datapoint.payload
def test_clear_transmitted_with_no_ids(populated_database):
    test_data, databases = populated_database
    mod.clear_transmitted(databases.librarian, [])
    stats = mod.get_stats(databases.librarian, len(test_data))
    assert len(stats) == len(test_data)  # original number of items