test_usage_snapshots.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from sqlalchemy import ForeignKeyConstraint
  2. from gpustack.schemas.api_keys import ApiKey
  3. from gpustack.schemas.model_usage import ModelUsage
  4. from gpustack.schemas.clusters import Cluster, ClusterProvider
  5. from gpustack.schemas.users import User
  6. from gpustack.utils.usage_snapshots import build_model_usage_snapshot
  7. from tests.utils.model import new_model
  8. def test_build_model_usage_snapshot_includes_cluster_fields():
  9. cluster = Cluster(id=9, name="cluster-a", provider=ClusterProvider.Docker)
  10. model = new_model(
  11. 1,
  12. "qwen3.5-9b",
  13. huggingface_repo_id="Qwen/Qwen3.5-9B",
  14. cluster_id=cluster.id,
  15. )
  16. model.cluster = cluster
  17. snapshot = build_model_usage_snapshot(model)
  18. assert snapshot == {
  19. "model_id": 1,
  20. "model_name": "qwen3.5-9b",
  21. "cluster_name": "cluster-a",
  22. "owner_principal_id": 1,
  23. }
  24. def test_build_model_usage_snapshot_includes_user_and_api_key_fields():
  25. model = new_model(
  26. 1,
  27. "qwen3.5-9b",
  28. huggingface_repo_id="Qwen/Qwen3.5-9B",
  29. )
  30. user = User(id=2, username="alice", hashed_password="x")
  31. api_key = ApiKey(
  32. id=5,
  33. name="test",
  34. user_id=2,
  35. access_key="abcd1234",
  36. hashed_secret_key="secret",
  37. )
  38. snapshot = build_model_usage_snapshot(model, user=user, api_key=api_key)
  39. assert snapshot["user_id"] == 2
  40. assert snapshot["user_name"] == "alice"
  41. assert snapshot["api_key_id"] == 5
  42. assert snapshot["api_key_name"] == "test"
  43. assert snapshot["access_key"] == "abcd1234"
  44. assert snapshot["api_key_is_custom"] is False
  45. def test_model_usage_foreign_keys_use_set_null():
  46. foreign_keys = {
  47. tuple(column.name for column in constraint.columns): constraint
  48. for constraint in ModelUsage.__table__.constraints
  49. if isinstance(constraint, ForeignKeyConstraint)
  50. }
  51. assert foreign_keys[("model_id",)].elements[0].ondelete == "SET NULL"
  52. assert foreign_keys[("user_id",)].elements[0].ondelete == "SET NULL"
  53. assert foreign_keys[("provider_id",)].elements[0].ondelete == "SET NULL"
  54. assert foreign_keys[("api_key_id",)].elements[0].ondelete == "SET NULL"