dbtest_metadata.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #! /usr/bin/env python3
  2. import unittest
  3. from db_test import DBDakTestCase
  4. from daklib.dbconn import BinaryMetadata, SourceMetadata, get_or_set_metadatakey
  5. class MetadataTestCase(DBDakTestCase):
  6. """
  7. This TestCase checks the metadata handling.
  8. """
  9. metadata = False
  10. def setup_metadata(self):
  11. """
  12. Setup the metadata objects.
  13. """
  14. if self.metadata:
  15. return
  16. self.setup_binaries()
  17. self.depends = get_or_set_metadatakey("Depends")
  18. self.session.add(self.depends)
  19. self.session.flush()
  20. self.bin_hello = self.binary["hello_2.2-1_i386"]
  21. self.src_hello = self.bin_hello.source
  22. self.session.add(self.bin_hello)
  23. self.session.add(self.src_hello)
  24. self.hello_dep = BinaryMetadata(self.depends, "foobar (>= 1.0)", self.bin_hello)
  25. self.session.add(self.hello_dep)
  26. self.recommends = get_or_set_metadatakey("Recommends")
  27. self.bin_hello.key[self.recommends] = BinaryMetadata(self.recommends, "goodbye")
  28. self.build_dep = get_or_set_metadatakey("Build-Depends")
  29. self.hello_bd = SourceMetadata(self.build_dep, "foobar-dev", self.src_hello)
  30. self.session.add(self.hello_bd)
  31. self.homepage = get_or_set_metadatakey("Homepage")
  32. self.src_hello.key[self.homepage] = SourceMetadata(
  33. self.homepage, "http://debian.org"
  34. )
  35. self.session.flush()
  36. self.metadata = True
  37. def test_mappers(self):
  38. """
  39. Tests the mapper configuration.
  40. """
  41. self.setup_metadata()
  42. # MetadataKey
  43. self.assertTrue(self.depends.key_id is not None)
  44. # BinaryMetadata
  45. self.assertEqual("hello", self.hello_dep.binary.package)
  46. self.assertEqual("Depends", self.hello_dep.key.key)
  47. self.assertEqual("foobar (>= 1.0)", self.hello_dep.value)
  48. # SourceMetadata
  49. self.assertEqual("hello", self.hello_bd.source.source)
  50. self.assertEqual("Build-Depends", self.hello_bd.key.key)
  51. self.assertEqual("foobar-dev", self.hello_bd.value)
  52. # DBBinary relation
  53. self.assertEqual(self.hello_dep, self.bin_hello.key[self.depends])
  54. self.assertEqual("goodbye", self.bin_hello.key[self.recommends].value)
  55. # DBSource relation
  56. self.assertEqual(self.hello_bd, self.src_hello.key[self.build_dep])
  57. self.assertEqual("http://debian.org", self.src_hello.key[self.homepage].value)
  58. def test_association_proxy(self):
  59. """
  60. Test the association proxies 'metadata' in DBBinary and DBSource.
  61. """
  62. self.setup_metadata()
  63. # DBBinary association proxy
  64. essential = get_or_set_metadatakey("Essential")
  65. self.bin_hello.metadata[essential] = "yes"
  66. self.session.flush()
  67. self.assertEqual("yes", self.bin_hello.metadata[essential])
  68. self.assertEqual("foobar (>= 1.0)", self.bin_hello.metadata[self.depends])
  69. self.assertTrue(self.recommends in self.bin_hello.metadata)
  70. # DBSource association proxy
  71. std_version = get_or_set_metadatakey("Standards-Version")
  72. self.src_hello.metadata[std_version] = "3.9.1"
  73. self.session.flush()
  74. self.assertEqual("3.9.1", self.src_hello.metadata[std_version])
  75. self.assertEqual("http://debian.org", self.src_hello.metadata[self.homepage])
  76. self.assertTrue(self.depends not in self.src_hello.metadata)
  77. def test_delete(self):
  78. """
  79. Tests the delete / cascading behaviour.
  80. """
  81. self.setup_metadata()
  82. self.session.delete(self.bin_hello)
  83. # Remove associated binaries because we have no cascading rule for
  84. # them.
  85. for binary in self.src_hello.binaries:
  86. self.session.delete(binary)
  87. self.session.delete(self.src_hello)
  88. self.session.flush()
  89. if __name__ == "__main__":
  90. unittest.main()