From 6202fbc183430405a471901abe7c896aae052654 Mon Sep 17 00:00:00 2001 From: nietingting Date: Tue, 20 Oct 2020 09:09:25 +0800 Subject: [PATCH] [ltp] add ltp test support Signed-off-by: nietingting --- testrun/blackList.txt | 18 ++ testrun/dailyRunList.txt | 404 +++++++++++++++++++++++++++++++++++++++ testrun/runLTP.py | 254 ++++++++++++++++++++++++ 3 files changed, 676 insertions(+) create mode 100644 testrun/blackList.txt create mode 100644 testrun/dailyRunList.txt create mode 100755 testrun/runLTP.py diff --git a/testrun/blackList.txt b/testrun/blackList.txt new file mode 100644 index 0000000..20354a5 --- /dev/null +++ b/testrun/blackList.txt @@ -0,0 +1,18 @@ +ltp_interfaces_pthread_rwlock_wrlock_3_1 +ltp_interfaces_pthread_mutex_lock_3_1 +ltp_interfaces_pthread_equal_2_1 +ltp_interfaces_pthread_setschedparam_5_1 +ltp_interfaces_sigwaitinfo_8_1 +ltp_interfaces_pthread_atfork_3_3 +ltp_threads_pthread_cond_init_stress +ltp_threads_pthread_mutex_init_stress +ltp_interfaces_sigqueue_7_1 +ltp_interfaces_pthread_mutex_trylock_4_3 +ltp_interfaces_pthread_once_6_1 +ltp_pthread_rwlock_trywrlock_speculative_3_1 +ltp_interfaces_mmap_23_1 +ltp_interfaces_pthread_cond_broadcast_4_2 +ltp_threads_pthread_mutex_trylock_stress +ltp_interfaces_pthread_cond_signal_4_2 +ltp_interfaces_clock_1_1 +ltp_interfaces_sigwaitinfo_7_1 diff --git a/testrun/dailyRunList.txt b/testrun/dailyRunList.txt new file mode 100644 index 0000000..46e0889 --- /dev/null +++ b/testrun/dailyRunList.txt @@ -0,0 +1,404 @@ +ltp_interfaces_pthread_cond_timedwait_2_2 +ltp_interfaces_pthread_cond_destroy_3_1 +ltp_interfaces_mq_close_1_1 +ltp_interfaces_sigdelset_1_3 +ltp_interfaces_pthread_once_2_1 +ltp_interfaces_pthread_mutex_unlock_2_1 +ltp_interfaces_gmtime_2_1 +ltp_interfaces_sigpending_2_1 +ltp_interfaces_sigwait_1_1 +ltp_interfaces_pthread_cancel_1_2 +ltp_mq_open_speculative_2_3 +ltp_interfaces_pthread_mutex_destroy_5_2 +ltp_interfaces_timer_settime_1_2 +ltp_interfaces_sigaddset_1_1 +ltp_interfaces_pthread_cond_init_4_3 +ltp_interfaces_pthread_self_1_1 +ltp_interfaces_time_1_1 +ltp_interfaces_pthread_rwlock_timedwrlock_3_1 +ltp_definitions_errno_h_4_1 +ltp_interfaces_timer_create_16_1 +ltp_interfaces_sched_setparam_5_1 +ltp_interfaces_sem_init_2_2 +ltp_interfaces_mmap_6_5 +ltp_interfaces_sigset_3_1 +ltp_interfaces_sched_setscheduler_17_1 +ltp_interfaces_sem_timedwait_4_1 +ltp_interfaces_pthread_attr_init_2_1 +ltp_interfaces_sigwaitinfo_6_1 +ltp_interfaces_sigwaitinfo_9_1 +ltp_interfaces_pthread_mutex_lock_4_1 +ltp_interfaces_pthread_setcanceltype_1_1 +ltp_interfaces_asctime_1_1 +ltp_interfaces_pthread_rwlock_tryrdlock_1_1 +ltp_interfaces_sigaddset_1_2 +ltp_interfaces_fsync_7_1 +ltp_interfaces_pthread_mutexattr_getpshared_1_1 +ltp_interfaces_pthread_mutex_init_1_1 +ltp_interfaces_sigignore_5_1 +ltp_interfaces_pthread_mutexattr_setpshared_3_2 +ltp_interfaces_pthread_mutex_timedlock_5_1 +ltp_interfaces_pthread_mutexattr_gettype_1_1 +ltp_interfaces_clock_settime_1_1 +ltp_interfaces_pthread_mutexattr_settype_3_2 +ltp_interfaces_pthread_barrierattr_init_1_1 +ltp_interfaces_pthread_barrier_init_1_1 +ltp_interfaces_sched_getscheduler_3_1 +ltp_interfaces_pthread_barrierattr_getpshared_1_1 +ltp_interfaces_pthread_kill_1_2 +ltp_interfaces_mq_unlink_7_1 +ltp_interfaces_pthread_cancel_4_1 +ltp_interfaces_munmap_8_1 +ltp_mq_unlink_speculative_7_2 +ltp_interfaces_pthread_mutex_timedlock_4_1 +ltp_interfaces_gmtime_1_1 +ltp_interfaces_mq_getattr_2_2 +ltp_interfaces_pthread_once_1_2 +ltp_interfaces_sem_init_5_1 +ltp_interfaces_mq_open_7_3 +ltp_interfaces_pthread_mutex_unlock_5_1 +ltp_interfaces_mq_open_15_1 +ltp_interfaces_sched_getscheduler_1_1 +ltp_interfaces_mlock_5_1 +ltp_interfaces_pthread_join_2_1 +ltp_timer_create_speculative_5_1 +ltp_interfaces_timer_settime_5_1 +ltp_interfaces_mq_setattr_2_1 +ltp_mq_open_speculative_2_2 +ltp_interfaces_clock_gettime_7_1 +ltp_interfaces_pthread_attr_init_3_1 +ltp_interfaces_sigaction_1_9 +ltp_interfaces_pthread_attr_destroy_3_1 +ltp_interfaces_pthread_mutex_destroy_1_1 +ltp_interfaces_timer_gettime_1_1 +ltp_interfaces_sigwait_3_1 +ltp_interfaces_pthread_cancel_2_1 +ltp_interfaces_pthread_rwlock_destroy_1_1 +ltp_interfaces_sigset_7_1 +ltp_interfaces_sem_init_5_2 +ltp_interfaces_pthread_create_1_2 +ltp_interfaces_sched_setparam_23_1 +ltp_interfaces_pthread_cond_init_1_1 +ltp_interfaces_pthread_mutexattr_settype_3_3 +ltp_interfaces_sigdelset_4_1 +ltp_interfaces_sem_init_1_1 +ltp_interfaces_pthread_rwlock_timedwrlock_5_1 +ltp_interfaces_sigset_6_1 +ltp_interfaces_mktime_1_1 +ltp_interfaces_clock_gettime_8_1 +ltp_interfaces_mmap_32_1 +ltp_timer_create_speculative_15_1 +ltp_interfaces_sem_timedwait_6_1 +ltp_interfaces_strchr_1_1 +ltp_interfaces_mq_send_14_1 +ltp_interfaces_pthread_rwlock_rdlock_1_1 +ltp_interfaces_pthread_mutex_unlock_3_1 +ltp_interfaces_pthread_join_1_1 +ltp_sched_rr_get_interval_speculative_5_1 +ltp_interfaces_sigfillset_2_1 +ltp_interfaces_pthread_mutex_trylock_3_1 +ltp_interfaces_sigtimedwait_2_1 +ltp_interfaces_pthread_cond_wait_1_1 +ltp_interfaces_timer_getoverrun_1_1 +ltp_interfaces_clock_settime_20_1 +ltp_interfaces_sigset_10_1 +ltp_interfaces_mq_receive_12_1 +ltp_interfaces_pthread_mutexattr_getpshared_1_2 +ltp_interfaces_mq_receive_2_1 +ltp_interfaces_pthread_join_6_2 +ltp_interfaces_mq_timedsend_2_1 +ltp_interfaces_pthread_mutex_init_1_2 +ltp_interfaces_pthread_mutex_destroy_3_1 +ltp_interfaces_pthread_getspecific_3_1 +ltp_interfaces_clock_settime_17_1 +ltp_interfaces_pthread_mutex_timedlock_5_2 +ltp_interfaces_pthread_mutexattr_gettype_1_2 +ltp_interfaces_signal_2_1 +ltp_interfaces_sigaction_6_4 +ltp_interfaces_sigdelset_1_4 +ltp_interfaces_pthread_rwlock_timedrdlock_2_1 +ltp_sched_getparam_speculative_7_1 +ltp_interfaces_strcpy_1_1 +ltp_interfaces_sigset_9_1 +ltp_interfaces_pthread_mutex_timedlock_1_1 +ltp_interfaces_pthread_mutex_destroy_2_1 +ltp_interfaces_pthread_barrierattr_setpshared_1_1 +ltp_definitions_mqueue_h_1_1 +ltp_interfaces_pthread_condattr_destroy_3_1 +ltp_interfaces_sigqueue_2_2 +ltp_interfaces_pthread_attr_init_4_1 +ltp_interfaces_mq_open_13_1 +ltp_interfaces_pthread_kill_6_1 +ltp_interfaces_pthread_mutexattr_destroy_2_1 +ltp_interfaces_sigignore_6_2 +ltp_interfaces_timer_settime_9_2 +ltp_interfaces_mq_open_11_1 +ltp_interfaces_clock_gettime_2_1 +ltp_interfaces_sigwait_4_1 +ltp_interfaces_sched_setscheduler_19_1 +ltp_interfaces_sem_init_2_1 +ltp_interfaces_raise_7_1 +ltp_interfaces_nanosleep_10000_1 +ltp_interfaces_nanosleep_2_1 +ltp_interfaces_pthread_equal_1_2 +ltp_interfaces_clock_nanosleep_3_1 +ltp_interfaces_fsync_5_1 +ltp_interfaces_timer_create_3_1 +ltp_interfaces_clock_getres_5_1 +ltp_interfaces_pthread_mutexattr_settype_7_1 +ltp_interfaces_pthread_mutexattr_settype_3_4 +ltp_interfaces_pthread_rwlock_unlock_1_1 +ltp_interfaces_raise_6_1 +ltp_interfaces_signal_1_1 +ltp_interfaces_pthread_cleanup_push_1_2 +ltp_interfaces_clock_getres_6_1 +ltp_interfaces_sigaction_23_4 +ltp_interfaces_mq_open_1_1 +ltp_interfaces_pthread_rwlock_rdlock_5_1 +ltp_interfaces_pthread_setspecific_1_2 +ltp_interfaces_pthread_mutexattr_settype_2_1 +ltp_interfaces_mmap_6_6 +ltp_interfaces_pthread_join_5_1 +ltp_interfaces_pthread_attr_destroy_2_1 +ltp_interfaces_mq_send_4_1 +ltp_interfaces_pthread_key_delete_1_1 +ltp_interfaces_timer_gettime_2_2 +ltp_interfaces_mq_timedsend_14_1 +ltp_interfaces_sigismember_5_1 +ltp_interfaces_pthread_mutexattr_gettype_1_5 +ltp_interfaces_timer_settime_3_3 +ltp_interfaces_pthread_kill_2_1 +ltp_interfaces_clock_settime_5_1 +ltp_interfaces_pthread_rwlock_timedrdlock_1_1 +ltp_interfaces_pthread_mutex_init_3_2 +ltp_interfaces_pthread_setcancelstate_1_1 +ltp_interfaces_sigwaitinfo_1_1 +ltp_interfaces_pthread_mutex_timedlock_5_3 +ltp_pthread_mutex_destroy_speculative_4_2 +ltp_interfaces_pthread_cond_signal_4_1 +ltp_interfaces_sigset_2_1 +ltp_interfaces_sched_getscheduler_4_1 +ltp_interfaces_nanosleep_6_1 +ltp_stress_signals_sigismember_stress_1 +ltp_interfaces_mq_timedreceive_2_1 +ltp_interfaces_pthread_equal_1_1 +ltp_interfaces_pthread_mutex_unlock_5_2 +ltp_interfaces_pthread_mutexattr_getpshared_1_3 +ltp_mq_timedsend_speculative_18_2 +ltp_interfaces_difftime_1_1 +ltp_interfaces_pthread_mutexattr_gettype_1_3 +ltp_interfaces_clock_gettime_1_1 +ltp_interfaces_munlock_7_1 +ltp_interfaces_pthread_cancel_1_1 +ltp_interfaces_pthread_barrier_wait_3_1 +ltp_interfaces_pthread_condattr_destroy_4_1 +ltp_interfaces_sigqueue_10_1 +ltp_interfaces_pthread_rwlock_trywrlock_1_1 +ltp_pthread_key_create_speculative_5_1 +ltp_interfaces_sched_getparam_3_1 +ltp_interfaces_sigaction_2_9 +ltp_interfaces_sem_timedwait_7_1 +ltp_interfaces_clock_nanosleep_2_1 +ltp_interfaces_timer_gettime_1_2 +ltp_interfaces_sigaction_2_4 +ltp_interfaces_pthread_setschedprio_1_1 +ltp_interfaces_pthread_mutexattr_init_3_1 +ltp_interfaces_sigset_1_1 +ltp_interfaces_pthread_mutexattr_getpshared_3_1 +ltp_interfaces_pthread_mutex_init_3_1 +ltp_timer_gettime_speculative_6_2 +ltp_interfaces_clock_nanosleep_1_1 +ltp_interfaces_pthread_mutexattr_init_1_1 +ltp_interfaces_sigemptyset_2_1 +ltp_interfaces_pthread_cond_init_2_1 +ltp_interfaces_sigtimedwait_6_1 +ltp_interfaces_sigset_4_1 +ltp_interfaces_pthread_barrier_init_3_1 +ltp_interfaces_sched_setscheduler_19_5 +ltp_interfaces_pthread_cleanup_pop_1_1 +ltp_interfaces_pthread_kill_3_1 +ltp_interfaces_clock_getres_1_1 +ltp_interfaces_pthread_condattr_destroy_1_1 +ltp_interfaces_pthread_cond_signal_2_2 +ltp_interfaces_pthread_rwlock_wrlock_2_1 +ltp_interfaces_timer_gettime_1_3 +ltp_timer_delete_speculative_5_1 +ltp_timer_gettime_speculative_6_1 +ltp_interfaces_pthread_cond_signal_1_1 +ltp_interfaces_pthread_mutex_destroy_5_1 +ltp_interfaces_signal_7_1 +ltp_interfaces_sigwait_6_2 +ltp_interfaces_pthread_mutexattr_settype_3_1 +ltp_interfaces_sigaction_28_9 +ltp_interfaces_pthread_cleanup_pop_1_2 +ltp_interfaces_timer_settime_8_3 +ltp_interfaces_pthread_mutex_init_2_1 +ltp_interfaces_pthread_mutex_trylock_4_1 +ltp_definitions_signal_h_26_1 +ltp_interfaces_pthread_cond_timedwait_2_1 +ltp_timers_clocks_invaliddates +ltp_interfaces_sigtimedwait_5_1 +ltp_interfaces_pthread_cond_init_3_1 +ltp_interfaces_mmap_12_1 +ltp_interfaces_nanosleep_5_1 +ltp_interfaces_clock_settime_6_1 +ltp_interfaces_sigaction_30_1 +ltp_interfaces_pthread_once_1_1 +ltp_interfaces_timer_delete_1_1 +ltp_interfaces_pthread_mutex_unlock_1_1 +ltp_interfaces_pthread_mutexattr_destroy_1_1 +ltp_interfaces_pthread_mutexattr_setprotocol_3_2 +ltp_interfaces_mq_send_2_1 +ltp_interfaces_sched_setparam_22_1 +ltp_interfaces_pthread_mutex_trylock_1_1 +ltp_interfaces_timer_settime_1_1 +ltp_interfaces_pthread_setcancelstate_1_2 +ltp_interfaces_pthread_mutexattr_setpshared_2_2 +ltp_interfaces_mq_open_3_1 +ltp_interfaces_sched_yield_2_1 +ltp_interfaces_sighold_3_1 +ltp_interfaces_sigwait_6_1 +ltp_interfaces_signal_5_1 +ltp_behavior_timers_2_1 +ltp_interfaces_pthread_mutexattr_destroy_3_1 +ltp_interfaces_mq_getattr_2_1 +ltp_interfaces_pthread_rwlock_init_2_1 +ltp_interfaces_pthread_once_1_3 +ltp_interfaces_pthread_rwlock_rdlock_4_1 +ltp_interfaces_pthread_cond_timedwait_1_1 +ltp_interfaces_sigrelse_3_1 +ltp_interfaces_pthread_cond_signal_2_1 +ltp_interfaces_mq_setattr_1_2 +ltp_interfaces_pthread_rwlock_timedwrlock_1_1 +ltp_interfaces_pthread_testcancel_2_1 +ltp_interfaces_sigaction_18_2 +ltp_interfaces_mmap_1_1 +ltp_interfaces_pthread_rwlock_timedrdlock_5_1 +ltp_interfaces_sigdelset_1_2 +ltp_interfaces_sched_rr_get_interval_speculative_5_1 +ltp_interfaces_timer_gettime_2_1 +ltp_interfaces_pthread_condattr_destroy_2_1 +ltp_interfaces_sigwaitinfo_5_1 +ltp_interfaces_pthread_rwlock_timedwrlock_2_1 +ltp_interfaces_sigaddset_4_1 +ltp_interfaces_sigaction_2_2 +ltp_interfaces_pthread_create_1_3 +ltp_interfaces_sem_timedwait_3_1 +ltp_interfaces_pthread_cond_timedwait_3_1 +ltp_interfaces_sem_init_6_1 +ltp_interfaces_sigtimedwait_1_1 +ltp_interfaces_pthread_mutexattr_setpshared_1_2 +ltp_interfaces_pthread_cleanup_push_1_3 +ltp_interfaces_pthread_cancel_5_1 +ltp_behavior_timers_1_1 +ltp_interfaces_sigtimedwait_4_1 +ltp_interfaces_timer_settime_6_1 +ltp_interfaces_timer_settime_8_1 +ltp_interfaces_pthread_mutex_timedlock_2_1 +ltp_interfaces_localtime_1_1 +ltp_interfaces_pthread_mutex_destroy_2_2 +ltp_interfaces_pthread_barrierattr_setpshared_2_1 +ltp_interfaces_pthread_mutexattr_setpshared_2_1 +ltp_interfaces_signal_3_1 +ltp_interfaces_mq_setattr_1_1 +ltp_interfaces_strncpy_2_1 +ltp_interfaces_timer_settime_9_1 +ltp_interfaces_sigdelset_1_1 +ltp_interfaces_mq_timedreceive_15_1 +ltp_interfaces_mq_open_20_1 +ltp_interfaces_mq_open_21_1 +ltp_interfaces_timer_create_1_1 +ltp_interfaces_pthread_mutexattr_destroy_4_1 +ltp_definitions_errno_h_3_2 +ltp_interfaces_sigqueue_11_1 +ltp_interfaces_pthread_rwlock_wrlock_1_1 +ltp_interfaces_pthread_rwlock_timedrdlock_3_1 +ltp_interfaces_mq_timedsend_4_1 +ltp_interfaces_pthread_mutex_init_4_1 +ltp_interfaces_mq_open_18_1 +ltp_interfaces_sigaction_1_2 +ltp_interfaces_pthread_setcancelstate_3_1 +ltp_interfaces_pthread_kill_7_1 +ltp_interfaces_pthread_mutexattr_gettype_1_4 +ltp_interfaces_sem_timedwait_2_2 +ltp_interfaces_pthread_mutexattr_setpshared_3_1 +ltp_interfaces_pthread_barrier_wait_2_1 +ltp_interfaces_pthread_barrier_wait_1_1 +ltp_interfaces_pthread_rwlock_unlock_2_1 +ltp_interfaces_pthread_mutexattr_setpshared_1_1 +ltp_interfaces_pthread_key_delete_1_2 +ltp_interfaces_pthread_cond_wait_3_1 +ltp_interfaces_sigset_8_1 +ltp_mq_open_speculative_6_1 +ltp_interfaces_sigwait_8_1 +ltp_interfaces_sched_get_priority_min_1_2 +ltp_interfaces_sigqueue_2_1 +ltp_interfaces_sigignore_6_1 +ltp_interfaces_pthread_barrierattr_destroy_1_1 +ltp_interfaces_sched_getparam_2_1 +ltp_interfaces_timer_gettime_3_1 +ltp_interfaces_sem_timedwait_10_1 +ltp_interfaces_sched_setparam_25_1 +ltp_interfaces_pthread_rwlock_destroy_3_1 +ltp_timer_create_speculative_2_1 +ltp_interfaces_nanosleep_1_1 +ltp_interfaces_clock_settime_5_2 +ltp_timer_gettime_speculative_6_3 +ltp_interfaces_ctime_1_1 +ltp_interfaces_sched_get_priority_min_1_1 +ltp_interfaces_pthread_mutex_lock_2_1 +ltp_interfaces_clock_gettime_1_2 +ltp_interfaces_pthread_setcancelstate_2_1 +ltp_interfaces_pthread_getschedparam_1_2 +ltp_interfaces_sched_setscheduler_17_5 +ltp_interfaces_sem_timedwait_1_1 +ltp_interfaces_strftime_3_1 +ltp_interfaces_strlen_1_1 +ltp_interfaces_pthread_cond_wait_2_1 +ltp_mq_open_speculative_26_1 +ltp_interfaces_pthread_condattr_init_3_1 +ltp_interfaces_sched_getparam_1_1 +ltp_timer_delete_speculative_5_2 +ltp_interfaces_pthread_cleanup_push_1_1 +ltp_interfaces_clock_getres_3_1 +ltp_interfaces_mq_timedsend_18_1 +ltp_interfaces_mmap_27_1 +ltp_interfaces_pthread_cond_destroy_1_1 +ltp_interfaces_sem_timedwait_6_2 +ltp_interfaces_timer_settime_3_2 +ltp_interfaces_pthread_mutexattr_settype_1_1 +ltp_interfaces_pthread_rwlock_init_6_1 +ltp_interfaces_timer_settime_3_1 +ltp_interfaces_pthread_attr_setinheritsched_1_1 +ltp_syscalls_clock_gettime01 +ltp_syscalls_accept01 +ltp_syscalls_alarm02 +ltp_syscalls_alarm05 +ltp_syscalls_alarm06 +ltp_syscalls_bind01 +ltp_syscalls_clock_nanosleep04 +ltp_syscalls_creat03 +ltp_syscalls_fork05 +ltp_syscalls_getcwd02 +ltp_syscalls_getpriority01 +ltp_syscalls_getpriority02 +ltp_syscalls_getrandom01 +ltp_syscalls_getrandom03 +ltp_syscalls_getrandom04 +ltp_syscalls_getrlimit03 +ltp_syscalls_fanotify_child +ltp_syscalls_listen01 +ltp_syscalls_memset01 +ltp_syscalls_memcmp01 +ltp_syscalls_memcpy01 +ltp_syscalls_mlock01 +ltp_syscalls_prctl03 +ltp_syscalls_prctl08 +ltp_syscalls_recvmsg02 +ltp_syscalls_sbrk03 +ltp_syscalls_settimeofday01 +ltp_syscalls_settimeofday02 +ltp_syscalls_syslogtst +ltp_syscalls_socket01 +ltp_syscalls_timer_delete02 +ltp_syscalls_uname04 diff --git a/testrun/runLTP.py b/testrun/runLTP.py new file mode 100755 index 0000000..cbc49a5 --- /dev/null +++ b/testrun/runLTP.py @@ -0,0 +1,254 @@ +#!/usr/bin/python3 + +import os, sys, time, re, platform +import argparse, inspect +import pexpect +import subprocess +import csv +from itertools import groupby + +PROMPT = "nsh>" +orgPath = os.path.abspath(os.path.dirname(__file__)) + +def parse_args(): + arg = argparse.ArgumentParser() + arg.add_argument("-b", dest='board', default='sim', + help="specify board value, for example: sim or amebaZ, default is sim") + arg.add_argument('-l', dest='log', default='.', + help="specify log path") + arg.add_argument('-p', dest='path', default='.', + help="specify source code dir") + args = arg.parse_args() + return args + +class connectNuttx(object): + + def setup(self, path, log): + os.chdir(path) + self.process = pexpect.spawn("./nuttx/nuttx") + self.log = open(log, 'wb') + self.process.logfile = self.log + self.process.expect(PROMPT) + + def sendCommand(self, cmd): + self.process.sendline(cmd) + try: + self.process.expect(PROMPT, timeout=300) + #get return valule + self.process.sendline('echo $?') + self.process.readline() + line = self.process.readline() + if "0" in str(line): + print("test case run pass, return 0") + return 0 + else: + print("test case run fail, return %s" % str(line)) + return str(line) + + except pexpect.TIMEOUT: + print("Debug: TIMEOUT '%s' exist and run next test case" % cmd) + return 2 + + except pexpect.EOF: + print("Debug: EOF raise exception") + return 3 + + def cleanup(self): + self.process.sendline('poweroff') + self.process.expect("$") + os.chdir(orgPath) + self.log.close() + +def runCmd(cmd): + p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + stdout, stderr = p.communicate() + recode = p.returncode + + if recode != 0 : + print("Debug: run command '%s' failed" % cmd) + + return stdout + + +def getResult(case, ret, dic): + if ret == 0: + dic[case] = 'PASS' + else: + dic[case] = 'FAIL' + + return dic + +#read case from builtin_list.h file +def getCaseList(buildinfile, flag): + f = open(buildinfile, 'r') + lines = f.readlines() + f.close() + clist = [] + for line in lines: + if flag in line: + #line: { "ltp_interfaces_mq_setattr_1_1", SCHED_PRIORITY_DEFAULT, 8192, ltp_test_interfaces_mq_setattr_1_1_main }, + #get ltp_interfaces_mq_setattr_1_1 + obj = re.search(r'.*("%s.*")(.*)' % flag, line, re.M|re.I) + #case not in blackList.txt + if not findString(obj.group(1).strip('"'), 'blackList.txt'): + clist.append(obj.group(1)) + return clist + +#find string on dailyRunList.txt +def findString(string, filename): + fPath = os.path.abspath(os.path.dirname(inspect.getfile(inspect.currentframe()))) + with open(os.path.join(fPath, filename), 'r') as f: + lines = f.readlines() + f.close() + + for line in lines: + if string in line: + return True + return False + +#update dic +def updateDic(dic): + tmpDic={} + for key in dic.keys(): + if findString(str(key), 'dailyRunList.txt'): + tmpDic[key] = dic[key] + return tmpDic + +#write test result to csv file +def writeCsv(dic, log, name): + today = time.strftime("%Y%m%d", time.localtime()) + resultName = os.path.join(log, name + '_result_' + today + '.csv') + f = open(resultName, 'w') + + csv_write = csv.writer(f) + #write summary to csv + csv_summary = ["Total", "PASS", "FAIL", "PASS_Rate"] + csv_write.writerow(csv_summary) + (pNum, fNum, pRate) = genSummary(dic) + csv_write.writerow([pNum+fNum, pNum, fNum, str(pRate) + '%']) + csv_write.writerow(['\n']) + + #write cases status + csv_head = ["Test Case", "Status"] + csv_write.writerow(csv_head) + + for key in dic.keys(): + csv_write.writerow([key, dic[key]]) + + f.close() + +#find file +def findFile(path, flag): + fList = [] + for root, dirs, files in os.walk(path): + for name in files: + if flag in name and not '.o' in name: + fList.append(os.path.join(root, name)) + return fList + +#get test suite name +def getTsName(tsFile): + ts = '_'.join(os.path.basename(tsFile).split('_')[:-2]) + return ts + +#get case list from buildin_list.h and write to testsuite_list.txt +def readBuildInList(path, log): + flist = findFile(path, 'builtin_list.h') + today = time.strftime("%Y%m%d", time.localtime()) + for bfile in flist: + l1 = getCaseList(bfile, 'ltp_') + #get open_posix list + opList = [list(g) for k,g in groupby(l1,lambda x:'ltp_syscalls' in x) if not k] + opFile = '%s_list_%s.txt' % ('open_posix', today) + if opList: + writeListToFile(os.path.join(log, opFile), opList[0]) + + #get syscalls list + sysList = [list(g) for k,g in groupby(l1,lambda x:'ltp_syscalls' in x) if k] + sysFile = '%s_list_%s.txt' % ('syscalls', today) + if sysList: + writeListToFile(os.path.join(log, sysFile), sysList[0]) + return + +#write runlist to file +def writeListToFile(filename, newlist): + if newlist: + f = open(filename, 'w') + for ts in newlist: + f.write(ts.strip('"')) + f.write('\n') + f.close() + return f + +#read test case status and generate summary +def genSummary(dic): + passNum = 0 + failNum = 0 + + for key in dic.keys(): + if dic[key] == 'PASS': + passNum = passNum + 1 + else: + failNum = failNum + 1 + passRate = round(passNum/(passNum+failNum)*100, 2) + return (passNum, failNum, passRate) + + +def main(): + + args = parse_args() + board = args.board + log = args.log + path = args.path + + #check the argument + if not os.path.exists(path): + print("please set source code path!") + sys.exit() + + if not os.path.exists(log): + os.makedirs(log) + + #get case list from buildin_list.h and write to open_posix_list_20200921.txt + readBuildInList(path, log) + + today = time.strftime("%Y%m%d", time.localtime()) + #get test suite list from log path + tsList = findFile(log, '_list_%s.txt' % today) + + dic = {} + for tsFile in tsList: + #get Summary for test suite + #get test suite name from test suite list file + #for example: open_posix_list_20200921.txt, test suite: open_posix + ts = getTsName(tsFile) + + #get case list from ts file + f = open(tsFile, 'r') + cList = f.readlines() + f.close() + + #run test case + for case in cList: + case = case.strip("\n") + p = connectNuttx() + p.setup(path, os.path.join(log, case + ".txt")) + ret = p.sendCommand(case) + + #get PASS FAIL result + dic = getResult(case, ret, dic) + + p.cleanup() + + #follow the dailyRunList generate new dic + tmpDic = updateDic(dic) + + #write result to csv + writeCsv(tmpDic, log, ts) + + +if __name__ == '__main__': + main()