| Index: third_party/buildbot_7_12/buildbot/test/test_buildstep.py
|
| diff --git a/third_party/buildbot_7_12/buildbot/test/test_buildstep.py b/third_party/buildbot_7_12/buildbot/test/test_buildstep.py
|
| deleted file mode 100644
|
| index f8ca513a28f977dd1385ad6d013423195b50ae44..0000000000000000000000000000000000000000
|
| --- a/third_party/buildbot_7_12/buildbot/test/test_buildstep.py
|
| +++ /dev/null
|
| @@ -1,322 +0,0 @@
|
| -# -*- test-case-name: buildbot.test.test_buildstep -*-
|
| -
|
| -# test cases for buildbot.process.buildstep
|
| -
|
| -from twisted.trial import unittest
|
| -
|
| -from buildbot import interfaces
|
| -from buildbot.process import buildstep
|
| -from buildbot.process import mtrlogobserver
|
| -from buildbot.process import subunitlogobserver
|
| -
|
| -# have to subclass LogObserver in order to test it, since the default
|
| -# implementations of outReceived() and errReceived() do nothing
|
| -class MyLogObserver(buildstep.LogObserver):
|
| - def __init__(self):
|
| - self._out = [] # list of chunks
|
| - self._err = []
|
| -
|
| - def outReceived(self, data):
|
| - self._out.append(data)
|
| -
|
| - def errReceived(self, data):
|
| - self._err.append(data)
|
| -
|
| -class ObserverTestCase(unittest.TestCase):
|
| - observer_cls = None # must be set by subclass
|
| -
|
| - def setUp(self):
|
| - self.observer = self.observer_cls()
|
| -
|
| - def _logStdout(self, chunk):
|
| - # why does LogObserver.logChunk() take 'build', 'step', and
|
| - # 'log' arguments when it clearly doesn't use them for anything?
|
| - self.observer.logChunk(None, None, None, interfaces.LOG_CHANNEL_STDOUT, chunk)
|
| -
|
| - def _logStderr(self, chunk):
|
| - self.observer.logChunk(None, None, None, interfaces.LOG_CHANNEL_STDERR, chunk)
|
| -
|
| - def _assertStdout(self, expect_lines):
|
| - self.assertEqual(self.observer._out, expect_lines)
|
| -
|
| - def _assertStderr(self, expect_lines):
|
| - self.assertEqual(self.observer._err, expect_lines)
|
| -
|
| -class LogObserver(ObserverTestCase):
|
| -
|
| - observer_cls = MyLogObserver
|
| -
|
| - def testLogChunk(self):
|
| - self._logStdout("foo")
|
| - self._logStderr("argh")
|
| - self._logStdout(" wubba\n")
|
| - self._logStderr("!!!\n")
|
| -
|
| - self._assertStdout(["foo", " wubba\n"])
|
| - self._assertStderr(["argh", "!!!\n"])
|
| -
|
| -# again, have to subclass LogLineObserver in order to test it, because the
|
| -# default implementations of data-receiving methods are empty
|
| -class MyLogLineObserver(buildstep.LogLineObserver):
|
| - def __init__(self):
|
| - #super(MyLogLineObserver, self).__init__()
|
| - buildstep.LogLineObserver.__init__(self)
|
| -
|
| - self._out = [] # list of lines
|
| - self._err = []
|
| -
|
| - def outLineReceived(self, line):
|
| - self._out.append(line)
|
| -
|
| - def errLineReceived(self, line):
|
| - self._err.append(line)
|
| -
|
| -class LogLineObserver(ObserverTestCase):
|
| - observer_cls = MyLogLineObserver
|
| -
|
| - def testLineBuffered(self):
|
| - # no challenge here: we feed it chunks that are already lines
|
| - # (like a program writing to stdout in line-buffered mode)
|
| - self._logStdout("stdout line 1\n")
|
| - self._logStdout("stdout line 2\n")
|
| - self._logStderr("stderr line 1\n")
|
| - self._logStdout("stdout line 3\n")
|
| -
|
| - self._assertStdout(["stdout line 1",
|
| - "stdout line 2",
|
| - "stdout line 3"])
|
| - self._assertStderr(["stderr line 1"])
|
| -
|
| - def testShortBrokenLines(self):
|
| - self._logStdout("stdout line 1 starts ")
|
| - self._logStderr("an intervening line of error\n")
|
| - self._logStdout("and continues ")
|
| - self._logStdout("but finishes here\n")
|
| - self._logStderr("more error\n")
|
| - self._logStdout("and another line of stdout\n")
|
| -
|
| - self._assertStdout(["stdout line 1 starts and continues but finishes here",
|
| - "and another line of stdout"])
|
| - self._assertStderr(["an intervening line of error",
|
| - "more error"])
|
| -
|
| - def testLongLine(self):
|
| - chunk = "." * 1024
|
| - self._logStdout(chunk)
|
| - self._logStdout(chunk)
|
| - self._logStdout(chunk)
|
| - self._logStdout(chunk)
|
| - self._logStdout(chunk)
|
| - self._logStdout("\n")
|
| -
|
| - self._assertStdout([chunk * 5])
|
| - self._assertStderr([])
|
| -
|
| - def testBigChunk(self):
|
| - chunk = "." * 5000
|
| - self._logStdout(chunk)
|
| - self._logStdout("\n")
|
| -
|
| - self._assertStdout([chunk])
|
| - self._assertStderr([])
|
| -
|
| - def testReallyLongLine(self):
|
| - # A single line of > 16384 bytes is dropped on the floor (bug #201).
|
| - # In real life, I observed such a line being broken into chunks of
|
| - # 4095 bytes, so that's how I'm breaking it here.
|
| - self.observer.setMaxLineLength(65536)
|
| - chunk = "." * 4095
|
| - self._logStdout(chunk)
|
| - self._logStdout(chunk)
|
| - self._logStdout(chunk)
|
| - self._logStdout(chunk) # now we're up to 16380 bytes
|
| - self._logStdout("12345\n")
|
| -
|
| - self._assertStdout([chunk*4 + "12345"])
|
| - self._assertStderr([])
|
| -
|
| -class MyMtrLogObserver(mtrlogobserver.MtrLogObserver):
|
| - def __init__(self):
|
| - mtrlogobserver.MtrLogObserver.__init__(self, textLimit=3, testNameLimit=15)
|
| - self.testFails = []
|
| - self.testWarnLists = []
|
| - # We don't have a buildstep in self.step.
|
| - # So we'll just install ourself there, so we can check the call of
|
| - # setProgress().
|
| - # Same for self.step.step_status.setText()
|
| - self.step = self
|
| - self.step_status = self
|
| - self.progresses = []
|
| - self.text = []
|
| -
|
| - def setProgress(self, type, value):
|
| - self.progresses.append((type, value))
|
| -
|
| - def setText(self, text):
|
| - self.text = text
|
| -
|
| - def collectTestFail(self, testname, variant, result, info, text):
|
| - self.testFails.append((testname, variant, result, info, text))
|
| -
|
| - def collectWarningTests(self, testList):
|
| - self.testWarnLists.append(testList)
|
| -
|
| -class MtrLogObserver(ObserverTestCase):
|
| - observer_cls = MyMtrLogObserver
|
| -
|
| - def test1(self):
|
| - self._logStdout("""
|
| -MySQL Version 5.1.35
|
| -==============================================================================
|
| -TEST RESULT TIME (ms)
|
| -------------------------------------------------------------
|
| -worker[3] Using MTR_BUILD_THREAD 252, with reserved ports 12520..12529
|
| -binlog.binlog_multi_engine [ skipped ] No ndbcluster tests(--skip-ndbcluster)
|
| -rpl.rpl_ssl 'row' [ pass ] 13976
|
| -***Warnings generated in error logs during shutdown after running tests: rpl.rpl_ssl
|
| -rpl.rpl_ssl 'mix' [ pass ] 13308
|
| -main.pool_of_threads w1 [ skipped ] Test requires: 'have_pool_of_threads'
|
| -------------------------------------------------------------
|
| -The servers were restarted 613 times
|
| -mysql-test-run: *** ERROR: There were errors/warnings in server logs after running test cases.
|
| -All 1002 tests were successful.
|
| -
|
| -Errors/warnings were found in logfiles during server shutdown after running the
|
| -following sequence(s) of tests:
|
| - rpl.rpl_ssl
|
| -""")
|
| - self.assertEqual(self.observer.progresses,
|
| - map((lambda (x): ('tests', x)), [1,2]))
|
| - self.assertEqual(self.observer.testWarnLists, [["rpl.rpl_ssl"]])
|
| - self.assertEqual(self.observer.testFails, [])
|
| - self.assertEqual(self.observer.text[1:], ["W:rpl_ssl"])
|
| -
|
| - def test2(self):
|
| - self._logStdout("""
|
| -Logging: mysql-test-run.pl --force --skip-ndb
|
| -==============================================================================
|
| -TEST RESULT TIME (ms)
|
| -------------------------------------------------------------
|
| -binlog.binlog_multi_engine [ skipped ] No ndbcluster tests(--skip-ndbcluster)
|
| -rpl.rpl_sp 'mix' [ pass ] 8117
|
| -
|
| -MTR's internal check of the test case 'rpl.rpl_sp' failed.
|
| -This is the diff of the states of the servers before and after the
|
| -test case was executed:
|
| -mysqltest: Logging to '/home/archivist/archivist-cnc/archivist-cnc/build/mysql-test/var/tmp/check-mysqld_2.log'.
|
| ---- /home/archivist/archivist-cnc/archivist-cnc/build/mysql-test/var/tmp/check-mysqld_2.result 2009-06-18 16:49:19.000000000 +0300
|
| -+++ /home/archivist/archivist-cnc/archivist-cnc/build/mysql-test/var/tmp/check-mysqld_2.reject 2009-06-18 16:49:29.000000000 +0300
|
| -@@ -523,7 +523,7 @@
|
| - mysql.help_keyword 864336512
|
| - mysql.help_relation 2554468794
|
| - mysql.host 0
|
| --mysql.proc 3342691386
|
| -+mysql.proc 3520745907
|
| -
|
| -not ok
|
| -
|
| -rpl.rpl_sp_effects 'row' [ pass ] 3789
|
| -rpl.rpl_temporary_errors 'mix' w2 [ fail ]
|
| - Test ended at 2009-06-18 16:21:28
|
| -
|
| -CURRENT_TEST: rpl.rpl_temporary_errors
|
| -Retrying test, attempt(2/3)...
|
| -
|
| -***Warnings generated in error logs during shutdown after running tests: rpl.rpl_temporary_errors
|
| -rpl.rpl_temporary_errors 'mix' [ retry-pass ] 2108
|
| -rpl.rpl_trunc_temp 'stmt' [ pass ] 2576
|
| -main.information_schema [ pass ] 106092
|
| -timer 5953: expired after 900 seconds
|
| -worker[1] Trying to dump core for [mysqltest - pid: 5975, winpid: 5975]
|
| -main.information_schema_all_engines [ fail ] timeout after 900 seconds
|
| - Test ended at 2009-06-18 18:37:25
|
| -Retrying test, attempt(2/3)...
|
| -
|
| -***Warnings generated in error logs during shutdown after running tests: main.handler_myisam main.ctype_ujis_ucs2 main.ctype_recoding
|
| -main.information_schema_chmod [ pass ] 84
|
| -rpl.rpl_circular_for_4_hosts 'stmt' [ pass ] 344547
|
| -timer 21612: expired after 21600 seconds
|
| -Test suite timeout! Terminating...
|
| -mysql-test-run: *** ERROR: Not all tests completed
|
| -""")
|
| - self.assertEqual(self.observer.progresses,
|
| - map((lambda (x): ('tests', x)), [1,2,3,4,5,6,7,8]))
|
| - self.assertEqual(self.observer.testWarnLists,
|
| - [["rpl.rpl_temporary_errors"],
|
| - ["main.handler_myisam", "main.ctype_ujis_ucs2", "main.ctype_recoding"]])
|
| - failtext1 = """rpl.rpl_temporary_errors 'mix' w2 [ fail ]
|
| - Test ended at 2009-06-18 16:21:28
|
| -
|
| -CURRENT_TEST: rpl.rpl_temporary_errors
|
| -Retrying test, attempt(2/3)...
|
| -
|
| -"""
|
| - failtext2 = """main.information_schema_all_engines [ fail ] timeout after 900 seconds
|
| - Test ended at 2009-06-18 18:37:25
|
| -Retrying test, attempt(2/3)...
|
| -
|
| -"""
|
| - self.assertEqual(self.observer.testFails,
|
| - [ ("rpl.rpl_temporary_errors", "mix", "fail", "", failtext1),
|
| - ("main.information_schema_all_engines", "", "fail", "timeout after 900 seconds", failtext2)
|
| - ])
|
| - self.assertEqual(self.observer.text[1:], ["F:information_s...", "F:rpl_temporary...", "W:ctype_recoding", "W:ctype_ujis_ucs2", "W:handler_myisam"])
|
| -
|
| -class RemoteShellTest(unittest.TestCase):
|
| - def testRepr(self):
|
| - # Test for #352
|
| - rsc = buildstep.RemoteShellCommand('.', ('sh', 'make'))
|
| - testval = repr(rsc)
|
| - rsc = buildstep.RemoteShellCommand('.', ['sh', 'make'])
|
| - testval = repr(rsc)
|
| - rsc = buildstep.RemoteShellCommand('.', 'make')
|
| - testval = repr(rsc)
|
| -
|
| -
|
| -class SubunitLogObserver(subunitlogobserver.SubunitLogObserver):
|
| - """Subclassed to allow testing behaviour without a real buildstep."""
|
| -
|
| - def __init__(self):
|
| - # Skip this test if subunit is not installed.
|
| - try:
|
| - from subunit import TestProtocolServer
|
| - except ImportError:
|
| - raise unittest.SkipTest("subunit.TestProtocolServer not available")
|
| - subunitlogobserver.SubunitLogObserver.__init__(self)
|
| - self.testFails = []
|
| - self.testWarnLists = []
|
| - # We don't have a buildstep in self.step.
|
| - # So we'll just install ourself there, so we can check the call of
|
| - # setProgress().
|
| - # Same for self.step.step_status.setText()
|
| - self.step = self
|
| - self.step_status = self
|
| - self.progresses = []
|
| - self.text = []
|
| -
|
| - def setProgress(self, type, value):
|
| - self.progresses.append((type, value))
|
| -
|
| - def setText(self, text):
|
| - self.text = text
|
| -
|
| -
|
| -class SubunitLogObserverTests(ObserverTestCase):
|
| - observer_cls = SubunitLogObserver
|
| -
|
| - def test1(self):
|
| - self._logStdout("""
|
| -test: foo
|
| -success: foo
|
| -test: bar
|
| -failure: bar [
|
| -string
|
| -]
|
| -test: gam
|
| -skip: gam
|
| -test: quux
|
| -xfail: quux
|
| -""")
|
| - self.assertEqual(self.observer.progresses,
|
| - [('tests', 1), ('tests', 2), ('tests failed', 1), ('tests', 3),
|
| - ('tests failed', 2), ('tests', 4)])
|
|
|