X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftests%2Ftests.pm;h=0cc6c7ad2325f0fd294274940d117fd3ebc3f52e;hb=cc41c0acfbda000cb416b3492bc8de3480b62904;hp=e167cf5d835d9604421e7aab4c24869da9e81fdc;hpb=9750868b9c1fc53f2ac25bd7fe0f6152cc55ff03;p=pintos-anon diff --git a/src/tests/tests.pm b/src/tests/tests.pm index e167cf5..0cc6c7a 100644 --- a/src/tests/tests.pm +++ b/src/tests/tests.pm @@ -10,6 +10,15 @@ sub pass; die if @ARGV != 2; our ($test, $src_dir) = @ARGV; +our (@prereq_tests) = (); +if ($test =~ /^(.*)-persistence$/) { + push (@prereq_tests, $1); +} +for my $prereq_test (@prereq_tests) { + my (@result) = read_text_file ("$prereq_test.result"); + fail "Prerequisite test $prereq_test failed.\n" if $result[0] ne 'PASS'; +} + my ($msg_file) = tempfile (); select ($msg_file); @@ -112,6 +121,8 @@ sub check_for_triple_fault { print <{$test_base_name} = $test; + $test_base_name =~ s%-persistence$%%; + $expected_hier->{$test_base_name} = $prereq_tests[0]; $expected_hier->{'tar'} = 'tests/filesys/extended/tar'; my (%expected) = normalize_fs (flatten_hierarchy ($expected_hier, "")); - my (%actual) = read_tar ("$test.tar"); + my (%actual) = read_tar ("$prereq_tests[0].tar"); my ($errors) = 0; foreach my $name (sort keys %expected) { @@ -271,7 +284,7 @@ sub check_archive { my ($esc_name) = $name; $esc_name =~ s/[^[:print:]]/./g; print <= 0; - die "$archive: read: $!\n"; + fail "$archive: unexpected end of file\n" if $retval >= 0; + fail "$archive: read: $!\n"; } last if $header eq "\0" x 512; @@ -521,33 +535,33 @@ sub read_tar { # Verify magic numbers. if (substr ($header, 257, 6) ne "ustar\0" || substr ($header, 263, 2) ne '00') { - die "$archive: corrupt ustar header\n"; + fail "$archive: corrupt ustar header\n"; } # Verify checksum. my ($chksum) = oct (unpack ("Z*", substr ($header, 148, 8, ' ' x 8))); my ($correct_chksum) = unpack ("%32a*", $header); - die "$archive: bad header checksum\n" if $chksum != $correct_chksum; + fail "$archive: bad header checksum\n" if $chksum != $correct_chksum; # Get file name. my ($name) = unpack ("Z100", $header); my ($prefix) = unpack ("Z*", substr ($header, 345)); $name = "$prefix/$name" if $prefix ne ''; - die "$archive: contains file with empty name" if $name eq ''; + fail "$archive: contains file with empty name" if $name eq ''; # Get type. my ($typeflag) = substr ($header, 156, 1); $typeflag = '0' if $typeflag eq "\0"; - die "unknown file type '$typeflag'\n" if $typeflag !~ /[05]/; + fail "unknown file type '$typeflag'\n" if $typeflag !~ /[05]/; # Get size. my ($size) = oct (unpack ("Z*", substr ($header, 124, 12))); - die "bad size $size\n" if $size < 0; + fail "bad size $size\n" if $size < 0; $size = 0 if $typeflag eq '5'; # Store content. if (exists $content{$name}) { - die "$archive: contains multiple entries for $name\n"; + fail "$archive: contains multiple entries for $name\n"; } if ($typeflag eq '5') { $content{$name} = 'directory';