]> git.decadent.org.uk Git - dak.git/commitdiff
Merge branch 'master' into dbtests
authorTorsten Werner <twerner@debian.org>
Fri, 18 Feb 2011 17:23:01 +0000 (18:23 +0100)
committerTorsten Werner <twerner@debian.org>
Fri, 18 Feb 2011 17:23:01 +0000 (18:23 +0100)
daklib/dbconn.py
tests/dbtest_contents.py [new file with mode: 0755]
tests/dbtest_packages.py

index e5db1644ced02390ad1cf2fcc8b446151c4f9ae8..7221d243f226970ad91fcfce89992098d04dbe7a 100755 (executable)
@@ -467,7 +467,11 @@ __all__.append('get_archive')
 ################################################################################
 
 class BinContents(ORMObject):
-    def properties(silf):
+    def __init__(self, file = None, binary = None):
+        self.file = file
+        self.binary = binary
+
+    def properties(self):
         return ['file', 'binary']
 
 __all__.append('BinContents')
@@ -907,8 +911,8 @@ class Component(ORMObject):
         return NotImplemented
 
     def properties(self):
-        return ['component_name', 'component_id', 'description', 'location', \
-            'meets_dfsg']
+        return ['component_name', 'component_id', 'description', \
+            'location_count', 'meets_dfsg', 'overrides_count']
 
     def not_null_constraints(self):
         return ['component_name']
@@ -1869,12 +1873,15 @@ __all__.append('get_override')
 
 ################################################################################
 
