test_worker_utils.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from gpustack.routes.workers import (
  2. filter_workers_by_fields,
  3. find_available_worker_name,
  4. retry_create_unique_worker_uuid,
  5. )
  6. class DummyWorker:
  7. def __init__(self, name, worker_uuid, cluster_id, deleted_at=None, labels=None):
  8. self.name = name
  9. self.worker_uuid = worker_uuid
  10. self.cluster_id = cluster_id
  11. self.deleted_at = deleted_at
  12. self.labels = labels or {}
  13. def test_filter_workers_by_fields_exact():
  14. workers = [
  15. DummyWorker("foo", "uuid1", 1),
  16. DummyWorker("bar", "uuid2", 1),
  17. DummyWorker("baz", "uuid3", 2),
  18. ]
  19. result = filter_workers_by_fields(workers, {"name": "foo", "cluster_id": 1})
  20. assert len(result) == 1
  21. assert result[0].name == "foo"
  22. def test_filter_workers_by_fields_fuzzy():
  23. workers = [
  24. DummyWorker("foo-worker", "uuid1", 1),
  25. DummyWorker("bar-worker", "uuid2", 1),
  26. DummyWorker("baz", "uuid3", 2),
  27. ]
  28. result = filter_workers_by_fields(
  29. workers, {"cluster_id": 1}, fuzzy_fields={"name": "foo"}
  30. )
  31. assert len(result) == 1
  32. assert result[0].name == "foo-worker"
  33. def test_find_available_worker_name_basic():
  34. related_names = {"foo", "foo-1", "foo-2"}
  35. assert find_available_worker_name("foo", "foo", related_names) == "foo-3"
  36. assert find_available_worker_name("foo", "foo-2", related_names) == "foo-3"
  37. assert find_available_worker_name("foo", "foo-1", related_names) == "foo-3"
  38. assert find_available_worker_name("foo", "foo-10", related_names) == "foo-11"
  39. assert find_available_worker_name("foo", "foo", set()) == "foo"
  40. def test_retry_create_unique_worker_uuid():
  41. # Simulate existing uuids
  42. class Dummy:
  43. def __init__(self, worker_uuid, cluster_id):
  44. self.worker_uuid = worker_uuid
  45. self.cluster_id = cluster_id
  46. existing = [Dummy("uuid1", 1), Dummy("uuid2", 1), Dummy("uuid3", 2)]
  47. # Patch uuid4 to control output
  48. import uuid
  49. orig_uuid4 = uuid.uuid4
  50. uuids = iter(["uuid1", "uuid2", "unique-uuid"])
  51. uuid.uuid4 = lambda: next(uuids)
  52. result = retry_create_unique_worker_uuid(existing)
  53. assert result == "unique-uuid"
  54. uuid.uuid4 = orig_uuid4