All of lore.kernel.org
 help / color / mirror / Atom feed
* [review-request][PATCH 0/4][v2] Fix errors thrown when viewing command line builds while build is running
@ 2015-09-29 15:41 Elliot Smith
  2015-09-29 15:41 ` [review-request][PATCH 1/4] toaster: Always run bldcontrol migrations Elliot Smith
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Elliot Smith @ 2015-09-29 15:41 UTC (permalink / raw)
  To: toaster

* v2: Rebased on master; includes a fix for a test broken during rebase.

Changes since 4bc3f0994e68b3302a0523a3156dd0dca0cac7a0 are in
git://git.yoctoproject.org/poky-contrib, elliot/toaster/cli_builds_error-8277
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=elliot/toaster/cli_builds_error-8277

Related bug: https://bugzilla.yoctoproject.org/show_bug.cgi?id=8277

Elliot Smith (4):
  toaster: Always run bldcontrol migrations
  toaster: Check whether buildrequest exists before using it
  toaster: Test that exception isn't thrown by project page
  toaster: Fix test broken during rebase

 bitbake/bin/toaster                     | 58 ++++++++++++++++++++++-----------
 bitbake/lib/toaster/orm/models.py       | 20 ++++++++++--
 bitbake/lib/toaster/toastergui/tests.py | 39 +++++++++++++++++++++-
 3 files changed, 95 insertions(+), 22 deletions(-)

--
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [review-request][PATCH 1/4] toaster: Always run bldcontrol migrations
  2015-09-29 15:41 [review-request][PATCH 0/4][v2] Fix errors thrown when viewing command line builds while build is running Elliot Smith
@ 2015-09-29 15:41 ` Elliot Smith
  2015-09-29 15:41 ` [review-request][PATCH 2/4] toaster: Check whether buildrequest exists before using it Elliot Smith
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Elliot Smith @ 2015-09-29 15:41 UTC (permalink / raw)
  To: toaster

The toaster startup script conditionally migrates the database
tables depending on whether you are in managed mode or not. This
means that if you are in analysis mode, some of the bldcontrol*
database tables used by managed mode are not available.

As a consequence, some of the code in toaster which refers to
those tables can break in analysis mode, as there's no clean
isolation of the two modes.

To prevent this from happening, always run the migrations for
managed mode and create the bldcontrol* tables, even if in
analysis mode.

Also clean up the function which starts up toaster so the
logic is easier to follow.

[YOCTO #8277]

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
---
 bitbake/bin/toaster | 58 +++++++++++++++++++++++++++++++++++------------------
 1 file changed, 39 insertions(+), 19 deletions(-)

diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster
index ac27826..05dabc9 100755
--- a/bitbake/bin/toaster
+++ b/bitbake/bin/toaster
@@ -54,35 +54,55 @@ webserverStartAll()
     fi
 
     retval=0
-    if [ "$TOASTER_MANAGED" '=' '1' ]; then
+    if [ "$TOASTER_MANAGED" = '1' ]; then
         python $BBBASEDIR/lib/toaster/manage.py syncdb || retval=1
     else
         python $BBBASEDIR/lib/toaster/manage.py syncdb --noinput || retval=1
     fi
-    python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=2
+
     if [ $retval -eq 1 ]; then
-        echo "Failed db sync, stopping system start" 1>&2
-    elif [ $retval -eq 2 ]; then
-        printf "\nError on migration, trying to recover... \n"
+        echo "Failed db sync, aborting system start" 1>&2
+        return $retval
+    fi
+
+    python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1
+
+    if [ $retval -eq 1 ]; then
+        printf "\nError on orm migration, rolling back...\n"
         python $BBBASEDIR/lib/toaster/manage.py migrate orm 0001_initial --fake
-        retval=0
-        python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1
+        return $retval
     fi
+
+    python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol || retval=1
+
+    if [ $retval -eq 1 ]; then
+        printf "\nError on bldcontrol migration, rolling back...\n"
+        python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol 0001_initial --fake
+        return $retval
+    fi
+
     if [ "$TOASTER_MANAGED" = '1' ]; then
-        python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol || retval=1
-        python $BBBASEDIR/lib/toaster/manage.py checksettings  --traceback || retval=1
+        python $BBBASEDIR/lib/toaster/manage.py checksettings --traceback || retval=1
     fi
-    if [ $retval -eq 0 ]; then
-        echo "Starting webserver..."
-        python $BBBASEDIR/lib/toaster/manage.py runserver "0.0.0.0:$WEB_PORT" </dev/null >>${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid
-        sleep 1
-        if ! cat "${BUILDDIR}/.toastermain.pid" | xargs -I{} kill -0 {} ; then
-            retval=1
-            rm "${BUILDDIR}/.toastermain.pid"
-        else
-            echo "Webserver address:  http://0.0.0.0:$WEB_PORT/"
-        fi
+
+    if [ $retval -eq 1 ]; then
+        printf "\nError while checking settings; aborting\n"
+        return $retval
+    fi
+
+    echo "Starting webserver..."
+
+    python $BBBASEDIR/lib/toaster/manage.py runserver "0.0.0.0:$WEB_PORT" </dev/null >>${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid
+
+    sleep 1
+
+    if ! cat "${BUILDDIR}/.toastermain.pid" | xargs -I{} kill -0 {} ; then
+        retval=1
+        rm "${BUILDDIR}/.toastermain.pid"
+    else
+        echo "Webserver address:  http://0.0.0.0:$WEB_PORT/"
     fi
+
     return $retval
 }
 
-- 
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [review-request][PATCH 2/4] toaster: Check whether buildrequest exists before using it
  2015-09-29 15:41 [review-request][PATCH 0/4][v2] Fix errors thrown when viewing command line builds while build is running Elliot Smith
  2015-09-29 15:41 ` [review-request][PATCH 1/4] toaster: Always run bldcontrol migrations Elliot Smith