-class OverrideType(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class OverrideType(ORMObject):
+    def __init__(self, overridetype = None):
+        self.overridetype = overridetype
 
-    def __repr__(self):
-        return '<OverrideType %s>' % self.overridetype
+    def properties(self):
+        return ['overridetype', 'overridetype_id', 'overrides_count']
+
+    def not_null_constraints(self):
+        return ['overridetype']
 
 __all__.append('OverrideType')
 
@@ -2071,9 +2078,16 @@ __all__.append('get_policy_queue_from_path')
 
 ################################################################################
 
-class Priority(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Priority(ORMObject):
+    def __init__(self, priority = None, level = None):
+        self.priority = priority
+        self.level = level
+
+    def properties(self):
+        return ['priority', 'priority_id', 'level', 'overrides_count']
+
+    def not_null_constraints(self):
+        return ['priority', 'level']
 
     def __eq__(self, val):
         if isinstance(val, str):
@@ -2087,9 +2101,6 @@ class Priority(object):
         # This signals to use the normal comparison operator
         return NotImplemented
 
-    def __repr__(self):
-        return '<Priority %s (%s)>' % (self.priority, self.priority_id)
-
 __all__.append('Priority')
 
 @session_wrapper
@@ -2141,9 +2152,15 @@ __all__.append('get_priorities')
 
 ################################################################################
 
-class Section(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Section(ORMObject):
+    def __init__(self, section = None):
+        self.section = section
+
+    def properties(self):
+        return ['section', 'section_id', 'overrides_count']
+
+    def not_null_constraints(self):
+        return ['section']
 
     def __eq__(self, val):
         if isinstance(val, str):
@@ -2157,9 +2174,6 @@ class Section(object):
         # This signals to use the normal comparison operator
         return NotImplemented
 
-    def __repr__(self):
-        return '<Section %s>' % self.section
-
 __all__.append('Section')
 
 @session_wrapper
@@ -2602,7 +2616,8 @@ class Suite(ORMObject):
         self.version = version
 
     def properties(self):
-        return ['suite_name', 'version', 'sources_count', 'binaries_count']
+        return ['suite_name', 'version', 'sources_count', 'binaries_count', \
+            'overrides_count']
 
     def not_null_constraints(self):
         return ['suite_name', 'version']
@@ -2872,7 +2887,9 @@ class DBConn(object):
             'binary_acl',
             'binary_acl_map',
             'build_queue',
+            'build_queue_files',
             'changelogs_text',
+            'changes',
             'component',
             'config',
             'changes_pending_binaries',
@@ -2899,11 +2916,6 @@ class DBConn(object):
             'suite',
             'uid',
             'upload_blocks',
-            # The following tables have primary keys but sqlalchemy
-            # version 0.5 fails to reflect them correctly with database
-            # versions before upgrade #41.
-            'changes',
-            'build_queue_files',
         )
 
         tables_no_primary = (
@@ -2916,9 +2928,6 @@ class DBConn(object):
             'suite_src_formats',
             'suite_build_queue_copy',
             'udeb_contents',
-            # see the comment above
-            #'changes',
-            #'build_queue_files',
         )
 
         views = (
@@ -3136,8 +3145,7 @@ class DBConn(object):
         mapper(Location, self.tbl_location,
                properties = dict(location_id = self.tbl_location.c.id,
                                  component_id = self.tbl_location.c.component,
-                                 component = relation(Component, \
-                                     backref=backref('location', uselist = False)),
+                                 component = relation(Component, backref='location'),
                                  archive_id = self.tbl_location.c.archive,
                                  archive = relation(Archive),
                                  # FIXME: the 'type' column is old cruft and
@@ -3158,16 +3166,21 @@ class DBConn(object):
 
         mapper(Override, self.tbl_override,
                properties = dict(suite_id = self.tbl_override.c.suite,
-                                 suite = relation(Suite),
+                                 suite = relation(Suite, \
+                                    backref=backref('overrides', lazy='dynamic')),
                                  package = self.tbl_override.c.package,
                                  component_id = self.tbl_override.c.component,
-                                 component = relation(Component),
+                                 component = relation(Component, \
+                                    backref=backref('overrides', lazy='dynamic')),
                                  priority_id = self.tbl_override.c.priority,
-                                 priority = relation(Priority),
+                                 priority = relation(Priority, \
+                                    backref=backref('overrides', lazy='dynamic')),
                                  section_id = self.tbl_override.c.section,
-                                 section = relation(Section),
+                                 section = relation(Section, \
+                                    backref=backref('overrides', lazy='dynamic')),
                                  overridetype_id = self.tbl_override.c.type,
-                                 overridetype = relation(OverrideType)))
+                                 overridetype = relation(OverrideType, \
+                                    backref=backref('overrides', lazy='dynamic'))))
 
         mapper(OverrideType, self.tbl_override_type,
                properties = dict(overridetype = self.tbl_override_type.c.type,
diff --git a/tests/dbtest_contents.py b/tests/dbtest_contents.py
new file mode 100755 (executable)
index 0000000..d4f57ad
--- /dev/null
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import DBConn, BinContents, OverrideType, get_override_type, \
+    Section, get_section, get_sections, Priority, get_priority, get_priorities
+
+from sqlalchemy.exc import FlushError, IntegrityError
+import unittest
+
+class ContentsTestCase(DBDakTestCase):
+    """
+    This TestCase checks the behaviour of contents generation.
+    """
+
+    def test_duplicates1(self):
+        '''
+        Test the BinContents class for duplication problems.
+        '''
+        self.setup_binaries()
+        contents1 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents1)
+        self.session.flush()
+        # test duplicates
+        contents2 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents2)
+        self.assertRaises(FlushError, self.session.flush)
+
+    def test_duplicates2(self):
+        '''
+        Test the BinContents class for more duplication problems.
+        '''
+        self.setup_binaries()
+        contents1 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents1)
+        contents2 = BinContents(file = 'usr/bin/gruezi', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents2)
+        self.session.flush()
+        # test duplicates
+        contents2.file = 'usr/bin/hello'
+        self.assertRaises(IntegrityError, self.session.flush)
+
+    def test_duplicates3(self):
+        '''
+        Test the BinContents class even more.
+        '''
+        self.setup_binaries()
+        contents1 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents1)
+        # same file in different binary packages should be okay
+        contents2 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['gnome-hello_2.2-1_i386'])
+        self.session.add(contents2)
+        self.session.flush()
+
+    def test_overridetype(self):
+        '''
+        Test the OverrideType class.
+        '''
+        debtype = OverrideType(overridetype = 'deb')
+        self.session.add(debtype)
+        self.session.flush()
+        self.assertEqual('deb', debtype.overridetype)
+        self.assertEqual(0, debtype.overrides.count())
+        self.assertEqual(debtype, get_override_type('deb', self.session))
+
+    def test_section(self):
+        '''
+        Test Section class.
+        '''
+        section = Section(section = 'python')
+        self.session.add(section)
+        self.session.flush()
+        self.assertEqual('python', section.section)
+        self.assertEqual('python', section)
+        self.assertTrue(section != 'java')
+        self.assertEqual(section, get_section('python', self.session))
+        all_sections = get_sections(self.session)
+        self.assertEqual(section.section_id, all_sections['python'])
+        self.assertEqual(0, section.overrides.count())
+
+    def test_priority(self):
+        '''
+        Test Priority class.
+        '''
+        priority = Priority(priority = 'standard', level = 7)
+        self.session.add(priority)
+        self.session.flush()
+        self.assertEqual('standard', priority.priority)
+        self.assertEqual(7, priority.level)
+        self.assertEqual('standard', priority)
+        self.assertTrue(priority != 'extra')
+        self.assertEqual(priority, get_priority('standard', self.session))
+        all_priorities = get_priorities(self.session)
+        self.assertEqual(priority.priority_id, all_priorities['standard'])
+        self.assertEqual(0, priority.overrides.count())
+
+if __name__ == '__main__':
+    unittest.main()
index f25884cebd95ddaed938cccdee0a46185c0f9bbd..32c1b8c5c72a9fb3428e32c289261e860e327115 100755 (executable)
@@ -66,6 +66,8 @@ class PackageTestCase(DBDakTestCase):
         suites = get_architecture_suites('kfreebsd-i386', self.session)
         self.assertEqual(2, len(suites))
         self.assertTrue(self.suite['lenny'] not in suites)
+        # check overrides
+        self.assertEqual(0, self.suite['lenny'].overrides.count())
 
     def test_poolfiles(self):
         '''
@@ -370,8 +372,9 @@ class PackageTestCase(DBDakTestCase):
     def test_components(self):
         'test class Component'
 
-        self.assertEqual(self.loc['main'], self.comp['main'].location)
-        self.assertEqual(self.loc['contrib'], self.comp['contrib'].location)
+        self.assertEqual([self.loc['main']], self.comp['main'].location)
+        self.assertEqual([self.loc['contrib']], self.comp['contrib'].location)
+        self.assertEqual(0, self.comp['main'].overrides.count())
 
     def test_get_component_by_package_suite(self):
         'test get_component_by_package_suite()'