📄 mtest.py.in
字号:
TST_BATS = eval(b.group(1)) else: Warn("No output from Mserver when checking for Bats!?") if qErr: STDERR.write(cmd + "\n\n") STDERR.write(qErr) STDERR.write("\n") STDERR.flush() if os.path.isfile(TST+".BATs"): for b in fileinput.input(TST+".BATs"): b = b.strip() if b and b[0] != "#" and b not in TST_BATS: missing.append(b) return missing### CheckBATs(env, TST, TSTDB) #def StartAt(cmd) : pOut,pIn,pErr = popen2.popen3(cmd) pIn.close() qOut, qErr = ReadMultiple([pOut, pErr]) return qOut.split('\n', 1)[0].strip()### StartAt(cmd) #def StopAt(ATJOB,ME) : while os.path.isfile(path("/tmp/.MkillUsers."+ME)): time.sleep(9) if OS == "IRIX" or OS == "IRIX64": ATRM = 'at -r ' else: ATRM = 'atrm ' os.system(ATRM+ATJOB) #TODO: #LOG1x at -l >&2### StopAt(ATJOB,ME) #def StableOutErr(env,par,TST,OS,RELEASE) : BITS = env['TST_BITS'] OIDS = env['TST_OIDS'] FIVE = env['TST_FIVE'] STATIC = env['TST_STATIC'] if FIVE: FIVE = "(\.Five)?" if STATIC: STATIC = "(\.STATIC)?" dir,file = os.path.split(TST) outre = re.compile('^'+re.escape(file)+'\.stable\.(?P<tp>out|err)(\.%s(%s)?)?(\.%s)?(\.%s)?%s%s$' % (re.escape(OS), re.escape(RELEASE), BITS, OIDS, FIVE, STATIC)) bestout = besterr = '' for f in os.listdir(dir or os.curdir): res = outre.match(f) if res is not None: if res.group('tp') == 'out': if len(bestout) < len(f): bestout = f else: # res.group('tp') == 'err' if len(besterr) < len(f): besterr = f if bestout: STABLEout = os.path.join(dir, bestout)[len(TST):] else: STABLEout = '.stable.out' if besterr: STABLEerr = os.path.join(dir, besterr)[len(TST):] else: STABLEerr = '.stable.err' return STABLEout, STABLEerr### StableOutErr(env,par,TST,OS,RELEASE) #def RunTest(env, TST, BusyPorts, COND) : Failed = -1 FailedOut = -1 FailedErr = -1 TSTDB = env['TSTDB'] TSTDIR = env['TSTDIR'] TSTSRCDIR = env['TSTSRCDIR'] RELSRCDIR = env['RELSRCDIR'] TSTTRGDIR = env['TSTTRGDIR'] TSTTRGBASE = env['TSTTRGBASE'] os.chdir(TSTSRCDIR) elem = None quiet = env['QUIET'] TX = 0 EXT = CALL = SERVER = "" x = isexecutable(TST) xS = isexecutable(TST+".SQL") xM = isexecutable(TST+".MAPI") xQ = isexecutable(TST+".XQUERY") if x[0]: EXT = x[1] ; CALL = "other" elif xS[0]: EXT = ".SQL"+xS[1] ; CALL = "other" ; SERVER = "SQL" elif xM[0]: EXT = ".MAPI"+xM[1] ; CALL = "other" ; SERVER = "MAPI" elif xQ[0]: EXT = ".XQUERY"+xQ[1] ; CALL = "other" ; SERVER = "XQUERY" elif os.path.isfile(TST+".py") or os.path.isfile(TST+".py.src"): EXT = ".py" ; CALL = "python" elif os.path.isfile(TST+".SQL"+".py") or os.path.isfile(TST+".SQL"+".py.src") or os.path.isfile(TST+".SQL"+".py.in"): EXT = ".SQL.py" ; CALL = "python" ; SERVER = "SQL" elif os.path.isfile(TST+".MAPI"+".py") or os.path.isfile(TST+".MAPI"+".py.src") or os.path.isfile(TST+".MAPI"+".py.in"): EXT = ".MAPI.py" ; CALL = "python" ; SERVER = "MAPI" elif os.path.isfile(TST+".XQUERY"+".py") or os.path.isfile(TST+".XQUERY"+".py.src") or os.path.isfile(TST+".XQUERY"+".py.in"): EXT = ".XQUERY.py" ; CALL = "python" ; SERVER = "XQUERY" elif os.path.isfile(TST+".mal") or os.path.isfile(TST+".mal.src") or os.path.isfile(TST+".mal.in"): EXT = ".mal" ; CALL = "mal" elif os.path.isfile(TST+".milM") or os.path.isfile(TST+".milM.src") or os.path.isfile(TST+".milM.in"): EXT = ".milM" ; CALL = "milM" elif os.path.isfile(TST+".milS") or os.path.isfile(TST+".milS.src") or os.path.isfile(TST+".milS.in"): EXT = ".milS" ; CALL = "milS" elif os.path.isfile(TST+".milC") or os.path.isfile(TST+".milC.src") or os.path.isfile(TST+".milC.in"): EXT = ".milC" ; CALL = "milC" ; SERVER = "MAPI" elif os.path.isfile(TST+"_s00.milM") or os.path.isfile(TST+"_s00.milM.src") or os.path.isfile(TST+"_s00.milM.in"): EXT = ".milM" ; CALL = "milMXs" elif os.path.isfile(TST+"_s00.milS") or os.path.isfile(TST+"_s00.milS.src") or os.path.isfile(TST+"_s00.milS.in"): EXT = ".milS" ; CALL = "milSXs" elif os.path.isfile(TST+"_s00.milC") or os.path.isfile(TST+"_s00.milC.src") or os.path.isfile(TST+"_s00.milC.in"): EXT = ".milC" ; CALL = "milCXs" ; SERVER = "MAPI" elif os.path.isfile(TST+"_p00.milC") or os.path.isfile(TST+"_p00.milC.src") or os.path.isfile(TST+"_p00.milC.in"): EXT = ".milC" ; CALL = "milCXp" ; SERVER = "MAPI" elif os.path.isfile(TST+".sql") or os.path.isfile(TST+".sql.src") or os.path.isfile(TST+".sql.in"): EXT = ".sql" ; CALL = "sql" ; SERVER = "SQL" elif os.path.isfile(TST+"_s00.sql") or os.path.isfile(TST+"_s00.sql.src") or os.path.isfile(TST+"_s00.sql.in"): EXT = ".sql" ; CALL = "sqlXs" ; SERVER = "SQL" elif os.path.isfile(TST+"_p00.sql") or os.path.isfile(TST+"_p00.sql.src") or os.path.isfile(TST+"_p00.sql.in"): EXT = ".sql" ; CALL = "sqlXp" ; SERVER = "SQL" elif os.path.isfile(TST+".xq") or os.path.isfile(TST+".xq.src") or os.path.isfile(TST+".xq.in"): EXT = ".xq" ; CALL = "xq" ; SERVER = "XQUERY" elif os.path.isfile(TST+"_s00.xq") or os.path.isfile(TST+"_s00.xq.src") or os.path.isfile(TST+"_s00.xq.in"): EXT = ".xq" ; CALL = "xqXs" ; SERVER = "XQUERY" elif os.path.isfile(TST+"_p00.xq") or os.path.isfile(TST+"_p00.xq.src") or os.path.isfile(TST+"_p00.xq.in"): EXT = ".xq" ; CALL = "xqXp" ; SERVER = "XQUERY" elif os.path.isfile(TST+".x100") or os.path.isfile(TST+".x100.src") or os.path.isfile(TST+".x100.in"): EXT = ".x100" ; CALL = "x100" ; SERVER = "MAPI" elif os.path.isfile(TST+"_s00.x100") or os.path.isfile(TST+"_s00.x100.src") or os.path.isfile(TST+"_s00.x100.in"): EXT = ".x100" ; CALL = "x100Xs" ; SERVER = "MAPI" #TODO: #elif [ -f "$TST.java" ] ; then EXT="java" ; CALL="Java "+TST+" "+EXT #elif [ -f "${TST}_s00.java" ] ; then EXT="java" ; CALL="JavaXs "+TST+" "+EXT #elif [ -f "${TST}_p00.java" ] ; then EXT="java" ; CALL="JavaXp "+TST+" "+EXT #elif [ -f "$TST.odmg" ] ; then EXT="odmg" ; CALL="odmg "+TST+" "+EXT else: i = TST.rfind('.') if i > 0: return RunTest(env, TST[:i], BusyPorts, COND) EXT = CALL = SERVER = "" if os.name == "nt": ErrMsg("test missing: '"+os.path.join(TSTSRCDIR,TST)+".(exe|com|bat|cmd|py|mal|milM|milS|milC|sql|xq|x100)`") #TODO: #elif os.name == "posix": else: ErrMsg("test missing: '"+os.path.join(TSTSRCDIR,TST)+"[.py|.mal|.milM|.milS|.milC|.sql|.xq|.x100]`") return TX,Failed,Failed,elem MissingMods = CheckMods(env, TST, SERVER, CALL) MissingBATs = CheckBATs(env, TST, TSTDB) os.chdir(TSTTRGDIR) NotOnNT = [] #["src/modules/contrib/salgebra"] #\ # ["src/modules/plain/tcpip1", "src/modules/plain/tcpip2"] #\ # "src/modules/contrib/salgebra", "tests/by_Peter/tst_priv", \ # "scripts/gold/tst100", "scripts/gold/tstvoid", "src/gdk/reload", "src/modules/plain/mprof", "src/modules/plain/mprof2", \ # "tests/Availability/00_Mserver", "tests/BugReports/no.073", "tests/BugReports/no.089"] NotOnCYG = [] #[ "tests/BugReports/no.147", "tests/by_Peter/recursion" ] if COND and not CONDITIONALS.has_key(COND): elem = SkipTest(env, TST, EXT, "as conditional '%s' is unknown." % COND) elif COND and not CONDITIONALS[COND]: elem = SkipTest(env, TST, EXT, "as conditional '%s' does not hold." % COND) elif os.name == "nt" and url(TSTDIR)+"/"+TST in NotOnNT: elem = SkipTest(env, TST, EXT, "as it currently crashes/hangs on WindowsNT.") elif sys.platform == "cygwin" and url(TSTDIR)+"/"+TST in NotOnCYG: elem = SkipTest(env, TST, EXT, "as it currently crashes/hangs on CYGWIN.") elif ( EXT[:4] == ".mil" or SERVER == "MAPI" ) and env['VERSION'] >= 49900: elem = SkipTest(env, TST, EXT, "as Monet5 does not support MIL.") elif EXT == ".milC" and not env['exe']['Mapi_Client'][0]: elem = SkipTest(env, TST, EXT, "as "+env['MAPICLIENT'].split(None, 1)[0]+" is not available.") elif EXT == ".sql" and not env['exe']['SQL_Client'][0]: elem = SkipTest(env, TST, EXT, "as "+env['SQLCLIENT'].split(None, 1)[0]+" is not available.") elif EXT == ".sql" and not env['exe']['SQL_Dump'][0]: elem = SkipTest(env, TST, EXT, "as "+env['SQLDUMP'].split(None, 1)[0]+" is not available.") elif EXT == ".xq" and not env['exe']['XQuery_Client'][0]: elem = SkipTest(env, TST, EXT, "as "+env['XQUERYCLIENT'].split(None, 1)[0]+" is not available.") elif EXT == ".x100" and not env['exe']['X100_Client'][0]: elem = SkipTest(env, TST, EXT, "as "+env['X100CLIENT'].split(None, 1)[0]+" is not available.") elif CALL == "python" and not env['exe']['python'][0]: elem = SkipTest(env, TST, EXT, "as python is not available.") #TODO: #elif EXT == ".milC": #elem = SkipTest(env, TST, EXT, "as MapiClient-tests are temporary not supported by "+THISFILE+".") #TODO: #elif [ "$EXT" = "java" -a ! "`type -path java`" ] ; then #elem = SkipTest(env, TST, EXT, "as java is not in $PATH.") elif MissingMods: elem = SkipTest(env, TST, EXT, "as modules '"+str(MissingMods)+"` are missing.") elif MissingBATs: elem = SkipTest(env, TST, EXT, "as BATs '"+str(MissingBATs)+"` are missing in database '"+TSTDB+"`.") elif CALL == "milCXp": elem = SkipTest(env, TST, EXT, "as multiple MapiClients in parallel are currently not supported by "+THISFILE+".") elif CALL == "sqlXp": elem = SkipTest(env, TST, EXT, "as multiple SQL clients in parallel are currently not supported by "+THISFILE+".") elif CALL == "xqXp": elem = SkipTest(env, TST, EXT, "as multiple XQuery clients in parallel are currently not supported by "+THISFILE+".") elif SERVER in BusyPorts: elem = SkipTest(env, TST, EXT, "as %sPORT=%s is not available." % (SERVER,env[SERVER+'PORT'])) elif SERVER == "XQUERY" and "XRPC" in BusyPorts: elem = SkipTest(env, TST, EXT, "as XRPCPORT=%s is not available." % (env['XRPCPORT'])) else: test = re.compile("^"+TST+"((_[sp][0-9][0-9])?\..*)?$", re.MULTILINE) for f in os.listdir(RELSRCDIR): if test.match(f): SymlinkOrCopy(os.path.join(RELSRCDIR,f),os.path.join(TSTTRGDIR,f)) if SERVER == "MAPI": CheckSocket2(env, "MAPI") #, SrvrErr) if SERVER == "XQUERY": CheckSocket2(env, "XRPC") #, SrvrErr) if os.path.isfile(TST+EXT+".src") and not os.path.isfile(TST+EXT): f = open(TST+EXT+".src","r") TSTSRC = expandvars(path(f.readline().strip())) f.close() if os.path.isfile(TSTSRC): SymlinkOrCopy(TSTSRC,TST+EXT) else: elem = SkipTest(env, TST, EXT+".src", "as source file '"+TSTSRC+"` is missing.") return TX,Failed,Failed,elem test = re.compile("^"+TST+"((_[sp][0-9][0-9])?\..*)?\.src$", re.MULTILINE) for ff in os.listdir(TSTTRGDIR): if test.match(ff) and not os.path.isfile(ff[:-4]): f = open(ff,"r") TSTSRC = expandvars(path(f.readline().strip())) f.close() if os.path.isfile(TSTSRC): SymlinkOrCopy(TSTSRC,ff[:-4]) else: Warn("source file '"+TSTSRC+"` is missing.") test = re.compile("^"+TST+"(_[sp][0-9][0-9])?\..*\.in$", re.MULTILINE) for ff in os.listdir(TSTTRGDIR): fff = ff[:-3] if test.match(ff) and not os.path.isfile(fff): f = open(fff,"w") for l in fileinput.input(ff): f.write(expandvars(l)) f.close() if THISFILE == "Mprofile.py": test = re.compile("^"+TST+"(_[sp][0-9][0-9])?\..*mil.*$", re.MULTILINE) d = os.listdir(os.getcwd()) for f in d: if test.match(f) and f != TST+EXT+".src": prof.prof(f, env['CMDLST']) os.rename(f,f+".no_prof") os.rename("prof_"+f,f) if not quiet: os.system('%s -I"%s" "%s" -A%d "%s.no_prof" "%s" "%s.prof.diff.html"' % (env['exe']['Mdiff'][1],par['IGNORE'],par['CONTEXT'],par['ACCURACY'],f,f,f)) else: os.system('%s -q -I"%s" "%s" -A%d "%s.no_prof" "%s" "%s.prof.diff.html"' % (env['exe']['Mdiff'][1],par['IGNORE'],par['CONTEXT'],par['ACCURACY'],f,f,f)) ACCURACYout = par['ACCURACY'] ACCURACYerr = par['ACCURACY'] STABLEout,STABLEerr = StableOutErr(env,par,TST,OS,RELEASE) if not os.path.isfile(TST+STABLEout): open(TST+STABLEout,"w").close() ACCURACYout = 0 if not os.path.isfile(TST+STABLEerr): open(TST+STABLEerr,"w").close() ACCURACYerr = 0 PRELUDE = "" #if EXT not in ['.milC','.sql','.xq','.x100']: if EXT not in ['.sql','.xq','.x100']: if os.path.isfile(TST+".prelude") and env['VERSION'] < 49900: PRELUDE = TST+".prelude" if os.path.isfile(TST+".prelude5") and env['VERSION'] >= 49900: PRELUDE = TST+".prelude5" TIMEOUTED = "Mtimeout" for v in env['exe'].keys(): TIMEOUTED = TIMEOUTED+"|"+v.upper() test = re.compile("^[^#]*("+TIMEOUTED+")[^#]*(# ([0-9]+)x|#.*)?$", re.MULTILINE) TIMEOUT = par['TIMEOUT'] if os.path.isfile(TST+".timeout"): for f in fileinput.input(TST+".timeout"): TOf = int(f.strip()) if TOf > 1: TIMEOUT = TIMEOUT * TOf if env['exe']['Mtimeout'][0]: env['exe']['Mtimeout'] = env['exe']['Mtimeout'][0], 'Mtimeout -timeout '+str(TIMEOUT)+' ' SetExecEnv(env['exe'],0) CTIMEOUT = 0 if CALL in ["other", "python"]: if TIMEOUT > 0: CTIMEOUT = CTIMEOUT + 60 for l in fileinput.input(TST+EXT): TOm = test.match(l) if TOm: TOx = TOm.group(3) if TOx and (int(TOx) > 1): TOx = int(TOx) else: TOx = 1 CTIMEOUT = CTIMEOUT + ( TOx * TIMEOUT ) elif CALL in ["milMXs", "milSXs", "milCXs", "sqlXs", "xqXs", "x100Xs"]: test = re.compile("^"+TST+"_s[0-9][0-9]"+EXT+"$", re.MULTILINE) d = os.listdir(os.getcwd()) for f in d: if test.match(f): CTIMEOUT = CTIMEOUT + TIMEOUT elif CALL in ["mal", "milM", "milS", "milC", "sql", "xq", "x100"]: CTIMEOUT = CTIMEOUT + TIMEOUT if CTIMEOUT < TIMEOUT: CTIMEOUT = TIMEOUT STIMEOUT = CTIMEOUT if SERVER in ["MAPI", "SQL", "XQUERY"] and TIMEOUT > 0: STIMEOUT = STIMEOUT + TIMEOUT + 60 ME = "" ATJOB1 = "" MkillUsers =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -