
| Current Path : /var/www/web-klick.de/dsh/10_customer2017/1210__delphi/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/10_customer2017/1210__delphi/testtree1.py |
#!/usr/bin/python3
import os
import re
import time
import sys
import imp
import pickle
import base64
# This is the central TestTree1.py module to perform hierarchical
# organized tests (tree of test items)
class cls (object):
def __init__ (self):
self._result = "0/0/0/0"
self._remark = ""
self._user = "xx"
self._requ = { 'Standard' : 0.01 }
self._log = ""
self._testcase = ""
self._testfile = ""
self.___run0___ = 0
self.___jump___ = "run"
#****************************************************************************
def result (self):
return("0/0/0/0")
def remark (self):
return("")
def user (self):
return(str(""))
def requ (self):
return({})
#****************************************************************************
# def run0 (self,pars):
# self._testcase = pars.pop(0)
# self.run(pars)
#****************************************************************************
def run (self,pars):
o = """
def run (self,pars):
o = "1"1"1
---LOG---
"1"1"1
o1 = re.sub('" *1','"'+'2',o)
o = re.sub("---LOG---",o1,o,1)
o = re.sub('" *1','"' ,o)
o = re.sub('" *2','"'+'1',o)
self._log = o
self.sync(1)
"""
o1 = re.sub('" *1','"'+'2',o)
o = re.sub("---LOG---",o1,o,1)
o = re.sub('" *1','"' ,o)
o = re.sub('" *2','"'+'1',o)
self._log = o
self.sync(1)
#****************************************************************************
def next_test0 (self,filename):
try:
filename = int(re.sub(r"^.*?(\d+).*$",r"\1",filename))
except:
filename = 0
filename = "%03u" % (filename+1)
return("t"+filename)
#****************************************************************************
def next_test (self,filename):
return(self.next_test0(filename))
#****************************************************************************
def sync (self,p1="___NO_P___",p2="___NO_P___",p3="___NO_P___",p4="___NO_P___",p5="___NO_P___"):
passed = -1
warn = -1
err = -1
notp = -1
for o in [p1,p2,p3,p4,p5]:
if o == "___NO_P___":
break
if passed == -1 and type(o) == type(0):
passed = o
elif warn == -1 and type(o) == type(0):
warn = o
elif err == -1 and type(o) == type(0):
err = o
elif notp == -1 and type(o) == type(0):
notp = o
else:
self._remark = o
if not passed+warn+err+notp == -4:
if (passed == -1):
passed = 0
if (warn == -1):
warn = 0
if (err == -1):
err = 0
if (notp == -1):
notp = 0
self._result = str(passed) + "/" + str(warn) + "/" + str(err) + "/" + str(notp)
for o in dir(self):
if re.search(r"^(run|r\d+|t\d+)$",o):
if self.___jump___ == "":
self.___jump___ = o
break
elif self.___jump___ == o:
self.___jump___ = ""
testdir = re.sub(r"\.",r"/",self.__module__)
testdir = re.sub(r"\/(autoitem|item|pytest)$",r"",testdir)
if self._testcase == "":
while (0 == 0): # Searching for a valid testcase-name
self._testcase = self.next_test(self._testcase)
if not os.path.isfile(testdir+"/"+self._testcase+"/item.py") or self._testcase == "":
break
if self._testcase == "": # Searching for a valid testcase-name
return("ERROR: No testcase to be done found anymore")
text = ""
filename = ""
if text == "":
filename = "item.pl"
text = self.check_perl()
if text == "":
filename = "item.py"
text = self.check_python()
o = self.___jump___
if o == "":
o = "NONE"
text = re.sub(r" ---JUMP---"," "+o,text)
if not os.path.isdir(testdir+"/"+self._testcase):
os.makedirs(testdir+"/"+self._testcase)
ffile = open(testdir+"/"+self._testcase+"/"+filename,"w")
ffile.write(text)
ffile.close()
os.chmod(testdir+"/"+self._testcase+"/"+filename,0o774)
ffile = open(testdir+"/"+self._testcase+"/__init__.py","w")
ffile.write("")
ffile.close()
os.chmod(testdir+"/"+self._testcase+"/__init__.py",0o774)
o = ""
if self.___jump___:
o = ", next jump: " + self.___jump___
print("\nWRITTEN: " + testdir+"/"+self._testcase+o+"\n")
if not self.___jump___:
return()
text1 = ""
try:
if not os.environ['autoedit'] == "":
os.system(os.environ['autoedit']+" "+testdir+"/"+self._testcase+"/item.py")
ffile = open(testdir+"/"+self._testcase+"/item.py")
for zeile in ffile:
text1 = text1 + zeile
ffile.close()
except:
pass
if not text1 == "" and not text == text1:
text1 = re.sub(r"return\(\"SLEEP(\d+)\"\)","return(\"SLEEP1\")",text1)
ffile = open(testdir+"/"+self._testcase+"/"+filename,"w")
ffile.write(text1)
ffile.close()
ffile = open(testdir+"/"+self._testcase+"/"+filename,"w")
ffile.write(text1)
ffile.close()
o = re.sub(r"\.item$","."+self._testcase+".item",self.__module__)
self._o = ""
time.sleep(0.015) # for the reason of race condition with __pycache__ !
exec("import " + o + "\nimp.reload("+o+")\nself._o = " + o + ".cls()\n")
self._o.proceed()
#****************************************************************************
def check_autotest (self):
return("")
#****************************************************************************
def check_perl (self):
return("")
#****************************************************************************
def check_python (self):
text = """import os
import re
#vvvvvvv DO NOT TOUCH THIS CODE. IT IS NEEDED FOR DYNAMIC INHERITANCE!! vvvvvvv
#
pkg = __name__ #
while (0 == 0): #
m = re.search(r"^(.*)\\.(.*)\\.(.*)$",pkg) #
if not m: #
break #
pkg = m.group(1) + "." + m.group(3) #
try: #
exec("import "+pkg+"\\nclass parent ("+pkg+".cls):\\n pass\\n") #
break #
except: #
break #
#
#AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
class cls (parent):
def next_test (self,o):
return(self.next_test0(o))
#------------ EVALUATION: --------------------
def result (self):
return("---RESULT---")
def remark (self):
return("---REMARK---")
def user (self):
return("---USER---")
def requ (self):
return {
"""
# text = re.sub("---EXECUTABLE---",'/usr/bin/python3', text)
text = re.sub("---RESULT---",str(self._result),text)
text = re.sub("---REMARK---",str(self._remark),text)
o = time.localtime()
o = str(o[0]) + str(o[1]) + str(o[2]) + "_" + str(o[3]) + str(o[4]) + str(o[5])
o = re.sub("^,","",self.user()+","+o)
text = re.sub("---USER---", o+self._user, text)
r = self._requ
for o in r.keys():
text = text + " '" + o + "': " + str(r[o]) + ",\n"
rem = ""
if (re.search(r"^[\n ]*def +run +\(self,pars\) *\:",self._log)):
rem = "#"
self._log = re.sub(r"'(X*)X''",r"'\1''",self._log)
text = text + " }\n\n"
text = text + "#------------ PROGRAM CODE: (next jump: ---JUMP---) ------\n\n"
text = text + rem+" def log (self):\n"+rem+" o = '''"
text = text + self._log + rem + "'''\n" + rem + " return(o)\n"
if not self.___jump___ == "":
self._o = ""
text = text + "\n def dump_data (self):\n return('''\n"
o = re.sub(r"^b\'(.*)\'$",r"\1",str(base64.b64encode(pickle.dumps(self))))
while not o == "":
text = text + o[:80] + "\n";
o = o[80:]
text = text + "''')\n"
text = text + "\n def dump_time (self):\n return(" + str(time.time()) + ")"
return(text)
#****************************************************************************
def proceed (self,pars=""):
try:
o = bytes(re.sub(r"\n",r"",self.dump_data()),'utf-8')
o = pickle.loads(base64.b64decode(o))
o._result = self.result()
o._remark = self.remark()
o._user = self.user()
o._requ = self.requ()
o._log = self.log()
dump_time = self.dump_time()
self = o
except:
print("Process has no dump data. Seems to be finished.")
return()
if self.___jump___ == "":
print("Process cannot be proceeded because there is no jump function. Seems to be finished.")
return()
m = re.search(r"^(SLEEP|sleep)(\d+)$",self._remark)
if m:
o = dump_time + float(m.group(2)) - time.time()
if o > 0:
print("Awake time not yet reached. " + str(int(o)) + " sec. to wait.")
return()
o = "self." + self.___jump___ + "()"
try:
exec(o)
print("Process resumed and proceeded.")
except BaseException as e:
o = "Error in function " + o + ". Process could not be proceeded. Error message is:\n"
o = o + str(e)
print(o)
#****************************************************************************
def add_log (self,mode,text):
self._log = self._log + text + "\n"
print(text)
#****************************************************************************
def add_requ (self,val,req):
self._requ[req] = val
self.add_log(0," ---> Requirement " + req + " added with sensitivity " + str(val))
#****************************************************************************
def report (self,rfile="",rxml=[""],report=1):
result0 = self.result()
requ0 = self.requ()
# print(result0)
remark0 = self.remark()
item0 = re.sub(r"\.item$",r"",self.__module__)
qa = 1 # Quality level
# 1: All tests are OK
# 2: All tests at most have warnings
# 3: There is no test which is not passed
# 4: Not passed tests exist
# 5: Sleeping tests exist
# 6: Requesting tests exist
m = re.search(r"^(\d+)\/(\d+)\/(\d+)\/(\d+)$",str(result0))
if not m:
return()
ok = int(m.group(1))
warn = int(m.group(2))
err = int(m.group(3))
notp = int(m.group(4))
ges = ok + warn + err + notp
if warn > 0:
qa = 2
if err > 0:
qa = 3
if notp > 0:
qa = 4
if re.search(r"^SLEEP",remark0):
qa = 5
else:
if not self.___jump___ == "":
qa = 6
arch = "NOARCH" # Evaluate the architecture of the test item
for o in requ0:
m = re.search(r"^ARCH\_+(.*)$",o)
if m:
arch = m.group(1)
break
rlist = {}
for o1 in requ0: # The remaining requirements:
o = arch + "." + o1 # Requirement relative to a architecture
rlist[o] = [requ0[o1],ges,ok,warn,err,notp,qa]
pkg = self.__module__
pkg = re.sub(r"\.(autoitem|item|pytest)$",r"",self.__module__)
testdir = re.sub("\.","/",pkg)
if os.path.isdir(testdir):
dateien = os.listdir(testdir)
dateien.sort()
for o in (dateien):
if os.path.isfile(testdir+"/"+o):
continue
try:
self._o = ""
exec("import "+pkg+"."+o+".item\nself._o = " +pkg+"."+o+".item.cls()\n");
# self._o.result()
rlist1 = self._o.report(rfile,rxml,0)
self._o = ""
print(rlist1)
for o in rlist1:
if not o in rlist:
rlist[o] = [0.00,0,0,0,0,0,0]
rlist[o][0] = 1 - (1 - rlist[o][0])*(1 - rlist1[o][0])
# print(self.__module__)
rlist[o][1] = rlist[o][1] + rlist1[o][1]
rlist[o][2] = rlist[o][2] + rlist1[o][2]
rlist[o][3] = rlist[o][3] + rlist1[o][3]
rlist[o][4] = rlist[o][4] + rlist1[o][4]
rlist[o][5] = rlist[o][5] + rlist1[o][5]
rlist[o][6] = max(rlist[o][6],rlist1[o][6])
# print(str(rlist))
except:
pass
rxml1 = {}
for o in rlist:
m = re.search(r"^(.*)\.(.*)$",o)
if m:
o1 = m.group(1)
o2 = m.group(2)
if not o1 in rxml1:
rxml1[o1] = ""
rxml1[o1] = rxml1[o1] + " <REQUIREMENT>\n"
rxml1[o1] = rxml1[o1] + " <REQUNAME>" + o2 + "</REQUNAME>\n"
rxml1[o1] = rxml1[o1] + " <SENSITIVITY>" + "%6.5f" % rlist[o][0] + "</SENSITIVITY>\n"
rxml1[o1] = rxml1[o1] + " <ALLTESTS>" + str(rlist[o][1]) + "</ALLTESTS>\n"
rxml1[o1] = rxml1[o1] + " <PASSED>" + str(rlist[o][2]) + "</PASSED>\n"
rxml1[o1] = rxml1[o1] + " <WARNING>" + str(rlist[o][3]) + "</WARNING>\n"
rxml1[o1] = rxml1[o1] + " <ERROR>" + str(rlist[o][4]) + "</ERROR>\n"
rxml1[o1] = rxml1[o1] + " <NOTPASSED>" + str(rlist[o][5]) + "</NOTPASSED>\n"
rxml1[o1] = rxml1[o1] + " <QA>" + str(rlist[o][6]) + "</QA>\n"
rxml1[o1] = rxml1[o1] + " </REQUIREMENT>\n"
o1 = "<ITEM>\n"
o1 = o1 + " <ITEMNAME>" + item0 + "</ITEMNAME>\n"
o1 = o1 + " <RESULT>" + str(result0) + "</RESULT>\n"
o1 = o1 + " <REMARK>" + self.remark() + "</REMARK>\n"
o1 = o1 + " <USER>" + self.user() + "</USER>\n"
for o in rxml1:
o1 = o1 + " <ARCHITECTURE>\n <ARCHNAME>" + o + "</ARCHNAME>\n"
o1 = o1 + rxml1[o]
o1 = o1 + " </ARCHITECTURE>\n"
rxml[0] = o1 + "</ITEM>\n" + rxml[0]
if report == 1:
text = "\n\nSimple report for " + item0
text = text + ", Result: " + str(result0) + "\n\nRequirement "
text = text + " Sensitivity All_Tests OK WARNING ERROR NOTPASSED RESULT\n-------------"
text = text + "-------------------------------------------------------------------------\n\n"
for o in rlist:
o1 = o + " ";
text = text + o1[:35]
text = text + "%5.3f" % rlist[o][0] + " "
text = text + "%3u" % rlist[o][1] + " "
text = text + "%3u" % rlist[o][2] + " "
text = text + "%3u" % rlist[o][3] + " "
text = text + "%3u" % rlist[o][4] + " "
text = text + "%3u" % rlist[o][5] + " "
text = text + "%3u" % rlist[o][6] + "\n"
print(text)
filename = ("%4u" % qa) + "_" + ("%4u" % ok) + "_" + ("%4u" % warn)
filename = filename + "_" + ("%4u" % err) + "_" + ("%4u" % ges)
filename = filename + "__" + self.remark() + ".xml"
filename = re.sub(r" ",r"_",filename)
# print(os.getcwd())
# print(testdir+"/"+filename)
testdir = re.sub(r"\.",r"/",self.__module__)
testdir = re.sub(r"\/(autoitem|item|pytest)$",r"",testdir)
ffile = open(testdir+"/."+filename,"w")
ffile.write(rxml[0])
ffile.close()
return(rlist)
o = '''
'''
#****************************************************************************
# def simple_report (self,rfile="",rlist={},report=1):
#
# result0 = self.result()
# requ0 = self.requ()
#
# for o in (requ0):
# if (not o in rlist):
# rlist[o] = [0.00,0,0,0,0]
# rlist[o][0] = 1 - (1- rlist[o][0])*(1 - requ0[o])
# rlist[o][1] = rlist[o][1] + 1
# if (result0 == 1):
# rlist[o][2] = rlist[o][2] + 1
# elif (result0 < 1000):
# rlist[o][3] = rlist[o][3] + 1
# else:
# rlist[o][4] = rlist[o][4] + 1
#
# pkg = self.__module__
# pkg = re.sub(r"\.(autoitem|item|pytest)$",r"",self.__module__)
# testdir = re.sub("\.","/",pkg)
#
# if os.path.isdir(testdir):
# dateien = os.listdir(testdir)
# dateien.sort()
# for o in (dateien):
# if os.path.isfile(testdir+"/"+o):
# continue
# try:
# self._o = ""
# exec("import "+pkg+"."+o+".item\nself._o = " +pkg+"."+o+".item.cls()\n");
# self._o.result()
# self._o.simple_report(rfile,rlist,0)
# self._o = ""
# except:
# pass
#
# if report == 1:
# text = "\n\n\nRequirement "
# text = text + " Sensitivity All_Tests OK WARNING ERROR\n"
# text = text + "-----------------------------------------------------------------------------\n\n"
# for o in (rlist):
# o1 = o + " ";
# text = text + o1[:35]
# text = text + "%5.3f" % rlist[o][0] + " "
# text = text + "%3u" % rlist[o][1] + " "
# text = text + "%3u" % rlist[o][2] + " "
# text = text + "%3u" % rlist[o][3] + " "
# text = text + "%3u" % rlist[o][4] + "\n"
#
# print(text)
#****************************************************************************
# def run0 (self,pars):
#
# print("hier")
# if (self.___run0___ == 1):
# return("___RUN0___")
# self.___run0___ = 1
# o = self.log()
# try:
# exec("""def run (self,pars):
# print("xyz")
#""")
# except:
# print(o)
# o1 = self.run(pars)
# self.___run0___ = 0
# return(o1)
#****************************************************************************
# def xxreport (self,rfile="",rlist={},rxml=[""],report=1):
#
# result0 = self.result()
# requ0 = self.requ()
## print(result0)
# remark0 = self.remark()
# item0 = re.sub(r"\.item$",r"",self.__module__)
#
# qa = 1 # Quality level
# # 1: All tests are OK
# # 2: All tests at most have warnings
# # 3: There is no test which is not passed
# # 4: Not passed tests exist
# # 5: Sleeping tests exist
# # 6: Requesting tests exist
#
# m = re.search(r"^(\d+)\/(\d+)\/(\d+)\/(\d+)$",str(result0))
# if not m:
# return()
# ok = int(m.group(1))
# warn = int(m.group(2))
# err = int(m.group(3))
# notp = int(m.group(4))
# ges = ok + warn + err + notp
# if warn > 0:
# qa = 2
# if err > 0:
# qa = 3
# if notp > 0:
# qa = 4
# if re.search(r"^SLEEP",remark0):
# qa = 5
# else:
# if not self.___jump___ == "":
# qa = 6
#
## print(self.__module__)
## print(result0)
#
# arch = "NOARCH" # Evaluate the architecture of the test item
# for o in requ0:
# m = re.search(r"^ARCH\_+(.*)$",o)
# if m:
# arch = m.group(1)
# break
#
# for o1 in requ0:
# o = arch + "." + o1
## print(str(rlist))
## print(ges)
# if not o in rlist:
# rlist[o] = [0.00,0,0,0,0,0,0]
# rlist[o][0] = 1 - (1 - rlist[o][0])*(1 - requ0[o1])
## print(self.__module__)
# rlist[o][1] = rlist[o][1] + ges
# rlist[o][2] = rlist[o][2] + ok
# rlist[o][3] = rlist[o][3] + warn
# rlist[o][4] = rlist[o][4] + err
# rlist[o][5] = rlist[o][5] + notp
# rlist[o][6] = max(rlist[o][6],qa)
## print(str(rlist))
#
# pkg = self.__module__
# pkg = re.sub(r"\.(autoitem|item|pytest)$",r"",self.__module__)
# testdir = re.sub("\.","/",pkg)
#
#
# if os.path.isdir(testdir):
# dateien = os.listdir(testdir)
# dateien.sort()
# for o in (dateien):
# if os.path.isfile(testdir+"/"+o):
# continue
# try:
# self._o = ""
# exec("import "+pkg+"."+o+".item\nself._o = " +pkg+"."+o+".item.cls()\n");
# self._o.result()
# self._o.report(rfile,rlist,rxml,0)
# self._o = ""
# except:
# pass
#
#
# rxml1 = {}
# for o in rlist:
# m = re.search(r"^(.*)\.(.*)$",o)
# if m:
# o1 = m.group(1)
# o2 = m.group(2)
# if not o1 in rxml1:
# rxml1[o1] = ""
# rxml1[o1] = rxml1[o1] + " <REQUIREMENT>\n"
# rxml1[o1] = rxml1[o1] + " <REQUNAME>" + o2 + "</REQUNAME>\n"
# rxml1[o1] = rxml1[o1] + " <SENSITIVITY>" + "%6.5f" % rlist[o][0] + "</SENSITIVITY>\n"
# rxml1[o1] = rxml1[o1] + " <ALLTESTS>" + str(rlist[o][1]) + "</ALLTESTS>\n"
# rxml1[o1] = rxml1[o1] + " <PASSED>" + str(rlist[o][2]) + "</PASSED>\n"
# rxml1[o1] = rxml1[o1] + " <WARNING>" + str(rlist[o][3]) + "</WARNING>\n"
# rxml1[o1] = rxml1[o1] + " <ERROR>" + str(rlist[o][4]) + "</ERROR>\n"
# rxml1[o1] = rxml1[o1] + " <NOTPASSED>" + str(rlist[o][5]) + "</NOTPASSED>\n"
# rxml1[o1] = rxml1[o1] + " <QA>" + str(rlist[o][6]) + "</QA>\n"
# rxml1[o1] = rxml1[o1] + " </REQUIREMENT>\n"
#
# o1 = "<ITEM>\n"
# o1 = o1 + " <ITEMNAME>" + item0 + "</ITEMNAME>\n"
# o1 = o1 + " <RESULT>" + str(result0) + "</RESULT>\n"
# o1 = o1 + " <REMARK>" + self.remark() + "</REMARK>\n"
# o1 = o1 + " <USER>" + self.user() + "</USER>\n"
# for o in rxml1:
# o1 = o1 + " <ARCHITECTURE>\n <ARCHNAME>" + o + "</ARCHNAME>\n"
# o1 = o1 + rxml1[o]
# o1 = o1 + " </ARCHITECTURE>\n"
# rxml[0] = o1 + "</ITEM>\n" + rxml[0]
#
#
# if report == 1:
# text = "\n\nSimple report for " + item0
# text = text + ", Result: " + str(result0) + "\n\nRequirement "
# text = text + " Sensitivity All_Tests OK WARNING ERROR NOTPASSED RESULT\n-------------"
# text = text + "-------------------------------------------------------------------------\n\n"
# for o in rlist:
# o1 = o + " ";
# text = text + o1[:35]
# text = text + "%5.3f" % rlist[o][0] + " "
# text = text + "%3u" % rlist[o][1] + " "
# text = text + "%3u" % rlist[o][2] + " "
# text = text + "%3u" % rlist[o][3] + " "
# text = text + "%3u" % rlist[o][4] + " "
# text = text + "%3u" % rlist[o][5] + " "
# text = text + "%3u" % rlist[o][6] + "\n"
#
# print(text)
#
# filename = ("%4u" % qa) + "_" + ("%4u" % ok) + "_" + ("%4u" % warn)
# filename = filename + "_" + ("%4u" % err) + "_" + ("%4u" % ges)
# filename = filename + "__" + self.remark() + ".xml"
# filename = re.sub(r" ",r"_",filename)
## print(os.getcwd())
## print(testdir+"/"+filename)
# testdir = re.sub(r"\.",r"/",self.__module__)
# testdir = re.sub(r"\/(autoitem|item|pytest)$",r"",testdir)
# ffile = open(testdir+"/."+filename,"w")
# ffile.write(rxml[0])
# ffile.close()
#****************************************************************************