test_packagelist.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #! /usr/bin/env python3
  2. #
  3. # Copyright (C) 2014, Ansgar Burchardt <ansgar@debian.org>
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 2 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License along
  16. # with this program; if not, write to the Free Software Foundation, Inc.,
  17. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  18. import unittest
  19. from base_test import DakTestCase
  20. from daklib.packagelist import PackageList
  21. class FakeArchitecture:
  22. def __init__(self, name):
  23. self.arch_string = name
  24. class FakeSuite:
  25. def __init__(self, *architectures):
  26. self.architectures = [FakeArchitecture(a) for a in architectures]
  27. source_all = {
  28. "Package-List": "\n libdune-common-doc deb doc optional arch=all\n",
  29. "Binary": "libdune-common-doc\n",
  30. }
  31. source_any = {
  32. "Package-List": "\n libdune-common-dev deb libdevel optional arch=any\n",
  33. "Binary": "libdune-common-dev\n",
  34. }
  35. source_all_any = {
  36. "Package-List": "\n libdune-common-dev deb libdevel optional arch=any\nlibdune-common-doc deb doc optional arch=all\n",
  37. "Binary": "libdune-common-dev, libdune-common-doc\n",
  38. }
  39. source_amd64 = {
  40. "Package-List": "\n libdune-common-dev deb libdevel optional arch=amd64\n",
  41. "Binary": "libdune-common-dev\n",
  42. }
  43. source_linuxany = {
  44. "Package-List": "\n libdune-common-dev deb libdevel optional arch=linux-any\n",
  45. "Binary": "libdune-common-dev\n",
  46. }
  47. source_noarch = {
  48. "Package-List": "\n libdune-common-dev deb libdevel optional\n",
  49. "Binary": "libdune-common-dev\n",
  50. }
  51. source_fallback = {
  52. "Binary": "libdune-common-dev\n",
  53. }
  54. source_profiles = {
  55. "Package-List": "\n pkg-a deb misc optional arch=any profile=!stage1"
  56. "\n pkg-b deb misc optional arch=any profile=!stage1,!stage2"
  57. "\n pkg-c deb misc optional arch=any profile=stage1"
  58. "\n pkg-d deb misc optional arch=any profile=stage1,stage2"
  59. "\n pkg-e deb misc optional arch=any profile=stage1+stage2"
  60. "\n pkg-f deb misc optional arch=any profile=!stage1+!stage2"
  61. "\n pkg-g deb misc optional arch=any profile=!stage1+stage2"
  62. "\n pkg-h deb misc optional arch=any profile=stage1+!stage2"
  63. "\n",
  64. "Binary": "pkg-a, pkg-b, pkg-c, pkg-d, pkg-e, pkg-f, pkg-g, pkg-h\n",
  65. }
  66. class TestPackageList(DakTestCase):
  67. def testArchAll(self):
  68. pl = PackageList(source_all)
  69. self.assertTrue(pl.has_arch_indep_packages())
  70. self.assertFalse(pl.has_arch_dep_packages())
  71. suite_amd64 = FakeSuite("amd64")
  72. p_amd64 = pl.packages_for_suite(suite_amd64)
  73. self.assertEqual(len(p_amd64), 0)
  74. suite_all = FakeSuite("all")
  75. p_all = pl.packages_for_suite(suite_all)
  76. self.assertEqual(len(p_all), 1)
  77. suite_all_amd64 = FakeSuite("amd64", "all")
  78. p_all_amd64 = pl.packages_for_suite(suite_all_amd64)
  79. self.assertEqual(len(p_all_amd64), 1)
  80. p = p_all[0]
  81. self.assertEqual(p.name, "libdune-common-doc")
  82. self.assertEqual(p.type, "deb")
  83. self.assertEqual(p.section, "doc")
  84. self.assertEqual(p.component, "main")
  85. self.assertEqual(p.priority, "optional")
  86. self.assertEqual(p.architectures, ["all"])
  87. def testArchAny(self):
  88. pl = PackageList(source_any)
  89. self.assertFalse(pl.has_arch_indep_packages())
  90. self.assertTrue(pl.has_arch_dep_packages())
  91. suite_amd64 = FakeSuite("amd64")
  92. p_amd64 = pl.packages_for_suite(suite_amd64)
  93. self.assertEqual(len(p_amd64), 1)
  94. suite_all = FakeSuite("all")
  95. p_all = pl.packages_for_suite(suite_all)
  96. self.assertEqual(len(p_all), 0)
  97. suite_all_amd64 = FakeSuite("amd64", "all")
  98. p_all_amd64 = pl.packages_for_suite(suite_all_amd64)
  99. self.assertEqual(len(p_all_amd64), 1)
  100. def testArchAnyAll(self):
  101. pl = PackageList(source_all_any)
  102. self.assertTrue(pl.has_arch_indep_packages())
  103. self.assertTrue(pl.has_arch_dep_packages())
  104. suite_amd64 = FakeSuite("amd64")
  105. p_amd64 = pl.packages_for_suite(suite_amd64)
  106. self.assertEqual(len(p_amd64), 1)
  107. suite_amd64_i386 = FakeSuite("amd64", "i386")
  108. p_amd64_i386 = pl.packages_for_suite(suite_amd64_i386)
  109. self.assertEqual(len(p_amd64_i386), 1)
  110. suite_all = FakeSuite("all")
  111. p_all = pl.packages_for_suite(suite_all)
  112. self.assertEqual(len(p_all), 1)
  113. suite_all_amd64 = FakeSuite("amd64", "all")
  114. p_all_amd64 = pl.packages_for_suite(suite_all_amd64)
  115. self.assertEqual(len(p_all_amd64), 2)
  116. def testArchAmd64(self):
  117. pl = PackageList(source_amd64)
  118. self.assertFalse(pl.has_arch_indep_packages())
  119. self.assertTrue(pl.has_arch_dep_packages())
  120. suite_amd64 = FakeSuite("amd64")
  121. p_amd64 = pl.packages_for_suite(suite_amd64)
  122. self.assertEqual(len(p_amd64), 1)
  123. suite_i386 = FakeSuite("i386")
  124. p_i386 = pl.packages_for_suite(suite_i386)
  125. self.assertEqual(len(p_i386), 0)
  126. def testArchLinuxAny(self):
  127. pl = PackageList(source_linuxany)
  128. self.assertFalse(pl.has_arch_indep_packages())
  129. self.assertTrue(pl.has_arch_dep_packages())
  130. suite_amd64 = FakeSuite("amd64")
  131. p_amd64 = pl.packages_for_suite(suite_amd64)
  132. self.assertEqual(len(p_amd64), 1)
  133. suite_i386 = FakeSuite("i386")
  134. p_i386 = pl.packages_for_suite(suite_i386)
  135. self.assertEqual(len(p_i386), 1)
  136. suite_kfreebsdi386 = FakeSuite("kfreebsd-i386")
  137. p_kfreebsdi386 = pl.packages_for_suite(suite_kfreebsdi386)
  138. self.assertEqual(len(p_kfreebsdi386), 0)
  139. suite_source = FakeSuite("source")
  140. p_source = pl.packages_for_suite(suite_source)
  141. self.assertEqual(len(p_source), 0)
  142. def testNoArch(self):
  143. pl = PackageList(source_noarch)
  144. self.assertIsNone(pl.has_arch_indep_packages())
  145. self.assertIsNone(pl.has_arch_dep_packages())
  146. suite_amd64 = FakeSuite("amd64")
  147. p_amd64 = pl.packages_for_suite(suite_amd64)
  148. self.assertEqual(len(p_amd64), 1)
  149. def testFallback(self):
  150. pl = PackageList(source_fallback)
  151. self.assertIsNone(pl.has_arch_indep_packages())
  152. self.assertIsNone(pl.has_arch_dep_packages())
  153. suite_amd64 = FakeSuite("amd64")
  154. p_amd64 = pl.packages_for_suite(suite_amd64)
  155. self.assertEqual(len(p_amd64), 1)
  156. def testProfiles(self):
  157. pl = PackageList(source_profiles)
  158. self.assertEqual(len(pl.package_list), 8)
  159. built_in_default_profile = {"pkg-a", "pkg-b", "pkg-f", "pkg-g", "pkg-h"}
  160. not_built_in_default_profile = {"pkg-c", "pkg-d", "pkg-e"}
  161. for entry in pl.package_list:
  162. if entry.built_in_default_profile():
  163. self.assertIn(entry.name, built_in_default_profile)
  164. else:
  165. self.assertIn(entry.name, not_built_in_default_profile)
  166. suite_amd64 = FakeSuite("amd64")
  167. ps_only_default = pl.packages_for_suite(suite_amd64)
  168. ps_all = pl.packages_for_suite(suite_amd64, only_default_profile=False)
  169. self.assertSetEqual({p.name for p in ps_only_default}, built_in_default_profile)
  170. self.assertSetEqual(
  171. {p.name for p in ps_all},
  172. built_in_default_profile | not_built_in_default_profile,
  173. )
  174. if __name__ == "__main__":
  175. unittest.main()