mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
test: Add tests for user/package statistics
Signed-off-by: moson <moson@archlinux.org>
This commit is contained in:
parent
8699457917
commit
6cd70a5c9f
1 changed files with 125 additions and 0 deletions
125
test/test_statistics.py
Normal file
125
test/test_statistics.py
Normal file
|
@ -0,0 +1,125 @@
|
|||
import pytest
|
||||
from prometheus_client import REGISTRY, generate_latest
|
||||
|
||||
from aurweb import cache, db, time
|
||||
from aurweb.models.account_type import TRUSTED_USER_ID, USER_ID
|
||||
from aurweb.models.package import Package
|
||||
from aurweb.models.package_base import PackageBase
|
||||
from aurweb.models.user import User
|
||||
from aurweb.statistics import Statistics, update_prometheus_metrics
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def setup(db_test):
|
||||
return
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def clear_fakeredis_cache():
|
||||
cache._redis.flushall()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def test_data():
|
||||
# Create some test data (users and packages)
|
||||
with db.begin():
|
||||
for i in range(10):
|
||||
user = db.create(
|
||||
User,
|
||||
Username=f"test{i}",
|
||||
Email=f"test{i}@example.org",
|
||||
RealName=f"Test User {i}",
|
||||
Passwd="testPassword",
|
||||
AccountTypeID=USER_ID,
|
||||
)
|
||||
|
||||
now = time.utcnow()
|
||||
old = now - 60 * 60 * 24 * 8 # 8 days
|
||||
older = now - 60 * 60 * 24 * 400 # 400 days
|
||||
|
||||
pkgbase = db.create(
|
||||
PackageBase,
|
||||
Name=f"test-package{i}",
|
||||
Maintainer=user,
|
||||
SubmittedTS=old,
|
||||
ModifiedTS=now,
|
||||
)
|
||||
db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name)
|
||||
|
||||
# Modify some data to get some variances for our counters
|
||||
if i == 1:
|
||||
user.AccountTypeID = TRUSTED_USER_ID
|
||||
pkgbase.Maintainer = None
|
||||
pkgbase.SubmittedTS = now
|
||||
|
||||
if i == 2:
|
||||
pkgbase.SubmittedTS = older
|
||||
|
||||
if i == 3:
|
||||
pkgbase.SubmittedTS = older
|
||||
pkgbase.ModifiedTS = old
|
||||
yield
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def stats() -> Statistics:
|
||||
yield Statistics()
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"counter, expected",
|
||||
[
|
||||
("package_count", 10),
|
||||
("orphan_count", 1),
|
||||
("seven_days_old_added", 1),
|
||||
("seven_days_old_updated", 8),
|
||||
("year_old_updated", 9),
|
||||
("never_updated", 1),
|
||||
("user_count", 10),
|
||||
("trusted_user_count", 1),
|
||||
("regular_user_count", 9),
|
||||
("updated_packages", 9),
|
||||
("nonsense", -1),
|
||||
],
|
||||
)
|
||||
def test_get_count(stats: Statistics, test_data, counter: str, expected: int):
|
||||
assert stats.get_count(counter) == expected
|
||||
|
||||
|
||||
def test_get_count_change(stats: Statistics, test_data):
|
||||
pkgs_before = stats.get_count("package_count")
|
||||
tus_before = stats.get_count("trusted_user_count")
|
||||
|
||||
assert pkgs_before == 10
|
||||
assert tus_before == 1
|
||||
|
||||
# Let's delete a package and promote a user to TU
|
||||
with db.begin():
|
||||
pkgbase = db.query(PackageBase).first()
|
||||
db.delete(pkgbase)
|
||||
|
||||
user = db.query(User).filter(User.AccountTypeID == USER_ID).first()
|
||||
user.AccountTypeID = TRUSTED_USER_ID
|
||||
|
||||
# Values should end up in (fake) redis cache so they should be the same
|
||||
assert stats.get_count("package_count") == pkgs_before
|
||||
assert stats.get_count("trusted_user_count") == tus_before
|
||||
|
||||
# Let's clear the cache and check again
|
||||
cache._redis.flushall()
|
||||
assert stats.get_count("package_count") != pkgs_before
|
||||
assert stats.get_count("trusted_user_count") != tus_before
|
||||
|
||||
|
||||
def test_update_prometheus_metrics(test_data):
|
||||
metrics = str(generate_latest(REGISTRY))
|
||||
|
||||
assert "aur_users{" not in metrics
|
||||
assert "aur_packages{" not in metrics
|
||||
|
||||
# Let's update our metrics. We should find our gauges now
|
||||
update_prometheus_metrics()
|
||||
metrics = str(generate_latest(REGISTRY))
|
||||
|
||||
assert 'aur_users{type="user"} 9.0' in metrics
|
||||
assert 'aur_packages{state="updated"} 9.0' in metrics
|
Loading…
Add table
Reference in a new issue