@ 2015-09-29 15:41 ` Elliot Smith
  2015-09-29 15:41 ` [review-request][PATCH 3/4] toaster: Test that exception isn't thrown by project page Elliot Smith
  2015-09-29 15:41 ` [review-request][PATCH 4/4] toaster: Fix test broken during rebase Elliot Smith
  3 siblings, 0 replies; 5+ messages in thread
From: Elliot Smith @ 2015-09-29 15:41 UTC (permalink / raw)
  To: toaster

Builds initiated from the command line don't have a buildrequest
associated with them. The build.buildrequest association is
only added if a build is triggered from toaster.

Some of the code for displaying the status of a build refers
to build.buildrequest without checking whether it has been set,
which causes an error to be thrown.

Add a guard to check whether the buildrequest has been set.

[YOCTO #8277]

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
---
 bitbake/lib/toaster/orm/models.py | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py
index 5aed158..3ea821d 100644
--- a/bitbake/lib/toaster/orm/models.py
+++ b/bitbake/lib/toaster/orm/models.py
@@ -344,6 +344,9 @@ class Build(models.Model):
         tgts = Target.objects.filter(build_id = self.id).order_by( 'target' );
         return( tgts );
 
+    def get_outcome_text(self):
+        return Build.BUILD_OUTCOME[int(self.outcome)][1]
+
     @property
     def toaster_exceptions(self):
         return self.logmessage_set.filter(level=LogMessage.EXCEPTION)
@@ -361,10 +364,23 @@ class Build(models.Model):
         return (self.completed_on - self.started_on).total_seconds()
 
     def get_current_status(self):
+        """
+        get the status string from the build request if the build
+        has one, or the text for the build outcome if it doesn't
+        """
+
         from bldcontrol.models import BuildRequest
-        if self.outcome == Build.IN_PROGRESS and self.buildrequest.state != BuildRequest.REQ_INPROGRESS:
+
+        build_request = None
+        if hasattr(self, 'buildrequest'):
+            build_request = self.buildrequest
+
+        if (build_request
+                and build_request.state != BuildRequest.REQ_INPROGRESS
+                and self.outcome == Build.IN_PROGRESS):
             return self.buildrequest.get_state_display()
-        return self.get_outcome_display()
+        else:
+            return self.get_outcome_text()
 
     def __str__(self):
         return "%d %s %s" % (self.id, self.project, ",".join([t.target for t in self.target_set.all()]))
-- 
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [review-request][PATCH 3/4] toaster: Test that exception isn't thrown by project page
  2015-09-29 15:41 [review-request][PATCH 0/4][v2] Fix errors thrown when viewing command line builds while build is running Elliot Smith
  2015-09-29 15:41 ` [review-request][PATCH 1/4] toaster: Always run bldcontrol migrations Elliot Smith
  2015-09-29 15:41 ` [review-request][PATCH 2/4] toaster: Check whether buildrequest exists before using it Elliot Smith
@ 2015-09-29 15:41 ` Elliot Smith
  2015-09-29 15:41 ` [review-request][PATCH 4/4] toaster: Fix test broken during rebase Elliot Smith
  3 siblings, 0 replies; 5+ messages in thread
From: Elliot Smith @ 2015-09-29 15:41 UTC (permalink / raw)
  To: toaster

Add a test which checks that an exception is no longer thrown
for the /toastergui/project/X page for the default project.

Note that we still get a spinning dialogue box on this page
because the default project has no configuration to display,
but at least it doesn't fail altogether.

[YOCTO #8277]

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
---
 bitbake/lib/toaster/toastergui/tests.py | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/bitbake/lib/toaster/toastergui/tests.py b/bitbake/lib/toaster/toastergui/tests.py
index 5d15ac9..fc6bc8e 100644
--- a/bitbake/lib/toaster/toastergui/tests.py
+++ b/bitbake/lib/toaster/toastergui/tests.py
@@ -574,3 +574,34 @@ class ProjectBuildsDisplayTest(TestCase):
         response = self.client.get(url, follow=True)
         result = re.findall('bash:clean', response.content, re.MULTILINE)
         self.assertEqual(len(result), 3)
+
+class ProjectPageTests(TestCase):
+    """ Test project data at /project/X/ is displayed correctly """
+
+    PROJECT_NAME = 'Command line builds'
+
+    def test_command_line_builds_in_progress(self):
+        """
+        In progress builds should not cause an error to be thrown
+        when navigating to "command line builds" project page;
+        see https://bugzilla.yoctoproject.org/show_bug.cgi?id=8277
+        """
+
+        # add the "command line builds" default project; this mirrors what
+        # we do in migration 0026_set_default_project.py
+        default_project = Project.objects.create_project(self.PROJECT_NAME, None)
+        default_project.is_default = True
+        default_project.save()
+
+        # add an "in progress" build for the default project
+        now = timezone.now()
+        build = Build.objects.create(project=default_project,
+                                     started_on=now,
+                                     completed_on=now,
+                                     outcome=Build.IN_PROGRESS)
+
+        # navigate to the project page for the default project
+        url = reverse("project", args=(default_project.id,))
+        response = self.client.get(url, follow=True)
+
+        self.assertEqual(response.status_code, 200)
-- 
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [review-request][PATCH 4/4] toaster: Fix test broken during rebase
  2015-09-29 15:41 [review-request][PATCH 0/4][v2] Fix errors thrown when viewing command line builds while build is running Elliot Smith
                   ` (2 preceding siblings ...)
  2015-09-29 15:41 ` [review-request][PATCH 3/4] toaster: Test that exception isn't thrown by project page Elliot Smith
@ 2015-09-29 15:41 ` Elliot Smith
  3 siblings, 0 replies; 5+ messages in thread
