aos_version_test.py 4.0 KB

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