Browse Source

Some bugfixes from Arjun

Don Porter 7 years ago
parent
commit
ec588882ba
2 changed files with 407 additions and 60 deletions
  1. 357 18
      LibOS/shim/test/apps/ltp/PASSED
  2. 50 42
      LibOS/shim/test/apps/ltp/fetch.py

+ 357 - 18
LibOS/shim/test/apps/ltp/PASSED

@@ -5,6 +5,19 @@ alarm01,1
 alarm02,1
 alarm02,2
 alarm02,3
+asyncio02,1
+asyncio02,2
+asyncio02,3
+asyncio02,4
+asyncio02,5
+asyncio02,6
+chmod01,1
+chmod02,1
+chown01,1
+chroot02,1
+close01,1
+close01,2
+close08,1
 clone01,1
 clone03,1
 clone04,1
@@ -31,12 +44,84 @@ confstr01,16
 confstr01,17
 confstr01,18
 confstr01,19
+dup01,1
+dup02,1
+dup02,2
+dup07,1
+dup07,2
+dup202,1
+dup202,2
+dup203,1
+dup203,2
+dup204,1
+dup204,2
+epoll_wait03,1
+epoll_wait03,2
+faccessat01,1
+faccessat01,2
+faccessat01,3
+faccessat01,4
+faccessat01,5
+faccessat01,6
+fchdir01,1
+fchdir02,1
+fchmod01,1
+fchmod07,1
+fchmodat01,1
+fchmodat01,2
+fchmodat01,3
+fchmodat01,4
+fchmodat01,5
+fchmodat01,6
+fchown01,1
+fchown02,4
+fcntl08,1
 fcntl13,6
+fcntl27,1
+fcntl28,1
+fdatasync01,1
+fdatasync02,1
+flock06,2
+fork01,1
+fork01,2
 fork02,1
 fork03,1
+fork04,1
+fork04,2
+fork04,3
 fork11,1
+fpathconf01,1
+fpathconf01,2
+fpathconf01,3
+fpathconf01,4
+fpathconf01,5
+fpathconf01,6
+fpathconf01,7
+fpathconf01,8
+fpathconf01,9
+fstat01,1
+fstat03,1
 fstat05,1
+fsync01,1
+fsync03,1
+ftruncate01,1
+ftruncate01_64,1
+ftruncate02,1
+ftruncate02_64,1
+ftruncate03,3
+ftruncate03_64,3
+futex_wait03,1
+futex_wait04,1
+futex_wake01,1
+futex_wake01,2
+futex_wake01,3
+futex_wake01,4
+futex_wake01,5
+futex_wake01,6
 getcontext01,1
+getdents02,1
+getdents02,2
+getdents02,3
 getdomainname01,1
 getdtablesize01,1
 getegid01,1
@@ -69,15 +154,61 @@ kill03,1
 kill09,1
 listen01,1
 listen01,2
+llseek02,1
+llseek02,2
+llseek03,1
+llseek03,2
+lseek01,1
+lseek01,2
+lseek01,3
+lseek02,1
+lseek03,1
+lseek03,2
+lseek03,3
+lseek05,1
+lseek06,1
+lseek07,1
+lseek08,1
+lseek09,1
+mallopt01,1
+mallopt01,2
+mallopt01,3
+mallopt01,4
+mallopt01,5
+mallopt01,6
 memset01,1
 memset01,2
-memcmp1,1
-memcmp1,2
-memcpy1,1
-memcpy1,2
-memcpy1,3
+memcmp01,1
+memcmp01,2
+memcpy01,1
+memcpy01,2
+memcpy01,3
+mkdir08,1
 mlock03,1
+mmap001,1
+mmap001,2
+mmap001,4
+mmap02,1
+mmap03,1
+mmap04,1
+mmap05,1
+mmap08,1
+mmap09,1
+mmap09,2
+mmap09,3
+mprotect02,1
+mprotect02,2
+mprotect03,1
+mprotect04,1
+mprotect04,2
+msgrcv01,1
+munmap01,1
+munmap02,1
 nanosleep03,1
+newuname01,1
+open03,1
+open09,1
+open09,2
 pathconf01,1
 pathconf01,2
 pathconf01,3
@@ -88,36 +219,212 @@ pathconf01,7
 personality02,1
 pipe09,1
 pipe10,1
