From 75fb5b38c5baf9226e99498d948e27d762744755 Mon Sep 17 00:00:00 2001
From: Razvan Deaconescu <razvan.deaconescu@upb.ro>
Date: Tue, 12 Dec 2023 10:52:31 +0200
Subject: [PATCH] asg/parallel-graph: Fix tests to use timeout

Use `Popen.communicate()` to use a timeout argument in case a process
blocks indefinitely because of improper synchronization.

Signed-off-by: Razvan Deaconescu <razvan.deaconescu@upb.ro>
---
 tests/checker.py | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/tests/checker.py b/tests/checker.py
index 3bf9462..e877d7b 100644
--- a/tests/checker.py
+++ b/tests/checker.py
@@ -22,11 +22,23 @@ def check(testname):
     """
     with subprocess.Popen([os.path.join(src, "serial"), testname],
             stdout=subprocess.PIPE) as proc_serial_res:
-        serial_out = str(proc_serial_res.stdout.read()).strip("\n")
+        try:
+            outs, _ = proc_serial_res.communicate(timeout=3)
+            serial_out = str(outs).strip("\n")
+        except subprocess.TimeoutExpired:
+            proc_serial_res.kill()
+            outs, _ = proc_serial_res.communicate()
+            serial_out = ""
     for _ in range(0, 100):
         with subprocess.Popen([os.path.join(src, "parallel"), testname],
                 stdout=subprocess.PIPE) as proc_parallel_res:
-            parallel_out = str(proc_parallel_res.stdout.read()).strip("\n")
+            try:
+                outs, _ = proc_parallel_res.communicate(timeout=3)
+                parallel_out = str(outs).strip("\n")
+            except subprocess.TimeoutExpired:
+                proc_parallel_res.kill()
+                outs, _ = proc_parallel_res.communicate()
+                parallel_out = ""
             if serial_out != parallel_out:
                 return False
 
-- 
GitLab