From 29586db1a09d08e22515cd4e55267a03db31342e Mon Sep 17 00:00:00 2001
From: Daniel Gustafsson <dgustafsson@postgresql.org>
Date: Wed, 22 Feb 2023 15:05:56 +0100
Subject: [PATCH v3] pg_regress: Consider a failed test process as a failed
 test

Commit 55de145d1cf added reporting of child process failures, but the
test suite is still allowed to pass even if the process failed. Since
regress tests are higher level tests, a false positive is more likely
in this case so report failed test processes as failed tests.

Reported-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/82C46B5E-1821-4039-82C2-56BCA5992989@yesql.se
Discussion: https://postgr.es/m/20221122235636.4frx7hjterq6bmls@awork3.anarazel.de
---
 src/test/regress/pg_regress.c | 37 +++++++++++++++++++++++------------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 6cd5998b9d..7b23cc80dc 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -1697,19 +1697,26 @@ run_schedule(const char *schedule, test_start_function startfunc,
 				differ |= newdiff;
 			}
 
-			if (differ)
+			if (statuses[i] != 0)
 			{
 				status(_("FAILED"));
+				log_child_failure(statuses[i]);
 				fail_count++;
 			}
 			else
 			{
-				status(_("ok    "));	/* align with FAILED */
-				success_count++;
-			}
 
-			if (statuses[i] != 0)
-				log_child_failure(statuses[i]);
+				if (differ)
+				{
+					status(_("FAILED"));
+					fail_count++;
+				}
+				else
+				{
+					status(_("ok    "));	/* align with FAILED */
+					success_count++;
+				}
+			}
 
 			INSTR_TIME_SUBTRACT(stoptimes[i], starttimes[i]);
 			status(_(" %8.0f ms"), INSTR_TIME_GET_MILLISEC(stoptimes[i]));
@@ -1778,20 +1785,26 @@ run_single_test(const char *test, test_start_function startfunc,
 		differ |= newdiff;
 	}
 
-	if (differ)
+	if (exit_status != 0)
 	{
 		status(_("FAILED"));
 		fail_count++;
+		log_child_failure(exit_status);
 	}
 	else
 	{
-		status(_("ok    "));	/* align with FAILED */
-		success_count++;
+		if (differ)
+		{
+			status(_("FAILED"));
+			fail_count++;
+		}
+		else
+		{
+			status(_("ok    "));	/* align with FAILED */
+			success_count++;
+		}
 	}
 
-	if (exit_status != 0)
-		log_child_failure(exit_status);
-
 	INSTR_TIME_SUBTRACT(stoptime, starttime);
 	status(_(" %8.0f ms"), INSTR_TIME_GET_MILLISEC(stoptime));
 
-- 
2.32.1 (Apple Git-133)

