Special tasks show "Failed" as their status instead of "Completed" if
they failed

Signed-off-by: James Ren <jamesren@google.com>


git-svn-id: http://test.kernel.org/svn/autotest/trunk@3946 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/afe/models.py b/frontend/afe/models.py
index e2909f8..5a42742 100644
--- a/frontend/afe/models.py
+++ b/frontend/afe/models.py
@@ -938,6 +938,7 @@
     is_complete = dbmodels.BooleanField(default=False, blank=False, null=False)
     time_started = dbmodels.DateTimeField(null=True, blank=True)
     queue_entry = dbmodels.ForeignKey(HostQueueEntry, blank=True, null=True)
+    success = dbmodels.BooleanField(default=False, blank=False, null=False)
 
     objects = model_logic.ExtendedManager()
 
@@ -957,7 +958,9 @@
         present similar statuses.
         """
         if self.is_complete:
-            return HostQueueEntry.Status.COMPLETED
+            if self.success:
+                return HostQueueEntry.Status.COMPLETED
+            return HostQueueEntry.Status.FAILED
         if self.is_active:
             return HostQueueEntry.Status.RUNNING
         return HostQueueEntry.Status.QUEUED
@@ -992,13 +995,14 @@
         self.save()
 
 
-    def finish(self):
+    def finish(self, success):
         """
         Sets a task as completed
         """
         logging.info('Finished: %s', self)
         self.is_active = False
         self.is_complete = True
+        self.success = success
         self.save()
 
 
diff --git a/frontend/afe/models_test.py b/frontend/afe/models_test.py
index 47932e0..734be2a 100755
--- a/frontend/afe/models_test.py
+++ b/frontend/afe/models_test.py
@@ -92,9 +92,12 @@
         task.update_object(is_active=True)
         self.assertEquals(task.status, 'Running')
 
-        task.update_object(is_active=False, is_complete=True)
+        task.update_object(is_active=False, is_complete=True, success=True)
         self.assertEquals(task.status, 'Completed')
 
+        task.update_object(success=False)
+        self.assertEquals(task.status, 'Failed')
+
 
     def test_activate(self):
         task = self._create_task()
@@ -106,9 +109,10 @@
     def test_finish(self):
         task = self._create_task()
         task.activate()
-        task.finish()
+        task.finish(True)
         self.assertFalse(task.is_active)
         self.assertTrue(task.is_complete)
+        self.assertTrue(task.success)
 
 
 if __name__ == '__main__':
diff --git a/frontend/migrations/041_add_special_task_success.py b/frontend/migrations/041_add_special_task_success.py
new file mode 100644
index 0000000..2000088
--- /dev/null
+++ b/frontend/migrations/041_add_special_task_success.py
@@ -0,0 +1,14 @@
+UP_SQL = """
+ALTER TABLE special_tasks
+ADD COLUMN success TINYINT(1)
+NOT NULL DEFAULT 0;
+
+UPDATE special_tasks
+SET success = 1
+WHERE is_complete = 1;
+"""
+
+DOWN_SQL = """
+ALTER TABLE special_tasks
+DROP COLUMN success;
+"""