diff --git a/lsb_vsx/Makefile b/lsb_vsx_posix/Makefile similarity index 100% rename from lsb_vsx/Makefile rename to lsb_vsx_posix/Makefile diff --git a/lsb_vsx/lsb_vsx_posix.c b/lsb_vsx_posix/lsb_vsx_posix.c similarity index 83% rename from lsb_vsx/lsb_vsx_posix.c rename to lsb_vsx_posix/lsb_vsx_posix.c index 004c5bd67..d292eeb60 100644 --- a/lsb_vsx/lsb_vsx_posix.c +++ b/lsb_vsx_posix/lsb_vsx_posix.c @@ -4,18 +4,21 @@ #include #include #include +#include int main(int argc, char **argv) { - const char *cmd_all_tests = "/usr/test/lsb_vsx_posix/files/bin/tcc -p -e -s /usr/test/lsb_vsx_posix/files/test_sets/scen.exec"; - const char *cmd_single_test = "/usr/test/lsb_vsx_posix/files/bin/tcc -p -e -s /usr/test/lsb_vsx_posix/files/test_sets/scen_single.exec"; + const char *cmd_all_tests = "/usr/test/lsb_vsx_posix/files/bin/tcc -p -e -s /usr/test/lsb_vsx_posix/files/test_sets/scen.exec j -"; + const char *cmd_single_test = "/usr/test/lsb_vsx_posix/files/bin/tcc -p -e -s /usr/test/lsb_vsx_posix/files/test_sets/scen_single.exec -j -"; + const char *cmd_clean = "/usr/test/lsb_vsx_posix/files/bin/tcc -p -c -s /usr/test/lsb_vsx_posix/files/test_sets/scen_single.exec"; const char *cwd = "/usr/test/lsb_vsx_posix/files/test_sets"; + const char *resultPath = "/usr/test/lsb_vsx_posix/files/test_sets/results"; char *line = NULL; char total[40]; size_t len = 0; ssize_t nread; - FILE *single_test_f; + int single_test_f; FILE *all_tests_f; @@ -39,12 +42,12 @@ int main(int argc, char **argv) if(argc == 2) { /* File containing all tests */ all_tests_f = fopen("/usr/test/lsb_vsx_posix/files/test_sets/scen.exec", "r"); - if (all_tests_f == NULL) { + if (all_tests_f == -1) { perror("fopen"); exit(EXIT_FAILURE); } /* File which we gonna pass to tcc, this file will contain 2 required lines and one test name */ - single_test_f = open("/usr/test/lsb_vsx_posix/files/test_sets/scen_single.exec", O_WRONLY | O_CREAT); + single_test_f = open("/usr/test/lsb_vsx_posix/files/test_sets/scen_single.exec", O_WRONLY | O_CREAT | O_TRUNC); if (single_test_f == NULL) { perror("fopen"); exit(EXIT_FAILURE); @@ -67,24 +70,29 @@ int main(int argc, char **argv) write(single_test_f, line, nread); /*Test found, everything we need written, so close and clean */ - close(all_tests_f); + fclose(all_tests_f); close(single_test_f); free(line); break; } } if (nread == -1) { - fprintf(stderr,"No such test"); + fprintf(stderr,"No such test\n"); return -1; } - + if ((system(cmd_single_test)) < 0) { perror("system function failed:"); return 1; - } + } + + if ((system(cmd_clean)) < 0) { + perror("system function failed:"); + return 1; + } } else if (argc > 2) { - fprintf(stderr, "Type single test name or nothing to execute all tests"); + fprintf(stderr, "Type single test name or nothing to execute all tests\n"); return -1; } else { diff --git a/lsb_vsx_posix/test.yaml b/lsb_vsx_posix/test.yaml new file mode 100644 index 000000000..03c60b0eb --- /dev/null +++ b/lsb_vsx_posix/test.yaml @@ -0,0 +1,425 @@ +test: + type: lsb_vsx_posix + tests: + - name: T.isalnum + exec: lsb_vsx_posix T.isalnum + - name: T.isalpha + exec: lsb_vsx_posix T.isalpha + - name: T.iscntrl + exec: lsb_vsx_posix T.iscntrl + - name: T.isdigit + exec: lsb_vsx_posix T.isdigit + - name: T.isgraph + exec: lsb_vsx_posix T.isgraph + - name: T.islower + exec: lsb_vsx_posix T.islower + - name: T.isprint + exec: lsb_vsx_posix T.isprint + - name: T.ispunct + exec: lsb_vsx_posix T.ispunct + - name: T.isspace + exec: lsb_vsx_posix T.isspace + - name: T.isupper + exec: lsb_vsx_posix T.isupper + - name: T.isxdigit + exec: lsb_vsx_posix T.isxdigit + - name: T.tolower + exec: lsb_vsx_posix T.tolower + - name: T.toupper + exec: lsb_vsx_posix T.toupper + - name: T.assert + exec: lsb_vsx_posix T.assert + - name: T.abort + exec: lsb_vsx_posix T.abort + - name: T.abs + exec: lsb_vsx_posix T.abs + - name: T.atof + exec: lsb_vsx_posix T.atof + - name: T.atoi + exec: lsb_vsx_posix T.atoi + - name: T.atol + exec: lsb_vsx_posix T.atol + - name: T.bsearch + exec: lsb_vsx_posix T.bsearch + - name: T.calloc + exec: lsb_vsx_posix T.calloc + - name: T.exit + exec: lsb_vsx_posix T.exit + - name: T.free + exec: lsb_vsx_posix T.free + - name: T.malloc + exec: lsb_vsx_posix T.malloc + - name: T.qsort + exec: lsb_vsx_posix T.qsort + - name: T.rand + exec: lsb_vsx_posix T.rand + - name: T.realloc + exec: lsb_vsx_posix T.realloc + - name: T.srand + exec: lsb_vsx_posix T.srand + - name: T.longjmp + exec: lsb_vsx_posix T.longjmp + - name: T.setjmp + exec: lsb_vsx_posix T.setjmp + - name: T.setlocale + exec: lsb_vsx_posix T.setlocale + - name: T.acos + exec: lsb_vsx_posix T.acos + - name: T.asin + exec: lsb_vsx_posix T.asin + - name: T.atan + exec: lsb_vsx_posix T.atan + - name: T.atan2 + exec: lsb_vsx_posix T.atan2 + - name: T.ceil + exec: lsb_vsx_posix T.ceil + - name: T.cos + exec: lsb_vsx_posix T.cos + - name: T.cosh + exec: lsb_vsx_posix T.cosh + - name: T.exp + exec: lsb_vsx_posix T.exp + - name: T.fabs + exec: lsb_vsx_posix T.fabs + - name: T.floor + exec: lsb_vsx_posix T.floor + - name: T.fmod + exec: lsb_vsx_posix T.fmod + - name: T.frexp + exec: lsb_vsx_posix T.frexp + - name: T.ldexp + exec: lsb_vsx_posix T.ldexp + - name: T.log + exec: lsb_vsx_posix T.log + - name: T.log10 + exec: lsb_vsx_posix T.log10 + - name: T.modf + exec: lsb_vsx_posix T.modf + - name: T.pow + exec: lsb_vsx_posix T.pow + - name: T.sin + exec: lsb_vsx_posix T.sin + - name: T.sinh + exec: lsb_vsx_posix T.sinh + - name: T.sqrt + exec: lsb_vsx_posix T.sqrt + - name: T.tan + exec: lsb_vsx_posix T.tan + - name: tanh + exec: lsb_vsx_posix T.tanh + - name: T.clearerr + exec: lsb_vsx_posix T.clearerr + - name: T.fclose + exec: lsb_vsx_posix T.fclose + - name: T.feof + exec: lsb_vsx_posix T.feof + - name: T.ferror + exec: lsb_vsx_posix T.ferror + - name: T.fflush + exec: lsb_vsx_posix T.fflush + - name: T.fgets + exec: lsb_vsx_posix T.fgets + - name: T.fopen + exec: lsb_vsx_posix T.fopen + - name: T.fputs + exec: lsb_vsx_posix T.fputs + - name: T.fread + exec: lsb_vsx_posix T.fread + - name: T.freopen + exec: lsb_vsx_posix T.freopen + - name: T.fseek + exec: lsb_vsx_posix T.fseek + - name: T.ftell + exec: lsb_vsx_posix T.ftell + - name: T.fwrite + exec: lsb_vsx_posix T.fwrite + - name: T.getc + exec: lsb_vsx_posix T.getc + - name: T.gets + exec: lsb_vsx_posix T.gets + - name: T.perror + exec: lsb_vsx_posix T.perror + - name: T.printf + exec: lsb_vsx_posix T.printf + - name: T.putc + exec: lsb_vsx_posix T.putc + - name: T.puts + exec: lsb_vsx_posix T.puts + - name: T.remove + exec: lsb_vsx_posix T.remove + - name: T.rewind + exec: lsb_vsx_posix T.rewind + - name: T.scanf + exec: lsb_vsx_posix T.scanf + - name: T.setbuf + ignore: True + exec: lsb_vsx_posix T.setbuf + - name: T.tmpfile + exec: lsb_vsx_posix T.tmpfile + - name: T.tmpnam + ignore: True + exec: lsb_vsx_posix T.tmpnam + - name: T.ungetc + exec: lsb_vsx_posix T.ungetc + - name: T.vprintf + exec: lsb_vsx_posix T.vprintf + - name: T.strcat + exec: lsb_vsx_posix T.strcat + - name: T.strchr + exec: lsb_vsx_posix T.strchr + - name: T.strcmp + exec: lsb_vsx_posix T.strcmp + - name: T.strcpy + exec: lsb_vsx_posix T.strcpy + - name: T.strscpn + exec: lsb_vsx_posix T.strcspn + - name: T.strlen + exec: lsb_vsx_posix T.strlen + - name: T.strncat + exec: lsb_vsx_posix T.strncat + - name: T.strncmp + exec: lsb_vsx_posix T.strncmp + - name: T.strncpy + exec: lsb_vsx_posix T.strncpy + - name: T.strpbrk + exec: lsb_vsx_posix T.strpbrk + - name: T.strrchr + exec: lsb_vsx_posix T.strrchr + - name: T.strspn + exec: lsb_vsx_posix T.strspn + - name: T.strstr + exec: lsb_vsx_posix T.strstr + - name: T.strtok + exec: lsb_vsx_posix T.strtok + - name: T.asctime + exec: lsb_vsx_posix T.asctime + - name: T.ctime + ignore: True + exec: lsb_vsx_posix T.ctime + - name: T.gmtime + exec: lsb_vsx_posix T.gmtime + - name: T.localtime + ignore: True + exec: lsb_vsx_posix T.localtime + - name: T.mktime + exec: lsb_vsx_posix T.mktime + - name: T.strftime + ignore: True + exec: lsb_vsx_posix T.strftime + - name: T.fdopen + exec: lsb_vsx_posix T.fdopen + - name: T.fileno + exec: lsb_vsx_posix T.fileno + - name: T.siglongjmp + exec: lsb_vsx_posix T.siglongjmp + - name: T.sigsetjmp + exec: lsb_vsx_posix T.sigsetjmp + - name: T.tzset + exec: lsb_vsx_posix T.tzset + - name: T.cpio + exec: lsb_vsx_posix T.cpio + - name: T.tar + exec: lsb_vsx_posix T.tar + - name: T.T.c_cc + exec: lsb_vsx_posix T.c_cc + - name: T.c_cflag + exec: lsb_vsx_posix T.c_cflag + - name: T.c_iflag + exec: lsb_vsx_posix T.c_iflag + - name: T.c_lflag + exec: lsb_vsx_posix T.c_lflag + - name: T.c_oflag + exec: lsb_vsx_posix T.c_oflag + - name: T.cfgetispee + exec: lsb_vsx_posix T.cfgetispee + - name: T.cfgetospee + exec: lsb_vsx_posix T.cfgetospee + - name: T.cfsetispee + exec: lsb_vsx_posix T.cfsetispee + - name: T.cfsetospee + exec: lsb_vsx_posix T.cfsetospee + - name: T.i_access + exec: lsb_vsx_posix T.i_access + - name: T.i_canon + exec: lsb_vsx_posix T.i_canon + - name: T.i_close + exec: lsb_vsx_posix T.i_close + - name: T.i_ctty + exec: lsb_vsx_posix T.i_ctty + - name: T.i_inproc + exec: lsb_vsx_posix T.i_inproc + - name: T.i_modem + exec: lsb_vsx_posix T.i_modem + - name: T.i_noncanon + exec: lsb_vsx_posix T.i_noncanon + - name: T.i_spchars + exec: lsb_vsx_posix T.i_spchars + - name: T.tcdrain + exec: lsb_vsx_posix T.tcdrain + - name: T.tcflow + exec: lsb_vsx_posix T.tcflow + - name: T.tcflush + exec: lsb_vsx_posix T.tcflush + - name: T.tcgetattr + exec: lsb_vsx_posix T.tcgetattr + - name: T.tcgetpgrp + exec: lsb_vsx_posix T.tcgetpgrp + - name: T.tcsendbrea + exec: lsb_vsx_posix T.tcsendbrea + - name: T.tcsetattr + exec: lsb_vsx_posix T.tcsetattr + - name: T.tcsetpgrp + exec: lsb_vsx_posix T.tcsetpgrp + - name: T.access + exec: lsb_vsx_posix T.access + - name: T.chdir + exec: lsb_vsx_posix T.chdir + - name: T.chmod + exec: lsb_vsx_posix T.chmod + - name: T.chown + exec: lsb_vsx_posix T.chown + - name: T.closedir + exec: lsb_vsx_posix T.closedir + - name: T.creat + exec: lsb_vsx_posix T.creat + - name: T.fpathconf + exec: lsb_vsx_posix T.fpathconf + - name: T.fstat + exec: lsb_vsx_posix T.fstat + - name: T.getcwd + exec: lsb_vsx_posix T.getcwd + - name: T.link + exec: lsb_vsx_posix T.link + - name: T.mkdir + exec: lsb_vsx_posix T.mkdir + - name: T.mkfifo + exec: lsb_vsx_posix T.mkfifo + - name: T.open + exec: lsb_vsx_posix T.open + - name: T.opendir + exec: lsb_vsx_posix T.opendir + - name: T.pathconf + exec: lsb_vsx_posix T.pathconf + - name: T.readdir + exec: lsb_vsx_posix T.readdir + - name: T.rename + exec: lsb_vsx_posix T.rename + - name: T.rewinddir + exec: lsb_vsx_posix T.rewinddir + - name: T.rmdir + exec: lsb_vsx_posix T.rmdir + - name: T.stat + exec: lsb_vsx_posix T.stat + - name: T.umask + exec: lsb_vsx_posix T.umask + - name: T.unlink + exec: lsb_vsx_posix T.unlink + - name: T.utime + exec: lsb_vsx_posix T.utime + - name: T.close + exec: lsb_vsx_posix T.close + - name: T.dup + exec: lsb_vsx_posix T.dup + - name: T.dup2 + ignore: True + exec: lsb_vsx_posix T.dup2 + - name: T.fcntl + exec: lsb_vsx_posix T.fcntl + - name: T.lseek + exec: lsb_vsx_posix T.lseek + - name: T.pipe + ignore: True + exec: lsb_vsx_posix T.pipe + - name: T.read + exec: lsb_vsx_posix T.read + - name: T.write + exec: lsb_vsx_posix T.write + - name: T.ctermid + exec: lsb_vsx_posix T.ctermid + - name: T.getegid + exec: lsb_vsx_posix T.getegid + - name: T.getenv + exec: lsb_vsx_posix T.getenv + - name: T.geteuid + exec: lsb_vsx_posix T.geteuid + - name: T.getgid + exec: lsb_vsx_posix T.getgid + - name: T.getgroups + exec: lsb_vsx_posix T.getgroups + - name: T.getlogin + exec: lsb_vsx_posix T.getlogin + - name: T.getpgrp + exec: lsb_vsx_posix T.getpgrp + - name: T.getpid + exec: lsb_vsx_posix T.getpid + - name: getppid + exec: lsb_vsx_posix T.getppid + - name: T.getuid + exec: lsb_vsx_posix T.getuid + - name: T.isatty + exec: lsb_vsx_posix T.isatty + - name: T.setgid + exec: lsb_vsx_posix T.setgid + - name: setpgid + exec: lsb_vsx_posix T.setpgid + - name: T.setsid + exec: lsb_vsx_posix T.setsid + - name: T.setuid + exec: lsb_vsx_posix T.setuid + - name: T.sysconf + exec: lsb_vsx_posix T.sysconf + - name: T.time + exec: lsb_vsx_posix T.time + - name: T.times + exec: lsb_vsx_posix T.times + - name: T.ttyname + exec: lsb_vsx_posix T.ttyname + - name: T.uname + exec: lsb_vsx_posix T.uname + - name: T._exit + exec: lsb_vsx_posix T._exit + - name: T.alarm + exec: lsb_vsx_posix T.alarm + - name: T.exec + exec: lsb_vsx_posix T.exec + - name: T.fork + exec: lsb_vsx_posix T.fork + - name: T.kill + exec: lsb_vsx_posix T.kill + - name: T.pause + exec: lsb_vsx_posix T.pause + - name: T.sigaction + exec: lsb_vsx_posix T.sigaction + - name: T.sigaddset + exec: lsb_vsx_posix T.sigaddset + - name: T.sigconcept + exec: lsb_vsx_posix T.sigconcept + - name: T.sigdelset + exec: lsb_vsx_posix T.sigdelset + - name: T.sigemptyse + exec: lsb_vsx_posix T.sigemptyse + - name: T.sigfillset + exec: lsb_vsx_posix T.sigfillset + - name: T.sigismembe + exec: lsb_vsx_posix T.sigismembe + - name: T.sigpending + exec: lsb_vsx_posix T.sigpending + - name: T.sigprocmas + exec: lsb_vsx_posix T.sigprocmas + - name: T.sigsuspend + exec: lsb_vsx_posix T.sigsuspend + - name: T.sleep + exec: lsb_vsx_posix T.sleep + - name: T.wait + exec: lsb_vsx_posix T.wait + - name: T.waitpid + ignore: True + exec: lsb_vsx_posix T.waitpid + - name: T.getgrgid + exec: lsb_vsx_posix T.getgrgid + - name: T.getgrnam + exec: lsb_vsx_posix T.getgrnam + - name: T.getpwnam + exec: lsb_vsx_posix T.getpwnam + - name: T.getpwuid + exec: lsb_vsx_posix T.getpwuid diff --git a/trunner/config.py b/trunner/config.py index e14efb5d7..0ac0142f3 100644 --- a/trunner/config.py +++ b/trunner/config.py @@ -50,7 +50,7 @@ def resolve_phrtos_dir() -> Path: QEMU_TARGETS = ['armv7a9-zynq7000-qemu', 'ia32-generic-qemu', 'riscv64-generic-qemu'] # Tests intended to run in long test campaigns -LONG_TESTS = ['busybox', 'mbedtls', 'micropython_std', 'micropython_repl'] +LONG_TESTS = ['busybox', 'mbedtls', 'micropython_std', 'micropython_repl', 'lsb_vsx_posix'] CURRENT_TARGET = None @@ -172,7 +172,7 @@ def copy_per_target(self) -> List['TestConfig']: class ConfigParser: KEYWORDS: Tuple[str, ...] = ('syspage', 'exec', 'harness', 'ignore', 'name', 'targets', 'psh', 'timeout', 'type') - TEST_TYPES: Tuple[str, ...] = ('unit', 'harness', 'busybox', 'mbedtls', 'micropython_std', 'micropython_repl') + TEST_TYPES: Tuple[str, ...] = ('unit', 'harness', 'busybox', 'mbedtls', 'micropython_std', 'micropython_repl', 'lsb_vsx_posix') def parse_keywords(self, config: Config) -> None: keywords = set(config) diff --git a/trunner/harnesses/factory.py b/trunner/harnesses/factory.py index 4bd18f107..4b63666c8 100644 --- a/trunner/harnesses/factory.py +++ b/trunner/harnesses/factory.py @@ -12,6 +12,7 @@ from .mbedtls import MbedtlsTestHarness from .micropython import MicropythonStandardHarness from .micropython import MicropythonReplHarness +from .lsb_vsx_posix import LsbVsxPosixTestHarness class TestHarnessFactory: @@ -27,5 +28,7 @@ def create(test_type): return MicropythonStandardHarness() if test_type == 'micropython_repl': return MicropythonReplHarness() + if test_type == 'lsb_vsx_posix': + return LsbVsxPosixTestHarness() else: raise ValueError(f"Unknown test type: {test_type}") diff --git a/trunner/harnesses/lsb_vsx_posix.py b/trunner/harnesses/lsb_vsx_posix.py new file mode 100644 index 000000000..75c0e4248 --- /dev/null +++ b/trunner/harnesses/lsb_vsx_posix.py @@ -0,0 +1,72 @@ +# +# Phoenix-RTOS test runner +# +# The harness for the LSB_VSX-2.0-1 (POSIX) Test Suite +# +# Copyright 2022 Phoenix Systems +# Authors: Adam Dębek +# + +from .common import TestResult + + +class LsbVsxPosixTestHarness: + """Class providing harness for parsing output of the LSB_VSX_POSIX test suite""" + + PROMPT = r'(\r+)\x1b\[0J' + r'\(psh\)% ' + RESULT = r"(.+?)(PASS|UNRESOLVED|FAIL)\r+\n" + FINAL = r"(.+?)TCC End\r+\n" + MESSAGE = r"(.*?)\r+\n" + + @staticmethod + def harness(proc): + test_results = [] + test = None + msg = "" + i = 1 + + proc.expect("Config End\r+\n") + + while True: + idx = proc.expect([ + LsbVsxPosixTestHarness.RESULT, + LsbVsxPosixTestHarness.FINAL, + LsbVsxPosixTestHarness.MESSAGE + ], timeout=300) + groups = proc.match.groups() + + if idx == 0: + test = dict(zip(('status', 'name'), (groups[1], 'test_case' + str(i)))) + i += 1 + elif idx == 1: + break + elif idx == 2: + line = groups[0] + #Get rid of unnecessary messages + if(line.find("IC") != -1 or line.find("TP") != -1 or line.find("TC") != -1 or line.find("Execute") != -1): + continue + else: + line = line[line.find("|") + 1:] + line = line[line.find("|") + 1:] + msg += '\t\t' + line + '\n' + #Tests with these problems treat as fails + if (line.find("can't acquire exclusive lock") != -1) or (line.find("can't exec") != -1): + test = dict(zip(('status', 'name'), (TestResult.FAIL, ' '))) + test['status'] = TestResult.FAIL + test['msg'] = '\t\t' + "compilation error\n" + test_results.append(TestResult(**test)) + + if idx != 2 and test: + # We ended processing test result and message + if msg and test['status'] == TestResult.FAIL: + test['msg'] = msg + msg = '' + elif msg and test['status'] == "UNRESOLVED": + test['status'] = TestResult.FAIL + test['msg'] = msg + msg = '' + + test_results.append(TestResult(**test)) + + + return test_results