From: Elliot Smith @ 2015-09-29 15:41 UTC (permalink / raw)
  To: toaster

The project builds page now shows latest builds as well as
all builds for the project (as of
d48b7ef607372488c1bf50762e4ca21773bf1e9a).

This broke one of the tests during the rebase. This fixes the
test to look for two instances of "bash:clean".

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
---
 bitbake/lib/toaster/toastergui/tests.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/bitbake/lib/toaster/toastergui/tests.py b/bitbake/lib/toaster/toastergui/tests.py
index fc6bc8e..b69ac04 100644
--- a/bitbake/lib/toaster/toastergui/tests.py
+++ b/bitbake/lib/toaster/toastergui/tests.py
@@ -558,13 +558,19 @@ class ProjectBuildsDisplayTest(TestCase):
         self.assertEqual(len(build_rows), 2)
 
     def test_show_tasks_in_projectbuilds(self):
+        """
+        Test that builds show tasks in both the project builds
+        and all builds areas
+        """
         build = Build.objects.create(**self.project1_build_success)
         target = Target.objects.create(build=build, target='bash',
                                        task='clean')
         url = reverse("projectbuilds", args=(self.project1.id,))
         response = self.client.get(url, follow=True)
         result = re.findall('^ +bash:clean$', response.content, re.MULTILINE)
-        self.assertEqual(len(result), 1)
+        self.assertEqual(len(result),
+                         2,
+                        'build should appear in latest builds and all builds')
 
     def test_show_tasks_in_allbuilds(self):
         build = Build.objects.create(**self.project1_build_success)
-- 
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-09-29 15:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-29 15:41 [review-request][PATCH 0/4][v2] Fix errors thrown when viewing command line builds while build is running Elliot Smith
2015-09-29 15:41 ` [review-request][PATCH 1/4] toaster: Always run bldcontrol migrations Elliot Smith
2015-09-29 15:41 ` [review-request][PATCH 2/4] toaster: Check whether buildrequest exists before using it Elliot Smith
2015-09-29 15:41 ` [review-request][PATCH 3/4] toaster: Test that exception isn't thrown by project page Elliot Smith
2015-09-29 15:41 ` [review-request][PATCH 4/4] toaster: Fix test broken during rebase Elliot Smith

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.