summaryrefslogtreecommitdiff
path: root/selftest/subunithelper.py
diff options
context:
space:
mode:
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>2016-08-17 10:56:50 +1200
committerDouglas Bagnall <dbagnall@samba.org>2016-08-31 07:09:26 +0200
commite908873757171db5b65296c5c3cdefe7d0fb0c01 (patch)
tree8e1b277cf9ac52bb4be4c136966ccf6953e37e75 /selftest/subunithelper.py
parent288efc55608e7d465f68d782790cf485defb79b6 (diff)
downloadsamba-e908873757171db5b65296c5c3cdefe7d0fb0c01.tar.gz
make perftest: for performance testing
This runs a selection of subunit tests and reduces the output to only the time it takes to run each test. The tests are listed in selftest/perf_tests.py. Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Diffstat (limited to 'selftest/subunithelper.py')
-rw-r--r--selftest/subunithelper.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/selftest/subunithelper.py b/selftest/subunithelper.py
index a3bb30b69bc..c17036defba 100644
--- a/selftest/subunithelper.py
+++ b/selftest/subunithelper.py
@@ -17,6 +17,7 @@
__all__ = ['parse_results']
+import datetime
import re
import sys
from samba import subunit
@@ -429,6 +430,73 @@ class FilterOps(unittest.TestResult):
self.fail_immediately = fail_immediately
+class PerfFilterOps(unittest.TestResult):
+
+ def progress(self, delta, whence):
+ pass
+
+ def output_msg(self, msg):
+ pass
+
+ def control_msg(self, msg):
+ pass
+
+ def skip_testsuite(self, name, reason=None):
+ self._ops.skip_testsuite(name, reason)
+
+ def start_testsuite(self, name):
+ self.suite_has_time = False
+
+ def end_testsuite(self, name, result, reason=None):
+ pass
+
+ def _add_prefix(self, test):
+ return subunit.RemotedTestCase(self.prefix + test.id() + self.suffix)
+
+ def time(self, time):
+ self.latest_time = time
+ #self._ops.output_msg("found time %s\n" % time)
+ self.suite_has_time = True
+
+ def get_time(self):
+ if self.suite_has_time:
+ return self.latest_time
+ return datetime.datetime.utcnow()
+
+ def startTest(self, test):
+ self.seen_output = True
+ test = self._add_prefix(test)
+ self.starts[test.id()] = self.get_time()
+
+ def addSuccess(self, test):
+ test = self._add_prefix(test)
+ tid = test.id()
+ if tid not in self.starts:
+ self._ops.addError(test, "%s succeeded without ever starting!" % tid)
+ delta = self.get_time() - self.starts[tid]
+ self._ops.output_msg("elapsed-time: %s: %f\n" % (tid, delta.total_seconds()))
+
+ def addFailure(self, test, err=''):
+ tid = test.id()
+ delta = self.get_time() - self.starts[tid]
+ self._ops.output_msg("failure: %s failed after %f seconds (%s)\n" %
+ (tid, delta.total_seconds(), err))
+
+ def addError(self, test, err=''):
+ tid = test.id()
+ delta = self.get_time() - self.starts[tid]
+ self._ops.output_msg("error: %s failed after %f seconds (%s)\n" %
+ (tid, delta.total_seconds(), err))
+
+ def __init__(self, out, prefix='', suffix=''):
+ self._ops = out
+ self.prefix = prefix or ''
+ self.suffix = suffix or ''
+ self.starts = {}
+ self.seen_output = False
+ self.suite_has_time = False
+
+
class PlainFormatter(TestsuiteEnabledTestResult):
def __init__(self, verbose, immediate, statistics,