+pipe2_01,1
 poll01,1
 poll01,2
-process_vm_writev,2
-process_vm_writev,4
-process_vm_writev,6
-process_vm_writev,8
-process_vm_writev,11
-process_vm_writev,13
-process_vm_writev,15
-process_vm_writev,17
-process_vm_writev,19
-process_vm_writev,21
+pread01,1
+pread02,1
 ptrace05,1
+pwrite01,1
+pwrite04,2
+read01,1
+read04,1
+readdir01,1
+readv01,1
+readv01,2
+rmdir01,1
+rmdir04,1
+rt_sigaction01,1
+rt_sigaction01,2
+rt_sigaction01,3
+rt_sigaction01,4
+rt_sigaction01,5
+rt_sigaction01,6
+rt_sigaction01,7
+rt_sigaction01,8
+rt_sigaction01,9
+rt_sigaction01,10
+rt_sigaction01,11
+rt_sigaction01,12
+rt_sigaction01,13
+rt_sigaction01,14
+rt_sigaction01,15
+rt_sigaction01,16
+rt_sigaction01,17
+rt_sigaction01,18
+rt_sigaction01,19
+rt_sigaction01,20
+rt_sigaction01,21
+rt_sigaction01,22
+rt_sigaction01,23
+rt_sigaction01,24
+rt_sigaction01,25
+rt_sigaction01,26
+rt_sigaction01,27
+rt_sigaction01,28
+rt_sigaction01,29
+rt_sigaction01,30
+rt_sigaction01,31
+rt_sigaction01,32
+rt_sigaction01,33
+rt_sigaction01,34
+rt_sigaction01,35
+rt_sigaction01,36
+rt_sigaction01,37
+rt_sigaction01,38
+rt_sigaction01,39
+rt_sigaction01,40
+rt_sigaction01,41
+rt_sigaction01,42
+rt_sigaction01,43
+rt_sigaction01,44
+rt_sigaction01,45
+rt_sigaction01,46
+rt_sigaction01,47
+rt_sigaction01,48
+rt_sigaction01,49
+rt_sigaction01,50
+rt_sigaction01,51
+rt_sigaction01,52
+rt_sigaction01,53
+rt_sigaction01,54
+rt_sigaction01,55
+rt_sigaction01,56
+rt_sigaction01,57
+rt_sigaction01,58
+rt_sigaction01,59
+rt_sigaction01,60
+rt_sigaction01,61
+rt_sigaction01,62
+rt_sigaction01,63
+rt_sigaction01,64
+rt_sigaction01,65
+rt_sigaction01,66
+rt_sigaction01,67
+rt_sigaction01,68
+rt_sigaction01,69
+rt_sigaction01,70
+rt_sigaction01,71
+rt_sigaction01,72
+rt_sigaction01,73
+rt_sigaction01,74
+rt_sigaction01,75
+rt_sigaction01,76
+rt_sigaction01,77
+rt_sigaction01,78
+rt_sigaction01,79
+rt_sigaction01,80
+rt_sigaction01,81
+rt_sigaction01,82
+rt_sigaction01,83
+rt_sigaction01,84
+rt_sigaction01,85
+rt_sigaction01,86
+rt_sigaction01,87
+rt_sigaction01,88
+rt_sigaction01,89
+rt_sigaction01,90
+rt_sigaction01,91
+rt_sigaction01,92
+rt_sigaction01,93
+rt_sigaction01,94
+rt_sigaction01,95
+rt_sigaction01,96
+rt_sigaction01,97
+rt_sigaction01,98
+rt_sigaction01,99
+rt_sigaction01,100
+rt_sigaction01,101
+rt_sigaction01,102
+rt_sigaction01,103
+rt_sigaction01,104
+rt_sigaction01,105
+rt_sigaction01,106
+rt_sigaction01,107
+rt_sigaction01,108
+rt_sigaction01,109
+rt_sigaction01,110
+rt_sigaction01,111
+rt_sigaction01,112
+rt_sigaction01,113
+rt_sigaction01,114
+rt_sigaction01,115
+rt_sigaction01,116
+rt_sigaction01,117
+rt_sigaction01,118
+rt_sigaction01,119
+rt_sigaction01,120
+rt_sigaction01,121
+rt_sigaction01,122
+rt_sigaction01,123
+rt_sigaction01,124
+rt_sigaction01,125
+rt_sigaction01,126
+rt_sigaction01,127
+rt_sigaction01,128
+rt_sigaction01,129
+rt_sigaction01,130
+rt_sigaction01,131
+rt_sigaction01,132
+rt_sigaction01,133
+rt_sigaction01,134
+rt_sigaction01,135
+rt_sigaction01,136
+rt_sigaction01,137
+rt_sigaction01,138
+rt_sigaction01,139
+rt_sigaction01,140
+rt_sigaction01,141
+rt_sigaction01,142
+rt_sigaction01,143
+rt_sigaction01,144
+rt_sigaction01,145
+rt_sigaction01,146
+rt_sigaction01,147
+rt_sigaction01,148
+rt_sigaction01,149
+rt_sigaction01,150
+rt_sigaction01,151
+rt_sigaction01,152
+rt_sigaction01,153
+rt_sigaction01,154
+rt_sigaction01,155
 sbrk01,1
 sbrk01,2
 sbrk02,1
