Lines Matching full:self

75     def __init__(self):  argument
76 self.starttime = None
77 self.returncode = None
78 self.runtime = ''
79 self.stdout = []
80 self.stderr = []
81 self.kmemleak = ''
82 self.result = ''
84 def done(self, proc, killed, reran): argument
89 m, s = divmod(monotonic_time() - self.starttime, 60)
90 self.runtime = '%02d:%02d' % (m, s)
91 self.returncode = proc.returncode
95 self.result = 'KILLED'
97 elif len(self.kmemleak) > 0:
98 self.result = 'FAIL'
100 elif self.returncode == 0:
101 self.result = 'PASS'
103 elif self.returncode == 4:
104 self.result = 'SKIP'
106 elif self.returncode != 0:
107 self.result = 'FAIL'
116 def __init__(self, stream, debug=False): argument
117 self.stream = stream
118 self.debug = debug
119 self._buf = b''
120 self.lines = []
122 def fileno(self): argument
123 return self.stream.fileno()
125 def read(self, drain=0): argument
129 while self._read() is not None:
133 def _read(self): argument
140 fd = self.fileno()
144 if self.debug:
147 self._buf += buf
150 buf = self._buf + buf
152 self._buf = rest
155 self.lines += [(now, r) for r in rows]
161 def __init__(self, pathname, identifier=None, outputdir=None, argument
163 self.pathname = pathname
164 self.identifier = identifier
165 self.outputdir = outputdir or 'BASEDIR'
169 self.timeout = timeout
170 self.user = user or ''
171 self.killed = False
172 self.reran = None
173 self.result = Result()
175 if self.timeout is None:
176 self.timeout = 60
178 def __str__(self): argument
185 ''' % (self.pathname, self.identifier, self.outputdir, self.timeout, self.user)
187 def kill_cmd(self, proc, options, kmemleak, keyboard_interrupt=False): argument
192 self.killed = True
193 do_sudo = len(self.user) != 0
212 if keyboard_interrupt is False and self.reran is None:
213 runtime = monotonic_time() - self.result.starttime
214 if int(self.timeout) > runtime:
215 self.killed = False
216 self.reran = False
217 self.run(options, dryrun=False, kmemleak=kmemleak)
218 self.reran = True
220 def update_cmd_privs(self, cmd, user): argument
244 def collect_output(self, proc, debug=False): argument
263 def run(self, options, dryrun=None, kmemleak=None): argument
272 print(self)
277 privcmd = self.update_cmd_privs(self.pathname, self.user)
280 if not os.path.isdir(self.outputdir):
281 os.makedirs(self.outputdir, mode=0o777)
293 f"echo ZTS run {self.pathname} > /dev/kmsg"])
305 f"echo ZTS run {self.pathname} > /dev/ttyu0"])
310 self.result.starttime = monotonic_time()
318 if int(self.timeout) == 0:
319 self.timeout = sys.maxsize / (10 ** 9)
321 int(self.timeout), self.kill_cmd, [proc, options, kmemleak]
327 out, err = self.collect_output(proc, options.debug)
328 self.result.stdout = out
329 self.result.stderr = err
335 self.result.kmemleak = check_output(cmd, shell=True)
337 self.kill_cmd(proc, options, kmemleak, True)
342 if self.reran is not False:
343 self.result.done(proc, self.killed, self.reran)
345 def skip(self): argument
352 self.result.stdout = self.result.stderr = []
353 self.result.starttime = monotonic_time()
354 m, s = divmod(monotonic_time() - self.result.starttime, 60)
355 self.result.runtime = '%02d:%02d' % (m, s)
356 self.result.result = 'SKIP'
358 def log(self, options, suppress_console=False): argument
368 if self.reran is True:
370 user = ' (run as %s)' % (self.user if len(self.user) else logname)
371 if self.identifier:
372 msga = 'Test (%s): %s%s ' % (self.identifier, self.pathname, user)
374 msga = 'Test: %s%s ' % (self.pathname, user)
375 msgb = '[%s] [%s]%s\n' % (self.result.runtime, self.result.result, rer)
387 elif options.quiet and self.result.result != 'PASS':
390 lines = sorted(self.result.stdout + self.result.stderr,
400 if len(self.result.stdout):
401 with open(os.path.join(self.outputdir, 'stdout'), 'wb') as out:
402 for _, line in self.result.stdout:
404 if len(self.result.stderr):
405 with open(os.path.join(self.outputdir, 'stderr'), 'wb') as err:
406 for _, line in self.result.stderr:
408 if len(self.result.stdout) and len(self.result.stderr):
409 with open(os.path.join(self.outputdir, 'merged'), 'wb') as merged:
412 if len(self.result.kmemleak):
413 with open(os.path.join(self.outputdir, 'kmemleak'), 'wb') as kmem:
414 kmem.write(self.result.kmemleak)
421 def __init__(self, pathname, argument
424 super(Test, self).__init__(pathname, **kwargs)
425 self.pre = pre or ''
426 self.pre_user = pre_user or ''
427 self.post = post or ''
428 self.post_user = post_user or ''
429 self.failsafe = failsafe or ''
430 self.failsafe_user = failsafe_user or ''
431 self.tags = tags or []
433 def __str__(self): argument
435 if len(self.pre_user):
436 pre_user = ' (as %s)' % (self.pre_user)
437 if len(self.post_user):
438 post_user = ' (as %s)' % (self.post_user)
439 if len(self.failsafe_user):
440 failsafe_user = ' (as %s)' % (self.failsafe_user)
451 ''' % (self.pathname, self.identifier, self.outputdir, self.timeout, self.user,
452 self.pre, pre_user, self.post, post_user, self.failsafe,
453 failsafe_user, self.tags)
455 def verify(self): argument
460 files = [self.pre, self.pathname, self.post, self.failsafe]
461 users = [self.pre_user, self.user, self.post_user, self.failsafe_user]
472 self.pathname, LOG_ERR)
477 def run(self, options, dryrun=None, kmemleak=None): argument
483 odir = os.path.join(self.outputdir, os.path.basename(self.pre))
484 pretest = Cmd(self.pre, identifier=self.identifier, outputdir=odir,
485 timeout=self.timeout, user=self.pre_user)
486 test = Cmd(self.pathname, identifier=self.identifier,
487 outputdir=self.outputdir, timeout=self.timeout,
488 user=self.user)
489 odir = os.path.join(self.outputdir, os.path.basename(self.failsafe))
490 failsafe = Cmd(self.failsafe, identifier=self.identifier,
491 outputdir=odir, timeout=self.timeout,
492 user=self.failsafe_user)
493 odir = os.path.join(self.outputdir, os.path.basename(self.post))
494 posttest = Cmd(self.post, identifier=self.identifier, outputdir=odir,
495 timeout=self.timeout, user=self.post_user)
521 def __init__(self, pathname, tests=None, **kwargs): argument
522 super(TestGroup, self).__init__(pathname, **kwargs)
523 self.tests = tests or []
525 def __str__(self): argument
527 if len(self.pre_user):
528 pre_user = ' (as %s)' % (self.pre_user)
529 if len(self.post_user):
530 post_user = ' (as %s)' % (self.post_user)
531 if len(self.failsafe_user):
532 failsafe_user = ' (as %s)' % (self.failsafe_user)
544 ''' % (self.pathname, self.identifier, self.outputdir, self.tests,
545 self.timeout, self.user, self.pre, pre_user, self.post, post_user,
546 self.failsafe, failsafe_user, self.tags)
548 def filter(self, keeplist): argument
549 self.tests = [x for x in self.tests if x in keeplist]
551 def verify(self): argument
559 if len(self.pre) and not os.path.isabs(self.pre):
560 self.pre = os.path.join(self.pathname, self.pre)
561 if len(self.post) and not os.path.isabs(self.post):
562 self.post = os.path.join(self.pathname, self.post)
563 if len(self.failsafe) and not os.path.isabs(self.failsafe):
564 self.post = os.path.join(self.pathname, self.post)
566 auxfiles = [self.pre, self.post, self.failsafe]
567 users = [self.pre_user, self.user, self.post_user, self.failsafe_user]
570 if f != self.failsafe and self.pathname != os.path.dirname(f):
573 "directory.\n" % (self.pathname, f), LOG_ERR)
579 (self.pathname, f), LOG_ERR)
585 self.pathname, LOG_ERR)
589 for test in self.tests:
590 if not verify_file(os.path.join(self.pathname, test)):
591 del self.tests[self.tests.index(test)]
594 (test, self.pathname), LOG_ERR)
596 return len(self.tests) != 0
598 def run(self, options, dryrun=None, kmemleak=None): argument
605 if options.tags and not set(self.tags).intersection(set(options.tags)):
608 odir = os.path.join(self.outputdir, os.path.basename(self.pre))
609 pretest = Cmd(self.pre, outputdir=odir, timeout=self.timeout,
610 user=self.pre_user, identifier=self.identifier)
611 odir = os.path.join(self.outputdir, os.path.basename(self.post))
612 posttest = Cmd(self.post, outputdir=odir, timeout=self.timeout,
613 user=self.post_user, identifier=self.identifier)
621 for fname in self.tests:
622 odir = os.path.join(self.outputdir, fname)
623 test = Cmd(os.path.join(self.pathname, fname), outputdir=odir,
624 timeout=self.timeout, user=self.user,
625 identifier=self.identifier)
626 odir = os.path.join(odir, os.path.basename(self.failsafe))
627 failsafe = Cmd(self.failsafe, outputdir=odir, timeout=self.timeout,
628 user=self.failsafe_user, identifier=self.identifier)
647 def __init__(self, options): argument
648 self.tests = {}
649 self.testgroups = {}
650 self.starttime = time()
651 self.timestamp = datetime.now().strftime('%Y%m%dT%H%M%S')
652 self.outputdir = os.path.join(options.outputdir, self.timestamp)
653 self.setup_logging(options)
654 self.defaults = [
669 def __str__(self): argument
670 s = 'TestRun:\n outputdir: %s\n' % self.outputdir
672 for key in sorted(self.tests.keys()):
673 s += '%s%s' % (self.tests[key].__str__(), '\n')
675 for key in sorted(self.testgroups.keys()):
676 s += '%s%s' % (self.testgroups[key].__str__(), '\n')
679 def addtest(self, pathname, options): argument
690 self.tests[pathname] = test
692 def addtestgroup(self, dirname, filenames, options): argument
698 if dirname not in self.testgroups:
708 self.testgroups[dirname] = testgroup
709 self.testgroups[dirname].tests = sorted(filenames)
713 def filter(self, keeplist): argument
714 for group in list(self.testgroups.keys()):
716 del self.testgroups[group]
719 g = self.testgroups[group]
726 for test in list(self.tests.keys()):
729 del self.tests[test]
731 def read(self, options): argument
749 setattr(self, opt, config.get('DEFAULT', opt))
750 self.outputdir = os.path.join(self.outputdir, self.timestamp)
786 self.testgroups[section] = testgroup
800 self.tests[section] = test
802 def write(self, options): argument
813 self.defaults])
816 for test in sorted(self.tests.keys()):
819 if prop not in self.props:
821 getattr(self.tests[test], prop))
823 for testgroup in sorted(self.testgroups.keys()):
825 config.set(testgroup, 'tests', self.testgroups[testgroup].tests)
827 if prop not in self.props:
829 getattr(self.testgroups[testgroup], prop))
837 def complete_outputdirs(self): argument
852 tmp_dict = dict(list(self.tests.items()) +
853 list(self.testgroups.items()))
855 base = self.outputdir
869 def setup_logging(self, options): argument
882 os.makedirs(self.outputdir, mode=0o777)
884 filename = os.path.join(self.outputdir, 'log')
889 def run(self, options): argument
894 os.chdir(self.outputdir)
896 fail('Could not change to directory %s' % self.outputdir)
898 logsymlink = os.path.join(self.outputdir, '../current')
902 os.symlink(self.outputdir, logsymlink)
905 self.outputdir, LOG_ERR)
913 for test in sorted(self.tests.keys()):
914 self.tests[test].run(options)
915 for testgroup in sorted(self.testgroups.keys()):
916 self.testgroups[testgroup].run(options)
919 def summary(self): argument
928 m, s = divmod(time() - self.starttime, 60)
933 print('Log directory:\t%s' % self.outputdir)