aos_version_test.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import pytest
  2. import aos_version
  3. from collections import namedtuple
  4. Package = namedtuple('Package', ['name', 'version'])
  5. expected_pkgs = set(['spam', 'eggs'])
  6. @pytest.mark.parametrize('pkgs, requested_release, expect_not_found', [
  7. (
  8. [],
  9. '3.2.1',
  10. expected_pkgs, # none found
  11. ),
  12. (
  13. [Package('spam', '3.2.1')],
  14. '3.2',
  15. ['eggs'], # completely missing
  16. ),
  17. (
  18. [Package('spam', '3.2.1'), Package('eggs', '3.3.2')],
  19. '3.2',
  20. ['eggs'], # not the right version
  21. ),
  22. (
  23. [Package('spam', '3.2.1'), Package('eggs', '3.2.1')],
  24. '3.2',
  25. [], # all found
  26. ),
  27. (
  28. [Package('spam', '3.2.1'), Package('eggs', '3.2.1.5')],
  29. '3.2.1',
  30. [], # found with more specific version
  31. ),
  32. (
  33. [Package('eggs', '1.2.3'), Package('eggs', '3.2.1.5')],
  34. '3.2.1',
  35. ['spam'], # eggs found with multiple versions
  36. ),
  37. ])
  38. def test_check_pkgs_for_precise_version(pkgs, requested_release, expect_not_found):
  39. if expect_not_found:
  40. with pytest.raises(aos_version.PreciseVersionNotFound) as e:
  41. aos_version._check_precise_version_found(pkgs, expected_pkgs, requested_release)
  42. assert set(expect_not_found) == set(e.value.problem_pkgs)
  43. else:
  44. aos_version._check_precise_version_found(pkgs, expected_pkgs, requested_release)
  45. @pytest.mark.parametrize('pkgs, requested_release, expect_higher', [
  46. (
  47. [],
  48. '3.2.1',
  49. [],
  50. ),
  51. (
  52. [Package('spam', '3.2.1')],
  53. '3.2',
  54. [], # more precise but not strictly higher
  55. ),
  56. (
  57. [Package('spam', '3.3')],
  58. '3.2.1',
  59. ['spam-3.3'], # lower precision, but higher
  60. ),
  61. (
  62. [Package('spam', '3.2.1'), Package('eggs', '3.3.2')],
  63. '3.2',
  64. ['eggs-3.3.2'], # one too high
  65. ),
  66. (
  67. [Package('eggs', '1.2.3'), Package('eggs', '3.2.1.5'), Package('eggs', '3.4')],
  68. '3.2.1',
  69. ['eggs-3.4'], # multiple versions, one is higher
  70. ),
  71. (
  72. [Package('eggs', '3.2.1'), Package('eggs', '3.4'), Package('eggs', '3.3')],
  73. '3.2.1',
  74. ['eggs-3.4'], # multiple versions, two are higher
  75. ),
  76. ])
  77. def test_check_pkgs_for_greater_version(pkgs, requested_release, expect_higher):
  78. if expect_higher:
  79. with pytest.raises(aos_version.FoundHigherVersion) as e:
  80. aos_version._check_higher_version_found(pkgs, expected_pkgs, requested_release)
  81. assert set(expect_higher) == set(e.value.problem_pkgs)
  82. else:
  83. aos_version._check_higher_version_found(pkgs, expected_pkgs, requested_release)
  84. @pytest.mark.parametrize('pkgs, expect_to_flag_pkgs', [
  85. (
  86. [],
  87. [],
  88. ),
  89. (
  90. [Package('spam', '3.2.1')],
  91. [],
  92. ),
  93. (
  94. [Package('spam', '3.2.1'), Package('eggs', '3.2.2')],
  95. [],
  96. ),
  97. (
  98. [Package('spam', '3.2.1'), Package('spam', '3.3.2')],
  99. ['spam'],
  100. ),
  101. (
  102. [Package('eggs', '1.2.3'), Package('eggs', '3.2.1.5'), Package('eggs', '3.4')],
  103. ['eggs'],
  104. ),
  105. ])
  106. def test_check_pkgs_for_multi_release(pkgs, expect_to_flag_pkgs):
  107. if expect_to_flag_pkgs:
  108. with pytest.raises(aos_version.FoundMultiRelease) as e:
  109. aos_version._check_multi_minor_release(pkgs, expected_pkgs)
  110. assert set(expect_to_flag_pkgs) == set(e.value.problem_pkgs)
  111. else:
  112. aos_version._check_multi_minor_release(pkgs, expected_pkgs)