Lines Matching full:self

76     def __init__(self):  argument
77 self.starttime = None
78 self.returncode = None
79 self.runtime = ''
80 self.stdout = []
81 self.stderr = []
82 self.kmemleak = ''
83 self.result = ''
85 def done(self, proc, killed, reran): argument
90 m, s = divmod(monotonic_time() - self.starttime, 60)
91 self.runtime = '%02d:%02d' % (m, s)
92 self.returncode = proc.returncode
96 self.result = 'KILLED'
98 elif len(self.kmemleak) > 0:
99 self.result = 'FAIL'
101 elif self.returncode == 0:
102 self.result = 'PASS'
104 elif self.returncode == 4:
105 self.result = 'SKIP'
107 elif self.returncode != 0:
108 self.result = 'FAIL'
117 def __init__(self, stream, debug=False): argument
118 self.stream = stream
119 self.debug = debug
120 self._buf = b''
121 self.lines = []
123 def fileno(self): argument
124 return self.stream.fileno()
126 def read(self, drain=0): argument
130 while self._read() is not None:
134 def _read(self): argument
141 fd = self.fileno()
145 if self.debug:
148 self._buf += buf
151 buf = self._buf + buf
153 self._buf = rest
156 self.lines += [(now, r) for r in rows]
162 def __init__(self, pathname, identifier=None, outputdir=None, argument
164 self.pathname = pathname
165 self.identifier = identifier
166 self.outputdir = outputdir or 'BASEDIR'
170 self.timeout = timeout
171 self.user = user or ''
172 self.killed = False
173 self.reran = None
174 self.result = Result()
176 if self.timeout is None:
177 self.timeout = 60
179 def __str__(self): argument
186 ''' % (self.pathname, self.identifier, self.outputdir, self.timeout, self.user)
188 def kill_cmd(self, proc, options, kmemleak, keyboard_interrupt=False): argument
193 self.killed = True
194 do_sudo = len(self.user) != 0
213 if keyboard_interrupt is False and self.reran is None:
214 runtime = monotonic_time() - self.result.starttime
215 if int(self.timeout) > runtime:
216 self.killed = False
217 self.reran = False
218 self.run(options, dryrun=False, kmemleak=kmemleak)
219 self.reran = True
221 def update_cmd_privs(self, cmd, user): argument
253 def collect_output(self, proc, debug=False): argument
272 def run(self, options, dryrun=None, kmemleak=None): argument
281 print(self)
286 privcmd = self.update_cmd_privs(self.pathname, self.user)
289 if not os.path.isdir(self.outputdir):
290 os.makedirs(self.outputdir, mode=0o777)
302 f"echo ZTS run {self.pathname} > /dev/kmsg"])
314 f"echo ZTS run {self.pathname} > /dev/ttyu0"])
319 self.result.starttime = monotonic_time()
327 if int(self.timeout) == 0:
328 self.timeout = sys.maxsize / (10 ** 9)
330 int(self.timeout), self.kill_cmd, [proc, options, kmemleak]
336 out, err = self.collect_output(proc, options.debug)
337 self.result.stdout = out
338 self.result.stderr = err
344 self.result.kmemleak = check_output(cmd, shell=True)
346 self.kill_cmd(proc, options, kmemleak, True)
351 if self.reran is not False:
352 self.result.done(proc, self.killed, self.reran)
354 def skip(self): argument
361 self.result.stdout = self.result.stderr = []
362 self.result.starttime = monotonic_time()
363 m, s = divmod(monotonic_time() - self.result.starttime, 60)
364 self.result.runtime = '%02d:%02d' % (m, s)
365 self.result.result = 'SKIP'
367 def log(self, options, suppress_console=False): argument
377 if self.reran is True:
379 user = ' (run as %s)' % (self.user if len(self.user) else logname)
380 if self.identifier:
381 msga = 'Test (%s): %s%s ' % (self.identifier, self.pathname, user)
383 msga = 'Test: %s%s ' % (self.pathname, user)
384 msgb = '[%s] [%s]%s\n' % (self.result.runtime, self.result.result, rer)
396 elif options.quiet and self.result.result != 'PASS':
399 lines = sorted(self.result.stdout + self.result.stderr,
409 if len(self.result.stdout):
410 with open(os.path.join(self.outputdir, 'stdout'), 'wb') as out:
411 for _, line in self.result.stdout:
413 if len(self.result.stderr):
414 with open(os.path.join(self.outputdir, 'stderr'), 'wb') as err:
415 for _, line in self.result.stderr:
417 if len(self.result.stdout) and len(self.result.stderr):
418 with open(os.path.join(self.outputdir, 'merged'), 'wb') as merged:
421 if len(self.result.kmemleak):
422 with open(os.path.join(self.outputdir, 'kmemleak'), 'wb') as kmem:
423 kmem.write(self.result.kmemleak)
430 def __init__(self, pathname, argument
433 super(Test, self).__init__(pathname, **kwargs)
434 self.pre = pre or ''
435 self.pre_user = pre_user or ''
436 self.post = post or ''
437 self.post_user = post_user or ''
438 self.failsafe = failsafe or ''
439 self.failsafe_user = failsafe_user or ''
440 self.tags = tags or []
442 def __str__(self): argument
444 if len(self.pre_user):
445 pre_user = ' (as %s)' % (self.pre_user)
446 if len(self.post_user):
447 post_user = ' (as %s)' % (self.post_user)
448 if len(self.failsafe_user):
449 failsafe_user = ' (as %s)' % (self.failsafe_user)
460 ''' % (self.pathname, self.identifier, self.outputdir, self.timeout, self.user,
461 self.pre, pre_user, self.post, post_user, self.failsafe,
462 failsafe_user, self.tags)
464 def verify(self): argument
469 files = [self.pre, self.pathname, self.post, self.failsafe]
470 users = [self.pre_user, self.user, self.post_user, self.failsafe_user]
481 self.pathname, LOG_ERR)
486 def run(self, options, dryrun=None, kmemleak=None): argument
492 odir = os.path.join(self.outputdir, os.path.basename(self.pre))
493 pretest = Cmd(self.pre, identifier=self.identifier, outputdir=odir,
494 timeout=self.timeout, user=self.pre_user)
495 test = Cmd(self.pathname, identifier=self.identifier,
496 outputdir=self.outputdir, timeout=self.timeout,
497 user=self.user)
498 odir = os.path.join(self.outputdir, os.path.basename(self.failsafe))
499 failsafe = Cmd(self.failsafe, identifier=self.identifier,
500 outputdir=odir, timeout=self.timeout,
501 user=self.failsafe_user)
502 odir = os.path.join(self.outputdir, os.path.basename(self.post))
503 posttest = Cmd(self.post, identifier=self.identifier, outputdir=odir,
504 timeout=self.timeout, user=self.post_user)
530 def __init__(self, pathname, tests=None, **kwargs): argument
531 super(TestGroup, self).__init__(pathname, **kwargs)
532 self.tests = tests or []
534 def __str__(self): argument
536 if len(self.pre_user):
537 pre_user = ' (as %s)' % (self.pre_user)
538 if len(self.post_user):
539 post_user = ' (as %s)' % (self.post_user)
540 if len(self.failsafe_user):
541 failsafe_user = ' (as %s)' % (self.failsafe_user)
553 ''' % (self.pathname, self.identifier, self.outputdir, self.tests,
554 self.timeout, self.user, self.pre, pre_user, self.post, post_user,
555 self.failsafe, failsafe_user, self.tags)
557 def filter(self, keeplist): argument
558 self.tests = [x for x in self.tests if x in keeplist]
560 def verify(self): argument
568 if len(self.pre) and not os.path.isabs(self.pre):
569 self.pre = os.path.join(self.pathname, self.pre)
570 if len(self.post) and not os.path.isabs(self.post):
571 self.post = os.path.join(self.pathname, self.post)
572 if len(self.failsafe) and not os.path.isabs(self.failsafe):
573 self.post = os.path.join(self.pathname, self.post)
575 auxfiles = [self.pre, self.post, self.failsafe]
576 users = [self.pre_user, self.user, self.post_user, self.failsafe_user]
579 if f != self.failsafe and self.pathname != os.path.dirname(f):
582 "directory.\n" % (self.pathname, f), LOG_ERR)
588 (self.pathname, f), LOG_ERR)
594 self.pathname, LOG_ERR)
598 for test in self.tests:
599 if not verify_file(os.path.join(self.pathname, test)):
600 del self.tests[self.tests.index(test)]
603 (test, self.pathname), LOG_ERR)
605 return len(self.tests) != 0
607 def run(self, options, dryrun=None, kmemleak=None): argument
614 if options.tags and not set(self.tags).intersection(set(options.tags)):
617 odir = os.path.join(self.outputdir, os.path.basename(self.pre))
618 pretest = Cmd(self.pre, outputdir=odir, timeout=self.timeout,
619 user=self.pre_user, identifier=self.identifier)
620 odir = os.path.join(self.outputdir, os.path.basename(self.post))
621 posttest = Cmd(self.post, outputdir=odir, timeout=self.timeout,
622 user=self.post_user, identifier=self.identifier)
630 for fname in self.tests:
631 odir = os.path.join(self.outputdir, fname)
632 test = Cmd(os.path.join(self.pathname, fname), outputdir=odir,
633 timeout=self.timeout, user=self.user,
634 identifier=self.identifier)
635 odir = os.path.join(odir, os.path.basename(self.failsafe))
636 failsafe = Cmd(self.failsafe, outputdir=odir, timeout=self.timeout,
637 user=self.failsafe_user, identifier=self.identifier)
656 def __init__(self, options): argument
657 self.tests = {}
658 self.testgroups = {}
659 self.starttime = time()
660 self.timestamp = datetime.now().strftime('%Y%m%dT%H%M%S')
661 self.outputdir = os.path.join(options.outputdir, self.timestamp)
662 self.setup_logging(options)
663 self.defaults = [
678 def __str__(self): argument
679 s = 'TestRun:\n outputdir: %s\n' % self.outputdir
681 for key in sorted(self.tests.keys()):
682 s += '%s%s' % (self.tests[key].__str__(), '\n')
684 for key in sorted(self.testgroups.keys()):
685 s += '%s%s' % (self.testgroups[key].__str__(), '\n')
688 def addtest(self, pathname, options): argument
699 self.tests[pathname] = test
701 def addtestgroup(self, dirname, filenames, options): argument
707 if dirname not in self.testgroups:
717 self.testgroups[dirname] = testgroup
718 self.testgroups[dirname].tests = sorted(filenames)
722 def filter(self, keeplist): argument
723 for group in list(self.testgroups.keys()):
725 del self.testgroups[group]
728 g = self.testgroups[group]
735 for test in list(self.tests.keys()):
738 del self.tests[test]
740 def read(self, options): argument
760 setattr(self, opt, os.path.join(outputdir, self.timestamp))
762 setattr(self, opt, config.get('DEFAULT', opt))
792 setattr(self, opt,
794 self.timestamp))
803 self.testgroups[section] = testgroup
815 setattr(self, opt,
817 self.timestamp))
822 self.tests[section] = test
824 def write(self, options): argument
835 self.defaults])
838 for test in sorted(self.tests.keys()):
841 if prop not in self.props:
843 getattr(self.tests[test], prop))
845 for testgroup in sorted(self.testgroups.keys()):
847 config.set(testgroup, 'tests', self.testgroups[testgroup].tests)
849 if prop not in self.props:
851 getattr(self.testgroups[testgroup], prop))
859 def complete_outputdirs(self): argument
874 tmp_dict = dict(list(self.tests.items()) +
875 list(self.testgroups.items()))
877 base = self.outputdir
891 def setup_logging(self, options): argument
904 os.makedirs(self.outputdir, mode=0o777)
906 filename = os.path.join(self.outputdir, 'log')
911 def run(self, options): argument
916 os.chdir(self.outputdir)
918 fail('Could not change to directory %s' % self.outputdir)
920 logsymlink = os.path.join(self.outputdir, '../current')
924 os.symlink(self.outputdir, logsymlink)
927 self.outputdir, LOG_ERR)
935 for test in sorted(self.tests.keys()):
936 self.tests[test].run(options)
937 for testgroup in sorted(self.testgroups.keys()):
938 self.testgroups[testgroup].run(options)
941 def summary(self): argument
950 m, s = divmod(time() - self.starttime, 60)
955 print('Log directory:\t%s' % self.outputdir)