aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/fake/remotecommand.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/fake/remotecommand.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/fake/remotecommand.py294
1 files changed, 0 insertions, 294 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/fake/remotecommand.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/fake/remotecommand.py
deleted file mode 100644
index 9c583c92..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/fake/remotecommand.py
+++ /dev/null
@@ -1,294 +0,0 @@
-# This file is part of Buildbot. Buildbot is free software: you can
-# redistribute it and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Copyright Buildbot Team Members
-
-from twisted.internet import defer
-from twisted.python import failure
-from buildbot.status.logfile import STDOUT, STDERR, HEADER
-from cStringIO import StringIO
-from buildbot.status.results import SUCCESS, FAILURE
-
-
-class FakeRemoteCommand(object):
-
- # callers should set this to the running TestCase instance
- testcase = None
-
- active = False
-
- def __init__(self, remote_command, args,
- ignore_updates=False, collectStdout=False, collectStderr=False, decodeRC={0:SUCCESS}):
- # copy the args and set a few defaults
- self.remote_command = remote_command
- self.args = args.copy()
- self.logs = {}
- self.delayedLogs = {}
- self.rc = -999
- self.collectStdout = collectStdout
- self.collectStderr = collectStderr
- self.updates = {}
- self.decodeRC = decodeRC
- if collectStdout:
- self.stdout = ''
- if collectStderr:
- self.stderr = ''
-
- def run(self, step, remote):
- # delegate back to the test case
- return self.testcase._remotecommand_run(self, step, remote)
-
- def useLog(self, log, closeWhenFinished=False, logfileName=None):
- if not logfileName:
- logfileName = log.getName()
- self.logs[logfileName] = log
-
- def useLogDelayed(self, logfileName, activateCallBack, closeWhenFinished=False):
- self.delayedLogs[logfileName] = (activateCallBack, closeWhenFinished)
-
- def interrupt(self, why):
- raise NotImplementedError
-
- def results(self):
- if self.rc in self.decodeRC:
- return self.decodeRC[self.rc]
- return FAILURE
-
- def didFail(self):
- return self.results() == FAILURE
-
- def fakeLogData(self, step, log, header='', stdout='', stderr=''):
- # note that this should not be used in the same test as useLog(Delayed)
- self.logs[log] = l = FakeLogFile(log, step)
- l.fakeData(header=header, stdout=stdout, stderr=stderr)
-
- def __repr__(self):
- return "FakeRemoteCommand("+repr(self.remote_command)+","+repr(self.args)+")"
-class FakeRemoteShellCommand(FakeRemoteCommand):
-
- def __init__(self, workdir, command, env=None,
- want_stdout=1, want_stderr=1,
- timeout=20*60, maxTime=None, logfiles={},
- usePTY="slave-config", logEnviron=True, collectStdout=False,
- collectStderr=False,
- interruptSignal=None, initialStdin=None, decodeRC={0:SUCCESS}):
- args = dict(workdir=workdir, command=command, env=env or {},
- want_stdout=want_stdout, want_stderr=want_stderr,
- initial_stdin=initialStdin,
- timeout=timeout, maxTime=maxTime, logfiles=logfiles,
- usePTY=usePTY, logEnviron=logEnviron)
- FakeRemoteCommand.__init__(self, "shell", args,
- collectStdout=collectStdout,
- collectStderr=collectStderr,
- decodeRC=decodeRC)
-
-
-class FakeLogFile(object):
-
- def __init__(self, name, step):
- self.name = name
- self.header = ''
- self.stdout = ''
- self.stderr = ''
- self.chunks = []
- self.step = step
-
- def getName(self):
- return self.name
-
- def addHeader(self, text):
- self.header += text
- self.chunks.append((HEADER, text))
-
- def addStdout(self, text):
- self.stdout += text
- self.chunks.append((STDOUT, text))
- if self.name in self.step.logobservers:
- for obs in self.step.logobservers[self.name]:
- obs.outReceived(text)
-
- def addStderr(self, text):
- self.stderr += text
- self.chunks.append((STDERR, text))
- if self.name in self.step.logobservers:
- for obs in self.step.logobservers[self.name]:
- obs.errReceived(text)
-
- def readlines(self):
- io = StringIO(self.stdout)
- return io.readlines()
-
- def getText(self):
- return ''.join([ c for str,c in self.chunks
- if str in (STDOUT, STDERR)])
- def getTextWithHeaders(self):
- return ''.join([ c for str,c in self.chunks])
-
- def getChunks(self, channels=[], onlyText=False):
- if onlyText:
- return [ data
- for (ch, data) in self.chunks
- if not channels or ch in channels ]
- else:
- return [ (ch, data)
- for (ch, data) in self.chunks
- if not channels or ch in channels ]
-
- def finish(self):
- pass
-
- def fakeData(self, header='', stdout='', stderr=''):
- if header:
- self.header += header
- self.chunks.append((HEADER, header))
- if stdout:
- self.stdout += stdout
- self.chunks.append((STDOUT, stdout))
- if stderr:
- self.stderr += stderr
- self.chunks.append((STDERR, stderr))
-
-class ExpectRemoteRef(object):
- """
- Define an expected RemoteReference in the args to an L{Expect} class
- """
-
- def __init__(self, rrclass):
- self.rrclass = rrclass
-
- def __eq__(self, other):
- return isinstance(other, self.rrclass)
-
-class Expect(object):
- """
- Define an expected L{RemoteCommand}, with the same arguments
-
- Extra behaviors of the remote command can be added to the instance, using
- class methods. Use L{Expect.log} to add a logfile, L{Expect.update} to add
- an arbitrary update, or add an integer to specify the return code (rc), or
- add a Failure instance to raise an exception. Additionally, use
- L{Expect.behavior}, passing a callable that will be invoked with the real
- command and can do what it likes:
-
- def custom_behavior(command):
- ...
- Expect('somecommand', { args='foo' })
- + Expect.behavior(custom_behavior),
- ...
-
- Expect('somecommand', { args='foo' })
- + Expect.log('stdio', stdout='foo!')
- + Expect.log('config.log', stdout='some info')
- + Expect.update('status', 'running')
- + 0, # (specifies the rc)
- ...
-
- """
-
- def __init__(self, remote_command, args, incomparable_args=[]):
- """
-
- Expect a command named C{remote_command}, with args C{args}. Any args
- in C{incomparable_args} are not cmopared, but must exist.
-
- """
- self.remote_command = remote_command
- self.incomparable_args = incomparable_args
- self.args = args
- self.result = None
- self.behaviors = []
-
- @classmethod
- def behavior(cls, callable):
- """
- Add an arbitrary behavior that is expected of this command.
- C{callable} will be invoked with the real command as an argument, and
- can do what it wishes. It will be invoked with maybeDeferred, in case
- the operation is asynchronous.
- """
- return ('callable', callable)
-
- @classmethod
- def log(self, name, **streams):
- return ('log', name, streams)
-
- @classmethod
- def update(self, name, value):
- return ('update', name, value)
-
- def __add__(self, other):
- # special-case adding an integer (return code) or failure (error)
- if isinstance(other, int):
- self.behaviors.append(('rc', other))
- elif isinstance(other, failure.Failure):
- self.behaviors.append(('err', other))
- else:
- self.behaviors.append(other)
- return self
-
- def runBehavior(self, behavior, args, command):
- """
- Implement the given behavior. Returns a Deferred.
- """
- if behavior == 'rc':
- command.rc = args[0]
- elif behavior == 'err':
- return defer.fail(args[0])
- elif behavior == 'update':
- command.updates.setdefault(args[0], []).append(args[1])
- elif behavior == 'log':
- name, streams = args
- if 'header' in streams:
- command.logs[name].addHeader(streams['header'])
- if 'stdout' in streams:
- command.logs[name].addStdout(streams['stdout'])
- if command.collectStdout:
- command.stdout += streams['stdout']
- if 'stderr' in streams:
- command.logs[name].addStderr(streams['stderr'])
- if command.collectStderr:
- command.stderr += streams['stderr']
- elif behavior == 'callable':
- return defer.maybeDeferred(lambda : args[0](command))
- else:
- return defer.fail(failure.Failure(
- AssertionError('invalid behavior %s' % behavior)))
- return defer.succeed(None)
-
- @defer.inlineCallbacks
- def runBehaviors(self, command):
- """
- Run all expected behaviors for this command
- """
- for behavior in self.behaviors:
- yield self.runBehavior(behavior[0], behavior[1:], command)
- def __repr__(self):
- return "Expect("+repr(self.remote_command)+")"
-
-class ExpectShell(Expect):
- """
- Define an expected L{RemoteShellCommand}, with the same arguments Any
- non-default arguments must be specified explicitly (e.g., usePTY).
- """
- def __init__(self, workdir, command, env={},
- want_stdout=1, want_stderr=1, initialStdin=None,
- timeout=20*60, maxTime=None, logfiles={},
- usePTY="slave-config", logEnviron=True):
- args = dict(workdir=workdir, command=command, env=env,
- want_stdout=want_stdout, want_stderr=want_stderr,
- initial_stdin=initialStdin,
- timeout=timeout, maxTime=maxTime, logfiles=logfiles,
- usePTY=usePTY, logEnviron=logEnviron)
- Expect.__init__(self, "shell", args)
- def __repr__(self):
- return "ExpectShell("+repr(self.remote_command)+repr(self.args['command'])+")"