Index: third_party/buildbot_7_12/buildbot/test/test_shell.py |
diff --git a/third_party/buildbot_7_12/buildbot/test/test_shell.py b/third_party/buildbot_7_12/buildbot/test/test_shell.py |
deleted file mode 100644 |
index 52a17f45b9dfbef7d52dbd6b090bda4e5963eb1a..0000000000000000000000000000000000000000 |
--- a/third_party/buildbot_7_12/buildbot/test/test_shell.py |
+++ /dev/null |
@@ -1,138 +0,0 @@ |
- |
- |
-# test step.ShellCommand and the slave-side commands.ShellCommand |
- |
-import sys, time, os |
-from twisted.trial import unittest |
-from twisted.internet import reactor, defer |
-from twisted.python import util |
-from buildbot.slave.commands import SlaveShellCommand |
-from buildbot.test.runutils import SlaveCommandTestBase |
- |
-class SlaveSide(SlaveCommandTestBase, unittest.TestCase): |
- def testOne(self): |
- self.setUpBuilder("test_shell.testOne") |
- emitcmd = util.sibpath(__file__, "emit.py") |
- args = { |
- 'command': [sys.executable, emitcmd, "0"], |
- 'workdir': ".", |
- } |
- d = self.startCommand(SlaveShellCommand, args) |
- d.addCallback(self.collectUpdates) |
- def _check(logs): |
- self.failUnlessEqual(logs['stdout'], "this is stdout\n") |
- self.failUnlessEqual(logs['stderr'], "this is stderr\n") |
- d.addCallback(_check) |
- return d |
- |
- # TODO: move test_slavecommand.Shell and .ShellPTY over here |
- |
- def _generateText(self, filename): |
- lines = [] |
- for i in range(3): |
- lines.append("this is %s %d\n" % (filename, i)) |
- return "".join(lines) |
- |
- def testLogFiles_0(self): |
- return self._testLogFiles(0) |
- |
- def testLogFiles_1(self): |
- return self._testLogFiles(1) |
- |
- def testLogFiles_2(self): |
- return self._testLogFiles(2) |
- |
- def testLogFiles_3(self): |
- return self._testLogFiles(3) |
- |
- def _testLogFiles(self, mode): |
- basedir = "test_shell.testLogFiles" |
- self.setUpBuilder(basedir) |
- # emitlogs.py writes two lines to stdout and two logfiles, one second |
- # apart. Then it waits for us to write something to stdin, then it |
- # writes one more line. |
- |
- if mode != 3: |
- # we write something to the log file first, to exercise the logic |
- # that distinguishes between the old file and the one as modified |
- # by the ShellCommand. We set the timestamp back 5 seconds so |
- # that timestamps can be used to distinguish old from new. |
- log2file = os.path.join(basedir, "log2.out") |
- f = open(log2file, "w") |
- f.write("dummy text\n") |
- f.close() |
- earlier = time.time() - 5 |
- os.utime(log2file, (earlier, earlier)) |
- |
- if mode == 3: |
- # mode=3 doesn't create the old logfiles in the first place, but |
- # then behaves like mode=1 (where the command pauses before |
- # creating them). |
- mode = 1 |
- |
- # mode=1 will cause emitlogs.py to delete the old logfiles first, and |
- # then wait two seconds before creating the new files. mode=0 does |
- # not do this. |
- args = { |
- 'command': [sys.executable, |
- util.sibpath(__file__, "emitlogs.py"), |
- "%s" % mode], |
- 'workdir': ".", |
- 'logfiles': {"log2": "log2.out", |
- "log3": "log3.out"}, |
- 'keep_stdin_open': True, |
- } |
- finishd = self.startCommand(SlaveShellCommand, args) |
- # The first batch of lines is written immediately. The second is |
- # written after a pause of one second. We poll once per second until |
- # we see both batches. |
- |
- self._check_timeout = 10 |
- d = self._check_and_wait() |
- def _wait_for_finish(res, finishd): |
- return finishd |
- d.addCallback(_wait_for_finish, finishd) |
- d.addCallback(self.collectUpdates) |
- def _check(logs): |
- self.failUnlessEqual(logs['stdout'], self._generateText("stdout")) |
- if mode == 2: |
- self.failIf(('log','log2') in logs) |
- self.failIf(('log','log3') in logs) |
- else: |
- self.failUnlessEqual(logs[('log','log2')], |
- self._generateText("log2")) |
- self.failUnlessEqual(logs[('log','log3')], |
- self._generateText("log3")) |
- d.addCallback(_check) |
- d.addBoth(self._maybePrintError) |
- return d |
- |
- def _check_and_wait(self, res=None): |
- self._check_timeout -= 1 |
- if self._check_timeout <= 0: |
- raise defer.TimeoutError("gave up on command") |
- logs = self.collectUpdates() |
- if logs.get('stdout') == "this is stdout 0\nthis is stdout 1\n": |
- # the emitlogs.py process is now waiting for something to arrive |
- # on stdin |
- self.cmd.command.pp.transport.write("poke\n") |
- return |
- if not self.cmd.running: |
- self.fail("command finished too early") |
- spin = defer.Deferred() |
- spin.addCallback(self._check_and_wait) |
- reactor.callLater(1, spin.callback, None) |
- return spin |
- |
- def _maybePrintError(self, res): |
- rc = self.findRC() |
- if rc != 0: |
- print "Command ended with rc=%s" % rc |
- print "STDERR:" |
- self.printStderr() |
- return res |
- |
- # MAYBE TODO: a command which appends to an existing logfile should |
- # result in only the new text being sent up to the master. I need to |
- # think about this more first. |
- |