Ignore:
Timestamp:
Nov 24, 2016, 1:14:11 PM (9 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to version 4.4.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/selftest/subunithelper.py

    r740 r988  
    2020import re
    2121import sys
    22 import subunit
    23 import subunit.iso8601
    24 import testtools
    25 
    26 VALID_RESULTS = ['success', 'successful', 'failure', 'fail', 'skip', 'knownfail', 'error', 'xfail', 'skip-testsuite', 'testsuite-failure', 'testsuite-xfail', 'testsuite-success', 'testsuite-error']
    27 
    28 class TestsuiteEnabledTestResult(testtools.testresult.TestResult):
     22from samba import subunit
     23from samba.subunit.run import TestProtocolClient
     24from samba.subunit import iso8601
     25import unittest
     26
     27VALID_RESULTS = ['success', 'successful', 'failure', 'fail', 'skip', 'knownfail', 'error', 'xfail', 'skip-testsuite', 'testsuite-failure', 'testsuite-xfail', 'testsuite-success', 'testsuite-error', 'uxsuccess', 'testsuite-uxsuccess']
     28
     29class TestsuiteEnabledTestResult(unittest.TestResult):
    2930
    3031    def start_testsuite(self, name):
     
    3435def parse_results(msg_ops, statistics, fh):
    3536    exitcode = 0
    36     expected_fail = 0
    3737    open_tests = {}
    3838
     
    5858            msg_ops.control_msg(l)
    5959            try:
    60                 dt = subunit.iso8601.parse_date(arg.rstrip("\n"))
     60                dt = iso8601.parse_date(arg.rstrip("\n"))
    6161            except TypeError, e:
    6262                print "Unable to parse time line: %s" % arg.rstrip("\n")
     
    112112                    statistics['TESTS_EXPECTED_FAIL']+=1
    113113                    msg_ops.addExpectedFailure(test, remote_error)
    114                     expected_fail+=1
     114            elif result in ("uxsuccess", ):
     115                try:
     116                    test = open_tests.pop(testname)
     117                except KeyError:
     118                    statistics['TESTS_ERROR']+=1
     119                    exitcode = 1
     120                    msg_ops.addError(subunit.RemotedTestCase(testname), subunit.RemoteError(u"Test was never started"))
     121                else:
     122                    statistics['TESTS_UNEXPECTED_OK']+=1
     123                    msg_ops.addUnexpectedSuccess(test)
     124                    exitcode = 1
    115125            elif result in ("failure", "fail"):
    116126                try:
     
    149159            elif result == "testsuite-xfail":
    150160                msg_ops.end_testsuite(testname, "xfail", reason)
     161            elif result == "testsuite-uxsuccess":
     162                msg_ops.end_testsuite(testname, "uxsuccess", reason)
     163                exitcode = 1
    151164            elif result == "testsuite-error":
    152165                msg_ops.end_testsuite(testname, "error", reason)
     
    179192
    180193
    181 class SubunitOps(subunit.TestProtocolClient,TestsuiteEnabledTestResult):
     194class SubunitOps(TestProtocolClient,TestsuiteEnabledTestResult):
     195
     196    def progress(self, count, whence):
     197        if whence == subunit.PROGRESS_POP:
     198            self._stream.write("progress: pop\n")
     199        elif whence == subunit.PROGRESS_PUSH:
     200            self._stream.write("progress: push\n")
     201        elif whence == subunit.PROGRESS_SET:
     202            self._stream.write("progress: %d\n" % count)
     203        elif whence == subunit.PROGRESS_CUR:
     204            raise NotImplementedError
    182205
    183206    # The following are Samba extensions:
     
    235258
    236259
    237 class FilterOps(testtools.testresult.TestResult):
     260class FilterOps(unittest.TestResult):
    238261
    239262    def control_msg(self, msg):
     
    261284
    262285    def _add_prefix(self, test):
     286        prefix = ""
     287        suffix = ""
    263288        if self.prefix is not None:
    264             return subunit.RemotedTestCase(self.prefix + test.id())
    265         else:
    266             return test
    267 
    268     def addError(self, test, details=None):
     289            prefix = self.prefix
     290        if self.suffix is not None:
     291            suffix = self.suffix
     292
     293        return subunit.RemotedTestCase(prefix + test.id() + suffix)
     294
     295    def addError(self, test, err=None):
    269296        test = self._add_prefix(test)
    270297        self.error_added+=1
    271298        self.total_error+=1
    272         self._ops.addError(test, details)
     299        self._ops.addError(test, err)
    273300        self.output = None
    274301        if self.fail_immediately:
    275302            raise ImmediateFail()
    276303
    277     def addSkip(self, test, details=None):
     304    def addSkip(self, test, reason=None):
    278305        self.seen_output = True
    279306        test = self._add_prefix(test)
    280         self._ops.addSkip(test, details)
    281         self.output = None
    282 
    283     def addExpectedFailure(self, test, details=None):
     307        self._ops.addSkip(test, reason)
     308        self.output = None
     309
     310    def addExpectedFailure(self, test, err=None):
    284311        test = self._add_prefix(test)
    285         self._ops.addExpectedFailure(test, details)
    286         self.output = None
    287 
    288     def addFailure(self, test, details=None):
     312        self._ops.addExpectedFailure(test, err)
     313        self.output = None
     314
     315    def addUnexpectedSuccess(self, test):
     316        test = self._add_prefix(test)
     317        self.uxsuccess_added+=1
     318        self.total_uxsuccess+=1
     319        self._ops.addUnexpectedSuccess(test)
     320        if self.output:
     321            self._ops.output_msg(self.output)
     322        self.output = None
     323        if self.fail_immediately:
     324            raise ImmediateFail()
     325
     326    def addFailure(self, test, err=None):
    289327        test = self._add_prefix(test)
    290328        xfail_reason = find_in_list(self.expected_failures, test.id())
     329        if xfail_reason is None:
     330            xfail_reason = find_in_list(self.flapping, test.id())
    291331        if xfail_reason is not None:
    292332            self.xfail_added+=1
    293333            self.total_xfail+=1
    294             if details is not None:
    295                 details = subunit.RemoteError(unicode(details[1]) + xfail_reason.decode("utf-8"))
    296             else:
    297                 details = subunit.RemoteError(xfail_reason.decode("utf-8"))
    298             self._ops.addExpectedFailure(test, details)
     334            self._ops.addExpectedFailure(test, err)
    299335        else:
    300336            self.fail_added+=1
    301337            self.total_fail+=1
    302             self._ops.addFailure(test, details)
     338            self._ops.addFailure(test, err)
    303339            if self.output:
    304340                self._ops.output_msg(self.output)
     
    307343        self.output = None
    308344
    309     def addSuccess(self, test, details=None):
     345    def addSuccess(self, test):
    310346        test = self._add_prefix(test)
    311         self._ops.addSuccess(test, details)
     347        xfail_reason = find_in_list(self.expected_failures, test.id())
     348        if xfail_reason is not None:
     349            self.uxsuccess_added += 1
     350            self.total_uxsuccess += 1
     351            self._ops.addUnexpectedSuccess(test)
     352            if self.output:
     353                self._ops.output_msg(self.output)
     354            if self.fail_immediately:
     355                raise ImmediateFail()
     356        else:
     357            self._ops.addSuccess(test)
    312358        self.output = None
    313359
     
    320366        self.fail_added = 0
    321367        self.xfail_added = 0
     368        self.uxsuccess_added = 0
    322369
    323370    def end_testsuite(self, name, result, reason=None):
     
    326373        if self.xfail_added > 0:
    327374            xfail = True
    328         if self.fail_added > 0 or self.error_added > 0:
     375        if self.fail_added > 0 or self.error_added > 0 or self.uxsuccess_added > 0:
    329376            xfail = False
    330377
    331378        if xfail and result in ("fail", "failure"):
    332379            result = "xfail"
     380
     381        if self.uxsuccess_added > 0 and result != "uxsuccess":
     382            result = "uxsuccess"
     383            if reason is None:
     384                reason = "Subunit/Filter Reason"
     385            reason += "\n uxsuccess[%d]" % self.uxsuccess_added
    333386
    334387        if self.fail_added > 0 and result != "failure":
     
    345398
    346399        self._ops.end_testsuite(name, result, reason)
    347 
    348     def __init__(self, out, prefix=None, expected_failures=None,
    349                  strip_ok_output=False, fail_immediately=False):
     400        if result not in ("success", "xfail"):
     401            if self.output:
     402                self._ops.output_msg(self.output)
     403            if self.fail_immediately:
     404                raise ImmediateFail()
     405        self.output = None
     406
     407    def __init__(self, out, prefix=None, suffix=None, expected_failures=None,
     408                 strip_ok_output=False, fail_immediately=False,
     409                 flapping=None):
    350410        self._ops = out
    351411        self.seen_output = False
    352412        self.output = None
    353413        self.prefix = prefix
     414        self.suffix = suffix
    354415        if expected_failures is not None:
    355416            self.expected_failures = expected_failures
    356417        else:
    357418            self.expected_failures = {}
     419        if flapping is not None:
     420            self.flapping = flapping
     421        else:
     422            self.flapping = {}
    358423        self.strip_ok_output = strip_ok_output
    359424        self.xfail_added = 0
    360425        self.fail_added = 0
     426        self.uxsuccess_added = 0
    361427        self.total_xfail = 0
    362428        self.total_error = 0
    363429        self.total_fail = 0
     430        self.total_uxsuccess = 0
    364431        self.error_added = 0
    365432        self.fail_immediately = fail_immediately
     
    420487            self.test_output[name] = ""
    421488
    422         out = "[%d" % self.index
     489        total_tests = (self.statistics['TESTS_EXPECTED_OK'] +
     490                       self.statistics['TESTS_EXPECTED_FAIL'] +
     491                       self.statistics['TESTS_ERROR'] +
     492                       self.statistics['TESTS_UNEXPECTED_FAIL'] +
     493                       self.statistics['TESTS_UNEXPECTED_OK'])
     494
     495        out = "[%d(%d)" % (self.index, total_tests)
    423496        if self.totalsuites is not None:
    424497            out += "/%d" % self.totalsuites
    425498        if self.start_time is not None:
    426             out += " in " + self._format_time(self.last_time - self.start_time)
     499            out += " at " + self._format_time(self.last_time - self.start_time)
    427500        if self.suitesfailed:
    428501            out += ", %d errors" % (len(self.suitesfailed),)
     
    476549        self.end_test(test.id(), "success", False)
    477550
    478     def addError(self, test, details=None):
    479         self.end_test(test.id(), "error", True, details)
    480 
    481     def addFailure(self, test, details=None):
    482         self.end_test(test.id(), "failure", True, details)
    483 
    484     def addSkip(self, test, details=None):
    485         self.end_test(test.id(), "skip", False, details)
    486 
    487     def addExpectedFail(self, test, details=None):
    488         self.end_test(test.id(), "xfail", False, details)
    489 
    490     def end_test(self, testname, result, unexpected, reason=None):
     551    def addError(self, test, err=None):
     552        self.end_test(test.id(), "error", True, err)
     553
     554    def addFailure(self, test, err=None):
     555        self.end_test(test.id(), "failure", True, err)
     556
     557    def addSkip(self, test, reason=None):
     558        self.end_test(test.id(), "skip", False, reason)
     559
     560    def addExpectedFailure(self, test, err=None):
     561        self.end_test(test.id(), "xfail", False, err)
     562
     563    def addUnexpectedSuccess(self, test):
     564        self.end_test(test.id(), "uxsuccess", True)
     565
     566    def end_test(self, testname, result, unexpected, err=None):
    491567        if not unexpected:
    492568            self.test_output[self.name] = ""
     
    503579
    504580        self.test_output[self.name] += "UNEXPECTED(%s): %s\n" % (result, testname)
    505         if reason is not None:
    506             self.test_output[self.name] += "REASON: %s\n" % (unicode(reason[1]).encode("utf-8").strip(),)
     581        if err is not None:
     582            self.test_output[self.name] += "REASON: %s\n" % str(err[1]).strip()
    507583
    508584        if self.immediate and not self.verbose:
    509             print self.test_output[self.name]
     585            sys.stdout.write(self.test_output[self.name])
    510586            self.test_output[self.name] = ""
    511587
     
    514590               'error': 'E',
    515591               'failure': 'F',
     592               'uxsuccess': 'U',
    516593               'success': 'S'}.get(result, "?"))
    517594
     
    547624        if (not self.suitesfailed and
    548625            not self.statistics['TESTS_UNEXPECTED_FAIL'] and
     626            not self.statistics['TESTS_UNEXPECTED_OK'] and
    549627            not self.statistics['TESTS_ERROR']):
    550628            ok = (self.statistics['TESTS_EXPECTED_OK'] +
     
    552630            print "\nALL OK (%d tests in %d testsuites)" % (ok, self.suites_ok)
    553631        else:
    554             print "\nFAILED (%d failures and %d errors in %d testsuites)" % (
     632            print "\nFAILED (%d failures, %d errors and %d unexpected successes in %d testsuites)" % (
    555633                self.statistics['TESTS_UNEXPECTED_FAIL'],
    556634                self.statistics['TESTS_ERROR'],
     635                self.statistics['TESTS_UNEXPECTED_OK'],
    557636                len(self.suitesfailed))
    558637
Note: See TracChangeset for help on using the changeset viewer.