+sched_getaffinity01,2
+sched_getaffinity01,3
 sched_yield01,1
+select01,1
 select02,1
+semctl01,2
+semctl01,3
+semctl07,4
+semget03,1
+semop01,1
+semop04,1
+semop04,2
+sendfile03,1
+sendfile03,2
+sendfile03,3
+sendfile03_64,1
+sendfile03_64,2
+sendfile03_64,3
+sendfile05,1
+sendfile05_64,1
+set_tid_address01,1
 setgid01,1
 setitimer01,1
 setpgid01,1
 setpgid01,2
 setpgrp01,1
 setpgrp02,1
-setrlimit03,1
-setsid01,1
+setrlimit01,1
 setsockopt01,1
 setsockopt01,2
 settimeofday01,3
 setuid01,1
+setuid02,1
 sigaction01,4
 sigaction02,1
 sigaction02,2
@@ -220,13 +527,15 @@ signal06,2
 signal06,3
 signal06,4
 signal06,5
-socketcall01,1
 socketcall02,1
 socketcall03,1
 socketcall04,1
+sockioctl01,1
 splice02,1
+stat05,1
 string01,1
 sync01,1
+sync02,1
 sysconf01,1
 sysconf01,2
 sysconf01,4
@@ -276,12 +585,24 @@ sysconf01,56
 time01,1
 time02,1
 times01,1
+tkill01,1
+tkill01,2
+truncate01,1
+truncate01_64,1
 umask01,1
 umask02,1
 uname01,1
 uname03,1
+unlink05,1
+unlinkat01,1
+unlinkat01,2
+unlinkat01,3
+unlinkat01,4
+unlinkat01,6
+unlinkat01,7
 ustat02,1
 wait01,1
+wait02,1
 wait401,1
 wait401,2
 waitpid01,1
@@ -289,3 +610,21 @@ waitpid02,1
 waitpid02,3
 waitpid03,1
 waitpid03,2
+waitpid05,1
+waitpid05,11
+waitpid05,14
+waitpid05,18
+waitpid05,22
+waitpid05,26
+waitpid05,3
+waitpid05,30
+waitpid05,34
+waitpid05,37
+waitpid05,4
+waitpid05,40
+waitpid05,7
+write01,1
+write02,1
+write03,1
+write05,1
+write05,2

+ 50 - 42
LibOS/shim/test/apps/ltp/fetch.py

@@ -4,64 +4,71 @@ import os
 import threading
 import time
 import signal
+import tempfile
 
 class RunCmd(threading.Thread):
     def __init__(self, cmd, timeout, test):
         threading.Thread.__init__(self)
         self.cmd = cmd
-        self.timeout = int(timeout)
+        self.timeout = int(timeout)*100
         self.output = ""
         self.test = test
+        self.test_subtest = test
 
     def run(self):
-        self.p = subprocess.Popen(self.cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setsid)
-        self.output, error = self.p.communicate()
-        outt = self.output.split("\n")
-        for output in outt:
-            toks = output.split()
-            subtest = "1"
-            if output:
-                output = output.strip()
-                print >>f1, output
-                out = output.split( )
-            if "TFAIL" in output:
-                subtest = str(toks[1])
-                test_subtest = toks[0] + "," + subtest
-                print >>failed_tests_fh, test_subtest
-                if test_subtest not in current_failed:
-                    print CRED + "[Fail   ] " + self.test + "," + str(subtest) + CEND
+        name = tempfile.NamedTemporaryFile(mode='w+b')
+        self.p = subprocess.Popen(self.cmd, shell=True, stdout=name, stderr=subprocess.STDOUT, preexec_fn=os.setsid, close_fds=True)
+        self.curtime = time.time()
+        self.endtime = self.curtime + self.timeout
+        needed_times = self.timeout
+        sleep_time = 0
+        finish = False
+        while sleep_time < self.timeout:
+            if self.p.poll() is not None:
+                finish = True
+                break
+            sleep_time += 1
+            time.sleep(.01)
+
+        if not finish and self.p.poll() is None:
+            timed_out = True
+            print CRED + "[Hanged ] " + self.test_subtest + CEND
+            current_hanged[self.test_subtest] = 1
+            os.killpg(os.getpgid(self.p.pid), signal.SIGKILL)
+            del self.p
+
+        if (finish):
+            name.seek(0)
+            for output in name.readlines():
+                toks = output.split()
+                if len(toks)<2 or (toks[0] != self.test and self.test != "memcmp01" and self.test != "memcpy01"):
+                    continue
+                test_subtest = self.test + "," + toks[1]
+                self.test_subtest = test_subtest
+                if "TINFO" in output or test_subtest in current_passed or test_subtest in current_failed or self.test in current_hanged or test_subtest in current_blocked:
+                    continue
+                if output:
+                    output = output.strip()
+                    print >>f1, output
+                if "TFAIL" in output:
+                    print >>failed_tests_fh, test_subtest
+                    print CRED + "[Fail   ] " + test_subtest + CEND
                     current_failed[test_subtest] = 1
-            elif "TPASS" in output:
-                subtest = toks[1]
-                test_subtest = toks[0] + "," + subtest
-                print >>passed_tests_fh, test_subtest
-                if test_subtest not in current_passed:
+                elif "TPASS" in output:
+                    print >>passed_tests_fh, test_subtest
+                    print CGREEN + "[Pass   ] " + test_subtest + CEND
                     current_passed[test_subtest] = 1
-                    print CGREEN + "[Pass   ] " + self.test + "," + str(subtest) + CEND
-            elif "TINFO" in output:
-                continue
-            elif "TCONF" in output or "TBROK" in output or "error" in output:
-                if toks[0] == "self.test":
-                    subtest = str(toks[1])
-                test_subtest = toks[0] + "," + subtest
-                print >>broken_tests_fh, toks[0] + "," + subtest
-                if test_subtest not in current_blocked and toks[0] not in current_hanged:
-                    print "[Broken ] " + self.test + "," + str(subtest)      #Syscall not implemented or test preparation failed
+                elif "TCONF" in output or "TBROK" in output or "error" in output:
+                    print >>broken_tests_fh, test_subtest
+                    print "[Broken ] " + test_subtest      #Syscall not implemented or test preparation failed
                     current_blocked[test_subtest] = 1
             #else:
             #    print "[Broken ] " + self.test      #Syscall not implemented or test preparation failed
-        self.p.wait()
 
     def Run(self):
         self.start()
-        self.join(self.timeout)
+        self.join()
 
-        if self.is_alive():
-            os.killpg(os.getpgid(self.p.pid), signal.SIGTERM)
-            print CRED + "[Hanged ] " + self.test + CEND
-            current_hanged[self.test] = 1
-            time.sleep(1)
-            
 CRED = '\033[91m'
 CGREEN = '\033[92m'
 CEND = '\033[0m'
@@ -108,7 +115,8 @@ with open('../../../../syscalls.graphene') as testcases:
             timeout = timeouts_dict[test]
         except KeyError:
             timeout = DEFAULT_TIMEOUT
-        RunCmd([line], timeout, test).Run() 
+        RunCmd([line], timeout, test).Run()
+        time.sleep(.1)
 os.chdir("../../../..")
     
 stable_passed = dict()
@@ -128,4 +136,4 @@ for test in stable_passed:
 for test in current_passed:
     if not test in stable_passed:
         print CGREEN + "Test '" + test + "' passed in the current run!!" + CEND
-print "\n"
+print "\n"