Fix runaway bochs, pintos processes on time-outs.
[pintos-anon] / grading / userprog / run-tests
index 9384ebad57cdb4a33ef9d393ae7fda424d4575cc..b09bc5e200a589f2031f60494a7afbad10b6e875 100755 (executable)
@@ -20,6 +20,14 @@ our ($test);
 our (%extra);
 our ($action);
 
+if ($#ARGV == 0 && $ARGV[0] eq 'null') {
+    @TESTS = ('null');
+    extract_sources ();
+    build ();
+    run_and_grade_tests ();
+    exit success ();
+}
+
 parse_cmd_line qw (args-argc args-argv0 args-argvn args-single args-multiple
                   args-dbl-space
                   sc-bad-sp sc-bad-arg sc-boundary
@@ -49,10 +57,10 @@ exit if $action eq 'build';
 run_and_grade_tests (); 
 write_grades (); 
 write_details ();
-exit if $action eq 'test';
+exit success () if $action eq 'test';
 
 assemble_final_grade ();
-exit if $action eq 'assemble';
+exit success () if $action eq 'assemble';
 
 die "Don't know how to '$action'";
 
@@ -74,10 +82,9 @@ sub run_test {
 
     # Run.
     my ($timeout) = $test !~ /^multi-/ ? 10 : 600;
-    my ($result) = run_pintos ("pintos "
-                              . "--os-disk=pintos/src/userprog/build/os.dsk "
-                              . "--fs-disk=output/$test/fs.dsk "
-                              . "-v run -q -ex \"$test$args\"",
+    my ($result) = run_pintos (["--os-disk=pintos/src/userprog/build/os.dsk",
+                               "--fs-disk=output/$test/fs.dsk",
+                               "-v", "run", "-q", "-ex", "$test$args"],
                               LOG => "$test/run",
                               TIMEOUT => $timeout);
     rename "output/$test/fs.dsk", "output/$test/fs.dsk.keep"
@@ -156,13 +163,11 @@ sub grade_multi_oom {
 
 sub get_file {
     my ($guest_fn, $host_fn) = @_;
-    my ($result) = run_pintos ("pintos "
-                              . "--os-disk=pintos/src/userprog/build/os.dsk "
-                              . "--fs-disk=output/$test/fs.dsk.keep "
-                              . "-v get $guest_fn $host_fn",
+    my ($result) = run_pintos (["--os-disk=pintos/src/userprog/build/os.dsk",
+                               "--fs-disk=output/$test/fs.dsk.keep",
+                               "-v", "get", "$guest_fn", "$host_fn"],
                               LOG => "$test/get-$guest_fn",
-                              TIMEOUT => 10,
-                              EXPECT => 0);
+                              TIMEOUT => 10);
     die "`pintos get $guest_fn' failed - $result\n"
        if $result ne 'ok';
 }