def testSendNotimeout(self): basedir = "test_slave_commands_base.logging.sendNotimeout" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, stdoutCommand('hello'), basedir) data = "x" * (ShellCommand.BUFFER_SIZE + 1) s._addToBuffers('stdout', data) self.failUnless(len(b.updates), 1)
def testSendChunked(self): basedir = "test_slave_commands_base.logging.sendBufferedChunked" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, stdoutCommand('hello'), basedir) data = "x" * ShellCommand.CHUNK_LIMIT * 2 s._addToBuffers('stdout', data) s._sendBuffers() self.failUnless(len(b.updates), 2)
def testNoStderr(self): basedir = "test_slave_commands_base.shellcommand.nostderr" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, [sys.executable, '-c', 'import sys; sys.stderr.write("hello\\n")'], basedir, sendStderr=False) d = s.start() def check(ign): self.failIf({'stderr': 'hello\n'} in b.updates) self.failUnless({'rc': 0} in b.updates) d.addCallback(check) return d
def testNoStdout(self): basedir = "test_slave_commands_base.shellcommand.nostdout" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, stdoutCommand('hello'), basedir, sendStdout=False) d = s.start() def check(ign): self.failIf({'stdout': 'hello\n'} in b.updates) self.failUnless({'rc': 0} in b.updates) d.addCallback(check) return d
def testUnsetEnvironVar(self): basedir = "test_slave_commands_base.shellcommand.start" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, stdoutCommand('hello'), basedir, environ={"PATH":None}) d = s.start() def check(ign): headers = "".join([update.values()[0] for update in b.updates if update.keys() == ["header"] ]) self.failUnless(not re.match('\bPATH=',headers)) d.addCallback(check) return d
def testNoLogEnviron(self): basedir = "test_slave_commands_base.shellcommand.start" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, stdoutCommand('hello'), basedir, environ={"FOO": "BAR"}, logEnviron=False) d = s.start() def check(ign): headers = "".join([update.values()[0] for update in b.updates if update.keys() == ["header"] ]) self.failUnless("FOO=BAR\n" not in headers) d.addCallback(check) return d
def testStringCommand(self): basedir = "test_slave_commands_base.shellcommand.string" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, 'echo hello', basedir) d = s.start() def check(ign): self.failUnless({'stdout': 'hello\n'} in b.updates) self.failUnless({'rc': 0} in b.updates) d.addCallback(check) return d
def testKeepStdout(self): basedir = "test_slave_commands_base.shellcommand.keepstdout" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, stdoutCommand('hello'), basedir, keepStdout=True) d = s.start() def check(ign): self.failUnless({'stdout': 'hello\n'} in b.updates) self.failUnless({'rc': 0} in b.updates) self.failUnlessEquals(s.stdout, 'hello\n') d.addCallback(check) return d
def testCommandMaxTime(self): basedir = "test_slave_commands_base.shellcommand.maxtime" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, 'sleep 10; echo hello', basedir, maxTime=5) clock = task.Clock() s._reactor = clock d = s.start() def check(ign): self.failUnless({'stdout': 'hello\n'} not in b.updates) self.failUnless({'rc': -1} in b.updates, b.updates) d.addCallback(check) clock.advance(6) return d
def testEnvironExpandVar(self): basedir = "test_slave_commands_base.shellcommand.start" b = FakeSlaveBuilder(False, basedir) environ = {"EXPND": "-${PATH}-", "DOESNT_EXPAND": "-${---}-", "DOESNT_FIND": "-${DOESNT_EXISTS}-"} s = ShellCommand(b, stdoutCommand('hello'), basedir, environ=environ) d = s.start() def check(ign): headers = "".join([update.values()[0] for update in b.updates if update.keys() == ["header"] ]) self.failUnless("EXPND=-$" not in headers) self.failUnless("DOESNT_FIND=--\n" in headers) self.failUnless("DOESNT_EXPAND=-${---}-\n" in headers) d.addCallback(check) return d
def testSendBufferedInterleaved(self): basedir = "test_slave_commands_base.logging.sendBufferedInterleaved" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, stdoutCommand('hello'), basedir) s._addToBuffers('stdout', 'hello ') s._addToBuffers('stderr', 'DIEEEEEEE') s._addToBuffers('stdout', 'world') s._sendBuffers() self.failUnlessEqual(b.updates, [ {'stdout': 'hello '}, {'stderr': 'DIEEEEEEE'}, {'stdout': 'world'}, ])
def testBadCommand(self): basedir = "test_slave_commands_base.shellcommand.badcommand" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, ['command_that_doesnt_exist.exe'], basedir) s.workdir = 1 d = s.start() def check(err): self.flushLoggedErrors() err.trap(AbandonChain) stderr = [] # Here we're checking that the exception starting up the command # actually gets propogated back to the master. for u in b.updates: if 'stderr' in u: stderr.append(u['stderr']) stderr = "".join(stderr) self.failUnless("TypeError" in stderr, stderr) d.addBoth(check) return d
def testSendStatus(self): basedir = "test_slave_commands_base.logging.sendStatus" b = FakeSlaveBuilder(False, basedir) s = ShellCommand(b, stdoutCommand('hello'), basedir) s.sendStatus({'stdout': 'hello\n'}) self.failUnlessEqual(b.updates, [{'stdout': 'hello\n'}])