diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index 0214e95ed363f5dde3ae40bd7c044035a5ecf114..bb1c862f1addaef32e299c0d1206cc35d567161b 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -165,7 +165,10 @@ def _never_cancelled():
   return False
 
 
-def run(cmdlines, check_cancelled=_never_cancelled, maxjobs=None, newline_on_success=False):
+def run(cmdlines,
+        check_cancelled=_never_cancelled,
+        maxjobs=None,
+        newline_on_success=False):
   js = Jobset(check_cancelled,
               maxjobs if maxjobs is not None else _DEFAULT_MAX_JOBS,
               newline_on_success)
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 460a945cee08c82b2fa7781be9fbdb4596b4b24e..0536ed68511327d11b2476302dc6b5f0fb895700 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -102,12 +102,8 @@ def _build_and_run(check_cancelled, newline_on_success, forever=False):
               check_cancelled,
               newline_on_success=newline_on_success,
               maxjobs=min(c.maxjobs for c in run_configs)):
-    if not forever:
-      jobset.message('FAILED', 'Some tests failed', do_newline=True)
     return 2
 
-  if not forever:
-    jobset.message('SUCCESS', 'All tests passed', do_newline=True)
   return 0
 
 
@@ -118,12 +114,21 @@ if forever:
     initial_time = dw.most_recent_change()
     have_files_changed = lambda: dw.most_recent_change() != initial_time
     previous_success = success
-    success = _build_and_run(have_files_changed, newline_on_success=False, forever=True) == 0
+    success = _build_and_run(have_files_changed,
+                             newline_on_success=False,
+                             forever=True) == 0
     if not previous_success and success:
-      jobset.message('SUCCESS', 'All tests are now passing properly', do_newline=True)
+      jobset.message('SUCCESS',
+                     'All tests are now passing properly',
+                     do_newline=True)
     jobset.message('IDLE', 'No change detected')
     while not have_files_changed():
       time.sleep(1)
 else:
-  sys.exit(_build_and_run(lambda: False, newline_on_success=args.newline_on_success))
-
+  result = _build_and_run(lambda: False,
+                          newline_on_success=args.newline_on_success)
+  if result == 0:
+    jobset.message('SUCCESS', 'All tests passed', do_newline=True)
+  else:
+    jobset.message('FAILED', 'Some tests failed', do_newline=True)
+  sys.exit(result)