aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests
diff options
context:
space:
mode:
authorFilip Strömbäck <filip.stromback@liu.se>2016-05-13 21:19:16 +0200
committerFilip Strömbäck <filip.stromback@liu.se>2016-05-13 21:19:16 +0200
commitdedf9c50520d7be64d11ae13b957c93fd4a3ee0e (patch)
treead05f0c2a21e95b571995c52cc4bb1855aef4cc0 /src/tests
parentc4e42961e885612ca2b84dd0246d09b86aad2b97 (diff)
downloadpintos-rs-dedf9c50520d7be64d11ae13b957c93fd4a3ee0e.tar.gz
Fix for possible bug in exec-missing.
The test userprog/exec-missing verifies that exec() returns -1 when starting a process for which the binary is not found. Since the failure of load() is discovered after a new process has been created, the output 'no-such-file: exit(-1)' will be visible in the output. The problem is that we do not know when this happens with respect to the thread calling exec(). Due to how the tests are designed, the time when 'no-such-file' terminates is important. Some of the cases were listed as acceptable outputs, but I found some acceptable outputs missing from there, namely if 'no-such-file' for some reason takes quite some time terminating, or even terminates after the 'exec-missing' process exits. As there is no synchronization between these processes (nor can it be), we do not know which one terminates first. Effectively, I added the following possible outputs to the test, as I find them reasonable outcomes of a correct implementation (in very unfortunate circumstances, or when printing a lot in process_cleanup): (exec-missing) begin load: no-such-file: open failed (exec-missing) exec("no-such-file"): -1 (exec-missing) end no-such-file: exit(-1) exec-missing: exit(0) (exec-missing) begin load: no-such-file: open failed (exec-missing) exec("no-such-file"): -1 (exec-missing) end exec-missing: exit(0) no-such-file: exit(-1) Signed-off-by: Filip Strömbäck <filip.stromback@liu.se>
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/userprog/exec-missing.ck16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/tests/userprog/exec-missing.ck b/src/tests/userprog/exec-missing.ck
index 0ef7aaa..7f9b0cb 100644
--- a/src/tests/userprog/exec-missing.ck
+++ b/src/tests/userprog/exec-missing.ck
@@ -2,7 +2,7 @@
use strict;
use warnings;
use tests::tests;
-check_expected ([<<'EOF', <<'EOF', <<'EOF', <<'EOF']);
+check_expected ([<<'EOF', <<'EOF', <<'EOF', <<'EOF', <<'EOF', <<'EOF']);
(exec-missing) begin
load: no-such-file: open failed
(exec-missing) exec("no-such-file"): -1
@@ -28,4 +28,18 @@ no-such-file: exit(-1)
(exec-missing) end
exec-missing: exit(0)
EOF
+(exec-missing) begin
+load: no-such-file: open failed
+(exec-missing) exec("no-such-file"): -1
+(exec-missing) end
+no-such-file: exit(-1)
+exec-missing: exit(0)
+EOF
+(exec-missing) begin
+load: no-such-file: open failed
+(exec-missing) exec("no-such-file"): -1
+(exec-missing) end
+exec-missing: exit(0)
+no-such-file: exit(-1)
+EOF
pass;