Package epyunit :: Module selftest
[hide private]
[frames] | no frames]

Source Code for Module epyunit.selftest

  1  # -*- coding: utf-8 -*- 
  2  """Selftest for the package 'epyunit'. 
  3   
  4  """ 
  5  from __future__ import absolute_import 
  6   
  7  __author__ = 'Arno-Can Uestuensoez' 
  8  __license__ = "Artistic-License-2.0 + Forced-Fairplay-Constraints" 
  9  __copyright__ = "Copyright (C) 2010-2016 Arno-Can Uestuensoez @Ingenieurbuero Arno-Can Uestuensoez" 
 10  __version__ = '0.2.0' 
 11  __uuid__='9de52399-7752-4633-9fdc-66c87a9200b8' 
 12   
 13  __docformat__ = "restructuredtext en" 
 14   
 15   
 16  import sys,os 
 17   
 18  from epyunit.SubprocUnit import SubprocessUnit,SProcUnitRules 
 19  from filesysobjects.FileSysObjects import findRelPathInSearchPath 
 20   
 21  _appname = "selftest" #: application name 
 22   
23 -def _subcall_myscript(slang,**kargs):
24 """Calls the operational checks provided by 'myscript' for language variant. 25 26 Args: 27 slang: Programming language of called script, current supported are: 28 29 bash 30 31 python 32 33 34 **kargs: 35 36 out: 37 38 verbose: 39 40 debug: 41 42 Returns: 43 None. 44 45 Raises: 46 In case of assertion errors. 47 48 """ 49 _out = kargs.get('out',None) 50 _verbose = kargs.get('verbose',0) 51 _debug = kargs.get('debug',0) 52 53 if _verbose>0: 54 kargs['verbose'] = _verbose 55 if kargs.get('debug') > 0: 56 kargs['debug'] = _debug 57 58 # create a complete subprocess unit test controller with configuration data 59 sx = SubprocessUnit() 60 import epyunit #for path to mymodule.sh 61 62 if slang.lower() in ('bash', 'sh', 'shell',): 63 _sx = "myscript.sh" 64 cx = epyunit.__path__[0]+os.sep+_sx 65 if "win32" in sys.platform: 66 p = os.environ.get('PATH') 67 fp = findRelPathInSearchPath('bash.exe',p,subsplit=True) 68 if not fp: 69 fp = findRelPathInSearchPath('bash.exe',p,subsplit=True) 70 if not fp: 71 fp = findRelPathInSearchPath('bin/bash.exe',p,subsplit=True) 72 if not fp: 73 fp = findRelPathInSearchPath('bin\\bash.exe',p,subsplit=True) 74 if not fp: 75 fp = findRelPathInSearchPath('bash',p,subsplit=True) 76 if not fp: 77 raise Exception("Missing:bash") 78 cx = fp + ' ' + cx 79 else: 80 if not findRelPathInSearchPath('bash',os.environ.get('PATH'),subsplit=True): 81 raise Exception("Missing:bash") 82 cx = ' bash ' + cx 83 84 elif slang.lower() == 'python': 85 _sx = "myscript.py" 86 cx = epyunit.__path__[0]+os.sep+_sx 87 if "win32" in sys.platform: 88 p = os.environ.get('PATH') 89 fp = findRelPathInSearchPath('python.exe',p,subsplit=True) 90 if not fp: 91 fp = findRelPathInSearchPath('python.exe',p,subsplit=True) 92 if not fp: 93 fp = findRelPathInSearchPath('bin/python.exe',p,subsplit=True) 94 if not fp: 95 fp = findRelPathInSearchPath('bin\\python.exe',p,subsplit=True) 96 if not fp: 97 fp = findRelPathInSearchPath('python',p,subsplit=True) 98 if not fp: 99 raise Exception("Missing:python") 100 cx = fp + ' ' + cx 101 else: 102 if not findRelPathInSearchPath('python',os.environ['PATH'],subsplit=True): 103 raise Exception("\nPATH="+str(os.environ['PATH'])+"\nMissing:python") 104 cx = ' python ' + cx # + " --rdbg " 105 106 elif slang.lower() == 'perl': 107 _sx = "myscript.pl" 108 cx = epyunit.__path__[0]+os.sep+_sx 109 if "win32" in sys.platform: 110 p = os.environ.get('PATH') 111 fp = findRelPathInSearchPath('perl.exe',p,subsplit=True) 112 if not fp: 113 fp = findRelPathInSearchPath('perl.exe',p,subsplit=True) 114 if not fp: 115 fp = findRelPathInSearchPath('bin/perl.exe',p,subsplit=True) 116 if not fp: 117 fp = findRelPathInSearchPath('bin\\perl.exe',p,subsplit=True) 118 if not fp: 119 fp = findRelPathInSearchPath('perl',p,subsplit=True) 120 if not fp: 121 raise Exception("Missing:perl") 122 cx = fp + ' ' + cx 123 else: 124 if not findRelPathInSearchPath('perl',os.environ['PATH'],subsplit=True): 125 raise Exception("Missing:perl") 126 cx = ' perl ' + cx 127 128 else: 129 raise Exception("Unknown language type:"+str(slang)) 130 131 # add rules to be applied ont the subprocesses 132 _myRules = SProcUnitRules() 133 134 135 # 136 # perform the tests for defined filter 137 # 138 139 # 140 #*** DEFAULT *** 141 # 142 _myParams = {'exitval':123,'stdoutok':["arbitrary output"],'stderrok':[],} 143 _myrx = {'reset':True, 'exitign': False, 'exitval': 123, 'exittype':'VAL',} 144 _myRules.setrules(**_myrx) 145 _myRules.setkargs(**_myParams) 146 if _verbose >1: 147 print _myRules 148 sx.setkargs(**{'rules':_myRules, 'env': os.environ}) 149 ret = sx.callit(cx) 150 if ret[0] == 126: 151 print >>sys.stderr ,"check exec permissions of 'myscript.*'" 152 if _out: 153 if _verbose: 154 print "\n#*** epyunit/"+str(_sx)+" DEFAULT ***" 155 if _verbose>1: 156 sx.displayit(ret) 157 158 retX = [123,["arbitrary output"],[]] 159 try: 160 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 161 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 162 assert ret ==retX 163 except: 164 print >>sys.stderr, "" 165 print >>sys.stderr, "retX="+str(retX) 166 print >>sys.stderr, "ret= "+str(ret) 167 assert sx.apply(ret) 168 169 170 # 171 #*** A-OK *** 172 # 173 _myParams = {'exitval':0,'stdoutok':["fromA", "arbitrary output","arbitrary signalling OK string","arbitrary output"],'stderrok':[],} 174 _myrx = {'reset':True, 'exitign': False, 'exitval': 0, 'exittype':'OK', 'stdoutok_val':["arbitrary output","arbitrary signalling OK string","arbitrary output"]} 175 _myRules.setrules(**_myrx) 176 _myRules.setkargs(**_myParams) 177 if _verbose>1: 178 print _myRules 179 sx.setkargs(**{'rules':_myRules,}) 180 ret = sx.callit(cx+' -- OK') 181 if _out: 182 if _verbose: 183 print "\n#*** epyunit/"+str(_sx)+" OK ***" 184 if _verbose>1: 185 sx.displayit(ret) 186 retX = [0,["fromA", "arbitrary output","arbitrary signalling OK string","arbitrary output"],[]] 187 try: 188 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 189 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 190 assert ret ==retX 191 except: 192 print >>sys.stderr, "" 193 print >>sys.stderr, "retX="+str(retX) 194 print >>sys.stderr, "ret= "+str(ret) 195 assert sx.apply(ret) 196 197 198 199 # 200 #*** C-OK *** 201 # 202 _myParams = {'exitval':0,'stdoutok':["fromC", "arbitrary output","arbitrary signalling OK string","arbitrary output"],'stderrok':[],} 203 _myrx = {'reset':True, 'exitign': False, 'exittype':'OK','stdoutok':["arbitrary output","arbitrary signalling OK string","arbitrary output"]} 204 _myRules.setrules(**_myrx) 205 _myRules.setkargs(**_myParams) 206 if _verbose>1: 207 print _myRules 208 sx.setkargs(**{'rules':_myRules,}) 209 ret = sx.callit(cx+' -- PRIO') 210 if _out: 211 if _verbose: 212 print "\n#*** epyunit/"+str(_sx)+" PRIO ***" 213 if _verbose>1: 214 sx.displayit(ret) 215 retX = [0,["fromC", "arbitrary output","arbitrary signalling OK string","arbitrary output"],["arbitrary signalling ERROR string"]] 216 try: 217 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 218 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 219 assert ret ==retX 220 except: 221 print >>sys.stderr, "" 222 print >>sys.stderr, "retX="+str(retX) 223 print >>sys.stderr, "ret= "+str(ret) 224 assert sx.apply(ret) 225 226 227 228 # 229 #*** D-OK *** 230 # 231 _myParams = {'exitval':0,'stdoutok':["fromD", "arbitrary output","arbitrary signalling OK string","arbitrary output"],'stderrok':[],} 232 _myrx = {'reset':True, 'exitign': False, 'exittype':'OK','stdoutok':["arbitrary output","arbitrary signalling OK string","arbitrary output"]} 233 _myRules.setrules(**_myrx) 234 _myRules.setkargs(**_myParams) 235 if _verbose>1: 236 print _myRules 237 sx.setkargs(**{'rules':_myRules,}) 238 ret = sx.callit(cx+' -- EXITOK') 239 if _out: 240 if _verbose: 241 print "\n#*** epyunit/"+str(_sx)+" EXITOK ***" 242 if _verbose>1: 243 sx.displayit(ret) 244 retX = [0,["fromD", "arbitrary output","arbitrary signalling OK string","arbitrary output"],[]] 245 try: 246 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 247 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 248 assert ret ==retX 249 except: 250 print >>sys.stderr, "" 251 print >>sys.stderr, "retX="+str(retX) 252 print >>sys.stderr, "ret= "+str(ret) 253 assert sx.apply(ret) 254 255 256 257 # 258 #*** E-NOK *** 259 # 260 _myParams = {'exitval':1,'stdoutok':["fromE", "arbitrary output","arbitrary signalling OK string","arbitrary output"],'stderrok':[],} 261 _myrx = {'reset':True, 'multiline':True, 'exitign': False, 'exittype':'NOK','stdoutok':["arbitrary output","arbitrary signalling OK string","arbitrary output"]} 262 _myRules.setrules(**_myrx) 263 _myRules.setkargs(**_myParams) 264 if _verbose>1: 265 print _myRules 266 sx.setkargs(**{'rules':_myRules,}) 267 ret = sx.callit(cx+' -- EXITNOK') 268 if _out: 269 if _verbose: 270 print "\n#*** epyunit/"+str(_sx)+" EXITNOK ***" 271 if _verbose>1: 272 sx.displayit(ret) 273 retX = [1,["fromE", "arbitrary output","arbitrary signalling OK string","arbitrary output"],[]] 274 try: 275 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 276 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 277 assert ret ==retX 278 except: 279 print >>sys.stderr, "" 280 print >>sys.stderr, "retX="+str(retX) 281 print >>sys.stderr, "ret= "+str(ret) 282 assert sx.apply(ret) 283 284 285 286 # 287 #*** F-NOK7 *** 288 # 289 _myParams = {'exitval':7,'stdoutok':["fromF", "arbitrary output","arbitrary signalling NOK string","arbitrary output"],'stderrok':[],} 290 _myrx = {'reset':True, 'exitign': False, 'exittype':'VAL','exitval':7,'stdoutok':["arbitrary output","arbitrary signalling OK string","arbitrary output"]} 291 _myRules.setrules(**_myrx) 292 _myRules.setkargs(**_myParams) 293 if _verbose>1: 294 print _myRules 295 sx.setkargs(**{'rules':_myRules,}) 296 ret = sx.callit(cx+' -- EXIT7') 297 if _out: 298 if _verbose: 299 print "\n#*** epyunit/"+str(_sx)+" EXIT7 ***" 300 if _verbose>1: 301 sx.displayit(ret) 302 retX = [7,["fromF", "arbitrary output","arbitrary signalling NOK string","arbitrary output"],[]] 303 try: 304 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 305 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 306 assert ret ==retX 307 except: 308 print >>sys.stderr, "" 309 print >>sys.stderr, "retX="+str(retX) 310 print >>sys.stderr, "ret= "+str(ret) 311 assert sx.apply(ret) 312 313 314 315 # 316 #*** G-NOK8 *** 317 # 318 _myParams = {'exitval':8,'stdoutok':["fromG", 'arbitrary output', 'arbitrary signalling NOK string', 'arbitrary output'],'stderrok': ['arbitrary err output', 'arbitrary err signalling NOK string', 'arbitrary err output'],} 319 _myrx = {'reset':True, 'exitign': False, 'exittype':'VAL','exitval':8,'stdoutok':["arbitrary output","arbitrary signalling OK string","arbitrary output"]} 320 _myRules.setrules(**_myrx) 321 _myRules.setkargs(**_myParams) 322 if _verbose>1: 323 print _myRules 324 ret = sx.callit(cx+' -- EXIT8') 325 if _out: 326 if _verbose: 327 print "\n#*** epyunit/"+str(_sx)+" EXIT8 ***" 328 if _verbose>1: 329 sx.displayit(ret) 330 retX = [8,["fromG", 'arbitrary output', 'arbitrary signalling NOK string', 'arbitrary output'], ['arbitrary err output', 'arbitrary err signalling NOK string', 'arbitrary err output']] 331 try: 332 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 333 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 334 assert ret ==retX 335 except: 336 print >>sys.stderr, "" 337 print >>sys.stderr, "retX="+str(retX) 338 print >>sys.stderr, "ret= "+str(ret) 339 assert sx.apply(ret) 340 341 342 # 343 #***H-NOK9 *** 344 # 345 _myParams = {'exitval':9,'stdoutok':["fromH", 'OK', 'OK', 'OK'],'stderrok': ['NOK', 'NOK',],} 346 _myrx = {'reset':True, 'exitign': False, 'exittype':'VAL','exitval':9,'stdoutok':["NOK","NOK","NOK"]} 347 _myRules.setrules(**_myrx) 348 _myRules.setkargs(**_myParams) 349 if _verbose>1: 350 print _myRules 351 ret = sx.callit(cx+' -- EXIT9OK3NOK2') 352 if _out: 353 if _verbose: 354 print "\n#*** epyunit/"+str(_sx)+" EXIT9OK3NOK2 ***" 355 if _verbose>1: 356 sx.displayit(ret) 357 retX = [9,["fromH", 'OK', 'OK', 'OK'], ['NOK', 'NOK']] 358 try: 359 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 360 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 361 assert ret ==retX 362 except: 363 print >>sys.stderr, "" 364 print >>sys.stderr, "retX="+str(retX) 365 print >>sys.stderr, "ret= "+str(ret) 366 assert sx.apply(ret) 367 368 369 # 370 #*** I-OK0 *** 371 # 372 _myParams = {'exitval':0,'stdoutok':[],'stderrok': ['fromI', 'NOK', 'NOK'],} 373 _myrx = {'reset':True, 'exitign': False, 'exittype':'VAL','exitval':0,'stdoutok':[]} 374 _myRules.setrules(**_myrx) 375 _myRules.setkargs(**_myParams) 376 if _verbose>1: 377 print _myRules 378 ret = sx.callit(cx+' -- STDERRONLY') 379 if _out: 380 if _verbose: 381 print "\n#*** epyunit/"+str(_sx)+" STDERRONLY ***" 382 if _verbose>1: 383 sx.displayit(ret) 384 retX = [0,[], ['fromI', 'NOK', 'NOK']] 385 try: 386 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 387 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 388 assert ret ==retX 389 except: 390 print >>sys.stderr, "" 391 print >>sys.stderr, "retX="+str(retX) 392 print >>sys.stderr, "ret= "+str(ret) 393 assert sx.apply(ret) 394 395 396 # 397 #*** DEFAULT-123 *** 398 # 399 _myParams = {'exitval':123,'stdoutok':["arbitrary output"],'stderrok': [],} 400 _myrx = {'reset':True, 'exitign': False, 'exittype':'NOK','stdoutok':["arbitrary output","arbitrary signalling OK string","arbitrary output"]} 401 _myRules.setrules(**_myrx) 402 _myRules.setkargs(**_myParams) 403 if _verbose>1: 404 print _myRules 405 ret = sx.callit(cx) 406 if _out: 407 if _verbose: 408 print "\n#*** epyunit/"+str(_sx)+" DEFAULT ***" 409 if _verbose>1: 410 sx.displayit(ret) 411 retX = [123,["arbitrary output"],[]] 412 try: 413 if ret[1]: ret[1] = map(lambda x: x.replace('\r',''),ret[1]) 414 if ret[2]: ret[2] = map(lambda x: x.replace('\r',''),ret[2]) 415 assert ret ==retX 416 except: 417 print >>sys.stderr, "" 418 print >>sys.stderr, "retX="+str(retX) 419 print >>sys.stderr, "ret= "+str(ret) 420 assert sx.apply(ret) 421 422 pass
423
424 -def selftest(slang=None,**kargs):
425 """Calls some interfaces for basic operational checks. 426 427 Args: 428 slang: The language type of the testscript, 429 current availble: 430 431 perl 432 433 python 434 435 bash 436 437 **kargs: 438 439 out: 440 441 verbose: 442 443 debug: 444 445 Returns: 446 None. 447 448 Raises: 449 In case of assertion errors. 450 451 """ 452 # for k,v in kargs.items(): 453 # if k == 'bash': 454 # _subcall_myscript('bash',**kargs) 455 # return 456 # elif k == 'python': 457 # _subcall_myscript('python',**kargs) 458 # return 459 460 if not slang: 461 if sys.platform == 'Windows': 462 _subcall_myscript('python',**kargs) 463 else: 464 _subcall_myscript('python',**kargs) 465 # _subcall_myscript('bash',**kargs) 466 # _subcall_myscript('perl',**kargs) 467 else: 468 469 _subcall_myscript(slang,**kargs) 470 pass
471