test_worker.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # -*- coding:utf-8 -*-
  2. import random
  3. import textwrap
  4. from pathlib import Path
  5. import pytest
  6. from dw_base.datax.worker import load_workers_ini, select_worker
  7. @pytest.fixture
  8. def pool_ini(tmp_path: Path) -> str:
  9. p = tmp_path / 'workers.ini'
  10. p.write_text(textwrap.dedent('''\
  11. [release]
  12. host = cdhmaster02
  13. [weights]
  14. cdhmaster02 = 1
  15. cdhnode01 = 3
  16. cdhnode02 = 3
  17. cdhnode03 = 3
  18. '''))
  19. return str(p)
  20. def test_load_workers_ini(pool_ini):
  21. pool = load_workers_ini(pool_ini)
  22. assert pool.release_host == 'cdhmaster02'
  23. assert pool.weights == {'cdhmaster02': 1, 'cdhnode01': 3, 'cdhnode02': 3, 'cdhnode03': 3}
  24. assert len(pool.queue) == 10
  25. assert pool.queue.count('cdhnode01') == 3
  26. assert pool.queue.count('cdhmaster02') == 1
  27. def test_select_worker_non_release_user_falls_back_local(pool_ini):
  28. pool = load_workers_ini(pool_ini)
  29. assert select_worker(pool, is_release_user=False, is_in_release_dir=True,
  30. current_host='dev-box', use_random=True) == 'dev-box'
  31. def test_select_worker_outside_release_dir_falls_back_local(pool_ini):
  32. pool = load_workers_ini(pool_ini)
  33. assert select_worker(pool, is_release_user=True, is_in_release_dir=False,
  34. current_host='cdhmaster02', use_random=True) == 'cdhmaster02'
  35. def test_select_worker_explicit_host_overrides_random(pool_ini):
  36. pool = load_workers_ini(pool_ini)
  37. assert select_worker(pool, is_release_user=True, is_in_release_dir=True,
  38. current_host='cdhmaster02',
  39. host='cdhnode02', use_random=True) == 'cdhnode02'
  40. def test_select_worker_random_pick_in_queue(pool_ini):
  41. pool = load_workers_ini(pool_ini)
  42. rand = random.Random(42)
  43. pick = select_worker(pool, is_release_user=True, is_in_release_dir=True,
  44. current_host='cdhmaster02', use_random=True, rand=rand)
  45. assert pick in pool.queue
  46. def test_select_worker_nothing_specified_falls_back_local(pool_ini):
  47. pool = load_workers_ini(pool_ini)
  48. assert select_worker(pool, is_release_user=True, is_in_release_dir=True,
  49. current_host='cdhmaster02') == 'cdhmaster02'