changeset 553:98151eb9f1a5

If a target platform is deleted, any pending builds for that platform should be removed `[silk]` - fixes #382
author dfraser
date Wed, 08 Apr 2009 05:14:04 +0000
parents f20c079c17a7
children 2c27f3581100
files bitten/model.py bitten/tests/model.py
diffstat 2 files changed, 38 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/bitten/model.py
+++ b/bitten/model.py
@@ -219,6 +219,9 @@
         else:
             handle_ta = False
 
+        for build in Build.select(self.env, platform=self.id, status=Build.PENDING, db=db):
+            build.delete()
+
         cursor = db.cursor()
         cursor.execute("DELETE FROM bitten_rule WHERE id=%s", (self.id,))
         cursor.execute("DELETE FROM bitten_platform WHERE id=%s", (self.id,))
--- a/bitten/tests/model.py
+++ b/bitten/tests/model.py
@@ -773,6 +773,40 @@
         self.assertEqual(1, idx)
 
 
+class PlatformBuildTestCase(unittest.TestCase):
+    """Tests that involve Builds, TargetPlatforms and BuildSteps"""
+
+    def setUp(self):
+        self.env = EnvironmentStub()
+        self.env.path = tempfile.mkdtemp()
+        logs_dir = self.env.config.get("bitten", "logs_dir")
+        if os.path.isabs(logs_dir):
+            raise ValueError("Should not have absolute logs directory for temporary test")
+        logs_dir = os.path.join(self.env.path, logs_dir)
+        os.makedirs(logs_dir)
+
+        db = self.env.get_db_cnx()
+        cursor = db.cursor()
+        connector, _ = DatabaseManager(self.env)._get_connector()
+        for schema in [Build._schema, TargetPlatform._schema, BuildStep._schema]: 
+            for table in schema:
+                for stmt in connector.to_sql(table):
+                    cursor.execute(stmt)
+        db.commit()
+
+    def test_delete_platform_with_pending_builds(self):
+        """Check that deleting a platform with pending builds removes those pending builds"""
+        db = self.env.get_db_cnx()
+        platform = TargetPlatform(self.env, config='test', name='Linux')
+        platform.insert()
+        build = Build(self.env, config='test', platform=platform.id, rev='42', rev_time=12039)
+        build.insert()
+
+        platform.delete()
+        pending = list(build.select(self.env, config='test', status=Build.PENDING))
+        self.assertEqual(0, len(pending))
+
+
 def suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(BuildConfigTestCase, 'test'))
@@ -781,6 +815,7 @@
     suite.addTest(unittest.makeSuite(BuildStepTestCase, 'test'))
     suite.addTest(unittest.makeSuite(BuildLogTestCase, 'test'))
     suite.addTest(unittest.makeSuite(ReportTestCase, 'test'))
+    suite.addTest(unittest.makeSuite(PlatformBuildTestCase, 'test'))
     return suite
 
 if __name__ == '__main__':
Copyright (C) 2012-2017 Edgewall Software