Here are the examples of the python api twisted.trial.unittest.TestCase taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
36 Examples
3
Example 1
Project: mythbox Source File: test_adbapi.py
def makeSQLTests(base, suffix, globals):
"""
Make a test case for every db connector which can connect.
@param base: Base class for test case. Additional base classes
will be a DBConnector subclass and unittest.TestCase
@param suffix: A suffix used to create test case names. Prefixes
are defined in the DBConnector subclasses.
"""
connectors = [GadflyConnector, SQLiteConnector, PyPgSQLConnector,
PsycopgConnector, MySQLConnector, FirebirdConnector]
for connclass in connectors:
name = connclass.TEST_PREFIX + suffix
klass = new.classobj(name, (connclass, base, unittest.TestCase), base.__dict__)
globals[name] = klass
3
Example 2
Project: mythbox Source File: test_assertions.py
def test_assertFailure_masked(self):
"""
A single wrong assertFailure should fail the whole test.
"""
class ExampleFailure(Exception):
pass
class TC(unittest.TestCase):
failureException = ExampleFailure
def test_assertFailure(self):
d = defer.maybeDeferred(lambda: 1/0)
self.assertFailure(d, OverflowError)
self.assertFailure(d, ZeroDivisionError)
return d
test = TC('test_assertFailure')
result = reporter.TestResult()
test.run(result)
self.assertEqual(1, len(result.failures))
3
Example 3
Project: mythbox Source File: test_loader.py
def test_differentInstances(self):
"""
L{TestLoader.loadClass} returns a suite with each test method
represented by a different instances of the L{TestCase} they are
defined on.
"""
class DistinctInstances(unittest.TestCase):
def test_1(self):
self.first = 'test1Run'
def test_2(self):
self.assertFalse(hasattr(self, 'first'))
suite = self.loader.loadClass(DistinctInstances)
result = reporter.Reporter()
suite.run(result)
self.assertTrue(result.wasSuccessful())
3
Example 4
Project: mythbox Source File: test_runner.py
def makeTestFixtures(self):
class MockTest(unittest.TestCase):
def test_foo(test):
self.log.append('test_foo')
self.test = MockTest('test_foo')
self.suite = runner.TestSuite()
3
Example 5
def test_basic(self):
"""
Thes destructive test suite should run the tests normally.
"""
called = []
class MockTest(unittest.TestCase):
def test_foo(test):
called.append(True)
test = MockTest('test_foo')
result = reporter.TestResult()
suite = runner.DestructiveTestSuite([test])
self.assertEquals(called, [])
suite.run(result)
self.assertEquals(called, [True])
self.assertEquals(suite.countTestCases(), 0)
3
Example 6
def test_cleanup(self):
"""
Checks that the test suite cleanups its tests during the run, so that
it ends empty.
"""
class MockTest(unittest.TestCase):
def test_foo(test):
pass
test = MockTest('test_foo')
result = reporter.TestResult()
suite = runner.DestructiveTestSuite([test])
self.assertEquals(suite.countTestCases(), 1)
suite.run(result)
self.assertEquals(suite.countTestCases(), 0)
3
Example 7
Project: mythbox Source File: test_tests.py
def test_defaultIsSuccessful(self):
"""
Test that L{unittest.TestCase} itself can be instantiated, run, and
reported as being successful.
"""
test = unittest.TestCase()
test.run(self.result)
self.assertSuccessful(test, self.result)
3
Example 8
def test_clearPyunitSuite(self):
"""
Calling L{unittest._clearSuite} on a populated standard library
L{TestSuite} removes all tests.
This test is important since C{_clearSuite} operates by mutating
internal variables.
"""
pyunit = __import__('unittest')
suite = pyunit.TestSuite()
suite.addTest(unittest.TestCase())
# Double check that the test suite actually has something in it.
self.assertEqual(1, suite.countTestCases())
unittest._clearSuite(suite)
self.assertEqual(0, suite.countTestCases())
3
Example 9
Project: mythbox Source File: test_tests.py
def test_usesAdaptedReporterWithRun(self):
"""
For decorated tests, C{run} uses a result adapter that preserves the
test decoration for calls to C{addError}, C{startTest} and the like.
See L{reporter._AdaptedReporter}.
"""
test = unittest.TestCase()
decoratedTest = unittest.TestDecorator(test)
result = LoggingReporter()
decoratedTest.run(result)
self.assertTestsEqual(result.test, decoratedTest)
3
Example 10
Project: mythbox Source File: test_tests.py
def test_usesAdaptedReporterWithCall(self):
"""
For decorated tests, C{__call__} uses a result adapter that preserves
the test decoration for calls to C{addError}, C{startTest} and the
like.
See L{reporter._AdaptedReporter}.
"""
test = unittest.TestCase()
decoratedTest = unittest.TestDecorator(test)
result = LoggingReporter()
decoratedTest(result)
self.assertTestsEqual(result.test, decoratedTest)
3
Example 11
def test_decorateSingleTest(self):
"""
Calling L{decorate} on a single test case returns the test case
decorated with the provided decorator.
"""
test = unittest.TestCase()
decoratedTest = unittest.decorate(test, unittest.TestDecorator)
self.assertTestsEqual(unittest.TestDecorator(test), decoratedTest)
3
Example 12
def test_decorateTestSuite(self):
"""
Calling L{decorate} on a test suite will return a test suite with
each test decorated with the provided decorator.
"""
test = unittest.TestCase()
suite = unittest.TestSuite([test])
decoratedTest = unittest.decorate(suite, unittest.TestDecorator)
self.assertSuitesEqual(
decoratedTest, unittest.TestSuite([unittest.TestDecorator(test)]))
3
Example 13
def test_decorateInPlaceMutatesOriginal(self):
"""
Calling L{decorate} on a test suite will mutate the original suite.
"""
test = unittest.TestCase()
suite = unittest.TestSuite([test])
decoratedTest = unittest.decorate(
suite, unittest.TestDecorator)
self.assertSuitesEqual(
decoratedTest, unittest.TestSuite([unittest.TestDecorator(test)]))
self.assertSuitesEqual(
suite, unittest.TestSuite([unittest.TestDecorator(test)]))
3
Example 14
def test_decorateNestedTestSuite(self):
"""
Calling L{decorate} on a test suite with nested suites will return a
test suite that maintains the same structure, but with all tests
decorated.
"""
test = unittest.TestCase()
suite = unittest.TestSuite([unittest.TestSuite([test])])
decoratedTest = unittest.decorate(suite, unittest.TestDecorator)
expected = unittest.TestSuite(
[unittest.TestSuite([unittest.TestDecorator(test)])])
self.assertSuitesEqual(decoratedTest, expected)
3
Example 15
def test_decorateDecoratedSuite(self):
"""
Calling L{decorate} on a test suite with already-decorated tests
decorates all of the tests in the suite again.
"""
test = unittest.TestCase()
decoratedTest = unittest.decorate(test, unittest.TestDecorator)
redecoratedTest = unittest.decorate(decoratedTest,
unittest.TestDecorator)
self.assertTestsEqual(redecoratedTest,
unittest.TestDecorator(decoratedTest))
3
Example 16
def test_decoratePreservesSuite(self):
"""
Tests can be in non-standard suites. L{decorate} preserves the
non-standard suites when it decorates the tests.
"""
test = unittest.TestCase()
suite = runner.DestructiveTestSuite([test])
decorated = unittest.decorate(suite, unittest.TestDecorator)
self.assertSuitesEqual(
decorated,
runner.DestructiveTestSuite([unittest.TestDecorator(test)]))
3
Example 17
def test_iterateTestCase(self):
"""
L{_iterateTests} on a single test case returns a list containing that
test case.
"""
test = unittest.TestCase()
self.assertEqual([test], list(unittest._iterateTests(test)))
3
Example 18
def test_iterateSingletonTestSuite(self):
"""
L{_iterateTests} on a test suite that contains a single test case
returns a list containing that test case.
"""
test = unittest.TestCase()
suite = runner.TestSuite([test])
self.assertEqual([test], list(unittest._iterateTests(suite)))
3
Example 19
def test_iterateNestedTestSuite(self):
"""
L{_iterateTests} returns tests that are in nested test suites.
"""
test = unittest.TestCase()
suite = runner.TestSuite([runner.TestSuite([test])])
self.assertEqual([test], list(unittest._iterateTests(suite)))
3
Example 20
def test_iterateIsLeftToRightDepthFirst(self):
"""
L{_iterateTests} returns tests in left-to-right, depth-first order.
"""
test = unittest.TestCase()
suite = runner.TestSuite([runner.TestSuite([test]), self])
self.assertEqual([test, self], list(unittest._iterateTests(suite)))
3
Example 21
def makeSQLTests(base, suffix, globals):
"""
Make a test case for every db connector which can connect.
@param base: Base class for test case. Additional base classes
will be a DBConnector subclass and unittest.TestCase
@param suffix: A suffix used to create test case names. Prefixes
are defined in the DBConnector subclasses.
"""
connectors = [GadflyConnector, SQLiteConnector, PyPgSQLConnector,
PsycopgConnector, MySQLConnector, FirebirdConnector]
for connclass in connectors:
name = connclass.TEST_PREFIX + suffix
klass = types.ClassType(name, (connclass, base, unittest.TestCase),
base.__dict__)
globals[name] = klass
3
Example 22
def testIsinstance(self):
"""
The current object is an instance of
unittest.TestCase.
"""
self.assertTrue(isinstance(self, unittest.TestCase))
3
Example 23
def test_basic(self):
"""
Thes destructive test suite should run the tests normally.
"""
called = []
class MockTest(unittest.TestCase):
def test_foo(test):
called.append(True)
test = MockTest('test_foo')
result = reporter.TestResult()
suite = runner.DestructiveTestSuite([test])
self.assertEqual(called, [])
suite.run(result)
self.assertEqual(called, [True])
self.assertEqual(suite.countTestCases(), 0)
3
Example 24
def test_cleanup(self):
"""
Checks that the test suite cleanups its tests during the run, so that
it ends empty.
"""
class MockTest(unittest.TestCase):
def test_foo(test):
pass
test = MockTest('test_foo')
result = reporter.TestResult()
suite = runner.DestructiveTestSuite([test])
self.assertEqual(suite.countTestCases(), 1)
suite.run(result)
self.assertEqual(suite.countTestCases(), 0)
0
Example 25
def testIsinstance(self):
self.assert_(isinstance(u'hi', types.StringTypes))
self.assert_(isinstance(self, unittest.TestCase))
0
Example 26
Project: mythbox Source File: test_policies.py
def test_limit(self):
"""
Full test using a custom server limiting number of connections.
"""
server = Server()
c1, c2, c3, c4 = [SimpleProtocol() for i in range(4)]
tServer = policies.ThrottlingFactory(server, 2)
wrapTServer = WrappingFactory(tServer)
wrapTServer.deferred = defer.Deferred()
# Start listening
p = reactor.listenTCP(0, wrapTServer, interface="127.0.0.1")
n = p.getHost().port
def _connect123(results):
reactor.connectTCP("127.0.0.1", n, SillyFactory(c1))
c1.dConnected.addCallback(
lambda r: reactor.connectTCP("127.0.0.1", n, SillyFactory(c2)))
c2.dConnected.addCallback(
lambda r: reactor.connectTCP("127.0.0.1", n, SillyFactory(c3)))
return c3.dDisconnected
def _check123(results):
self.assertEquals([c.connected for c in c1, c2, c3], [1, 1, 1])
self.assertEquals([c.disconnected for c in c1, c2, c3], [0, 0, 1])
self.assertEquals(len(tServer.protocols.keys()), 2)
return results
def _lose1(results):
# disconnect one protocol and now another should be able to connect
c1.transport.loseConnection()
return c1.dDisconnected
def _connect4(results):
reactor.connectTCP("127.0.0.1", n, SillyFactory(c4))
return c4.dConnected
def _check4(results):
self.assertEquals(c4.connected, 1)
self.assertEquals(c4.disconnected, 0)
return results
def _cleanup(results):
for c in c2, c4:
c.transport.loseConnection()
return defer.DeferredList([
defer.maybeDeferred(p.stopListening),
c2.dDisconnected,
c4.dDisconnected])
wrapTServer.deferred.addCallback(_connect123)
wrapTServer.deferred.addCallback(_check123)
wrapTServer.deferred.addCallback(_lose1)
wrapTServer.deferred.addCallback(_connect4)
wrapTServer.deferred.addCallback(_check4)
wrapTServer.deferred.addCallback(_cleanup)
return wrapTServer.deferred
def test_writeLimit(self):
"""
Check the writeLimit parameter: write data, and check for the pause
status.
"""
server = Server()
tServer = TestableThrottlingFactory(task.Clock(), server, writeLimit=10)
port = tServer.buildProtocol(address.IPv4Address('TCP', '127.0.0.1', 0))
tr = StringTransportWithDisconnection()
tr.protocol = port
port.makeConnection(tr)
port.producer = port.wrappedProtocol
port.dataReceived("0123456789")
port.dataReceived("abcdefghij")
self.assertEquals(tr.value(), "0123456789abcdefghij")
self.assertEquals(tServer.writtenThisSecond, 20)
self.assertFalse(port.wrappedProtocol.paused)
# at this point server should've written 20 bytes, 10 bytes
# above the limit so writing should be paused around 1 second
# from 'now', and resumed a second after that
tServer.clock.advance(1.05)
self.assertEquals(tServer.writtenThisSecond, 0)
self.assertTrue(port.wrappedProtocol.paused)
tServer.clock.advance(1.05)
self.assertEquals(tServer.writtenThisSecond, 0)
self.assertFalse(port.wrappedProtocol.paused)
def test_readLimit(self):
"""
Check the readLimit parameter: read data and check for the pause
status.
"""
server = Server()
tServer = TestableThrottlingFactory(task.Clock(), server, readLimit=10)
port = tServer.buildProtocol(address.IPv4Address('TCP', '127.0.0.1', 0))
tr = StringTransportWithDisconnection()
tr.protocol = port
port.makeConnection(tr)
port.dataReceived("0123456789")
port.dataReceived("abcdefghij")
self.assertEquals(tr.value(), "0123456789abcdefghij")
self.assertEquals(tServer.readThisSecond, 20)
tServer.clock.advance(1.05)
self.assertEquals(tServer.readThisSecond, 0)
self.assertEquals(tr.producerState, 'paused')
tServer.clock.advance(1.05)
self.assertEquals(tServer.readThisSecond, 0)
self.assertEquals(tr.producerState, 'producing')
tr.clear()
port.dataReceived("0123456789")
port.dataReceived("abcdefghij")
self.assertEquals(tr.value(), "0123456789abcdefghij")
self.assertEquals(tServer.readThisSecond, 20)
tServer.clock.advance(1.05)
self.assertEquals(tServer.readThisSecond, 0)
self.assertEquals(tr.producerState, 'paused')
tServer.clock.advance(1.05)
self.assertEquals(tServer.readThisSecond, 0)
self.assertEquals(tr.producerState, 'producing')
class TimeoutTestCase(unittest.TestCase):
"""
Tests for L{policies.TimeoutFactory}.
"""
def setUp(self):
"""
Create a testable, deterministic clock, and a set of
server factory/protocol/transport.
"""
self.clock = task.Clock()
wrappedFactory = protocol.ServerFactory()
wrappedFactory.protocol = SimpleProtocol
self.factory = TestableTimeoutFactory(self.clock, wrappedFactory, 3)
self.proto = self.factory.buildProtocol(
address.IPv4Address('TCP', '127.0.0.1', 12345))
self.transport = StringTransportWithDisconnection()
self.transport.protocol = self.proto
self.proto.makeConnection(self.transport)
def test_timeout(self):
"""
Make sure that when a TimeoutFactory accepts a connection, it will
time out that connection if no data is read or written within the
timeout period.
"""
# Let almost 3 time units pass
self.clock.pump([0.0, 0.5, 1.0, 1.0, 0.4])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Now let the timer elapse
self.clock.pump([0.0, 0.2])
self.failUnless(self.proto.wrappedProtocol.disconnected)
def test_sendAvoidsTimeout(self):
"""
Make sure that writing data to a transport from a protocol
constructed by a TimeoutFactory resets the timeout countdown.
"""
# Let half the countdown period elapse
self.clock.pump([0.0, 0.5, 1.0])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Send some data (self.proto is the /real/ proto's transport, so this
# is the write that gets called)
self.proto.write('bytes bytes bytes')
# More time passes, putting us past the original timeout
self.clock.pump([0.0, 1.0, 1.0])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Make sure writeSequence delays timeout as well
self.proto.writeSequence(['bytes'] * 3)
# Tick tock
self.clock.pump([0.0, 1.0, 1.0])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Don't write anything more, just let the timeout expire
self.clock.pump([0.0, 2.0])
self.failUnless(self.proto.wrappedProtocol.disconnected)
def test_receiveAvoidsTimeout(self):
"""
Make sure that receiving data also resets the timeout countdown.
"""
# Let half the countdown period elapse
self.clock.pump([0.0, 1.0, 0.5])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Some bytes arrive, they should reset the counter
self.proto.dataReceived('bytes bytes bytes')
# We pass the original timeout
self.clock.pump([0.0, 1.0, 1.0])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Nothing more arrives though, the new timeout deadline is passed,
# the connection should be dropped.
self.clock.pump([0.0, 1.0, 1.0])
self.failUnless(self.proto.wrappedProtocol.disconnected)
class TimeoutTester(protocol.Protocol, policies.TimeoutMixin):
"""
A testable protocol with timeout facility.
@ivar timedOut: set to C{True} if a timeout has been detected.
@type timedOut: C{bool}
"""
timeOut = 3
timedOut = False
def __init__(self, clock):
"""
Initialize the protocol with a C{task.Clock} object.
"""
self.clock = clock
def connectionMade(self):
"""
Upon connection, set the timeout.
"""
self.setTimeout(self.timeOut)
def dataReceived(self, data):
"""
Reset the timeout on data.
"""
self.resetTimeout()
protocol.Protocol.dataReceived(self, data)
def connectionLost(self, reason=None):
"""
On connection lost, cancel all timeout operations.
"""
self.setTimeout(None)
def timeoutConnection(self):
"""
Flags the timedOut variable to indicate the timeout of the connection.
"""
self.timedOut = True
def callLater(self, timeout, func, *args, **kwargs):
"""
Override callLater to use the deterministic clock.
"""
return self.clock.callLater(timeout, func, *args, **kwargs)
class TestTimeout(unittest.TestCase):
"""
Tests for L{policies.TimeoutMixin}.
"""
def setUp(self):
"""
Create a testable, deterministic clock and a C{TimeoutTester} instance.
"""
self.clock = task.Clock()
self.proto = TimeoutTester(self.clock)
def test_overriddenCallLater(self):
"""
Test that the callLater of the clock is used instead of
C{reactor.callLater}.
"""
self.proto.setTimeout(10)
self.assertEquals(len(self.clock.calls), 1)
def test_timeout(self):
"""
Check that the protocol does timeout at the time specified by its
C{timeOut} attribute.
"""
self.proto.makeConnection(StringTransport())
# timeOut value is 3
self.clock.pump([0, 0.5, 1.0, 1.0])
self.failIf(self.proto.timedOut)
self.clock.pump([0, 1.0])
self.failUnless(self.proto.timedOut)
def test_noTimeout(self):
"""
Check that receiving data is delaying the timeout of the connection.
"""
self.proto.makeConnection(StringTransport())
self.clock.pump([0, 0.5, 1.0, 1.0])
self.failIf(self.proto.timedOut)
self.proto.dataReceived('hello there')
self.clock.pump([0, 1.0, 1.0, 0.5])
self.failIf(self.proto.timedOut)
self.clock.pump([0, 1.0])
self.failUnless(self.proto.timedOut)
def test_resetTimeout(self):
"""
Check that setting a new value for timeout cancel the previous value
and install a new timeout.
"""
self.proto.timeOut = None
self.proto.makeConnection(StringTransport())
self.proto.setTimeout(1)
self.assertEquals(self.proto.timeOut, 1)
self.clock.pump([0, 0.9])
self.failIf(self.proto.timedOut)
self.clock.pump([0, 0.2])
self.failUnless(self.proto.timedOut)
def test_cancelTimeout(self):
"""
Setting the timeout to C{None} cancel any timeout operations.
"""
self.proto.timeOut = 5
self.proto.makeConnection(StringTransport())
self.proto.setTimeout(None)
self.assertEquals(self.proto.timeOut, None)
self.clock.pump([0, 5, 5, 5])
self.failIf(self.proto.timedOut)
def test_return(self):
"""
setTimeout should return the value of the previous timeout.
"""
self.proto.timeOut = 5
self.assertEquals(self.proto.setTimeout(10), 5)
self.assertEquals(self.proto.setTimeout(None), 10)
self.assertEquals(self.proto.setTimeout(1), None)
self.assertEquals(self.proto.timeOut, 1)
# Clean up the DelayedCall
self.proto.setTimeout(None)
class LimitTotalConnectionsFactoryTestCase(unittest.TestCase):
"""Tests for policies.LimitTotalConnectionsFactory"""
def testConnectionCounting(self):
# Make a basic factory
factory = policies.LimitTotalConnectionsFactory()
factory.protocol = protocol.Protocol
# connectionCount starts at zero
self.assertEqual(0, factory.connectionCount)
# connectionCount increments as connections are made
p1 = factory.buildProtocol(None)
self.assertEqual(1, factory.connectionCount)
p2 = factory.buildProtocol(None)
self.assertEqual(2, factory.connectionCount)
# and decrements as they are lost
p1.connectionLost(None)
self.assertEqual(1, factory.connectionCount)
p2.connectionLost(None)
self.assertEqual(0, factory.connectionCount)
def testConnectionLimiting(self):
# Make a basic factory with a connection limit of 1
factory = policies.LimitTotalConnectionsFactory()
factory.protocol = protocol.Protocol
factory.connectionLimit = 1
# Make a connection
p = factory.buildProtocol(None)
self.assertNotEqual(None, p)
self.assertEqual(1, factory.connectionCount)
# Try to make a second connection, which will exceed the connection
# limit. This should return None, because overflowProtocol is None.
self.assertEqual(None, factory.buildProtocol(None))
self.assertEqual(1, factory.connectionCount)
# Define an overflow protocol
class OverflowProtocol(protocol.Protocol):
def connectionMade(self):
factory.overflowed = True
factory.overflowProtocol = OverflowProtocol
factory.overflowed = False
# Try to make a second connection again, now that we have an overflow
# protocol. Note that overflow connections count towards the connection
# count.
op = factory.buildProtocol(None)
op.makeConnection(None) # to trigger connectionMade
self.assertEqual(True, factory.overflowed)
self.assertEqual(2, factory.connectionCount)
# Close the connections.
p.connectionLost(None)
self.assertEqual(1, factory.connectionCount)
op.connectionLost(None)
self.assertEqual(0, factory.connectionCount)
class WriteSequenceEchoProtocol(EchoProtocol):
def dataReceived(self, bytes):
if bytes.find('vector!') != -1:
self.transport.writeSequence([bytes])
else:
EchoProtocol.dataReceived(self, bytes)
class TestLoggingFactory(policies.TrafficLoggingFactory):
openFile = None
def open(self, name):
assert self.openFile is None, "open() called too many times"
self.openFile = StringIO()
return self.openFile
class LoggingFactoryTestCase(unittest.TestCase):
"""
Tests for L{policies.TrafficLoggingFactory}.
"""
def test_thingsGetLogged(self):
"""
Check the output produced by L{policies.TrafficLoggingFactory}.
"""
wrappedFactory = Server()
wrappedFactory.protocol = WriteSequenceEchoProtocol
t = StringTransportWithDisconnection()
f = TestLoggingFactory(wrappedFactory, 'test')
p = f.buildProtocol(('1.2.3.4', 5678))
t.protocol = p
p.makeConnection(t)
v = f.openFile.getvalue()
self.failUnless('*' in v, "* not found in %r" % (v,))
self.failIf(t.value())
p.dataReceived('here are some bytes')
v = f.openFile.getvalue()
self.assertIn("C 1: 'here are some bytes'", v)
self.assertIn("S 1: 'here are some bytes'", v)
self.assertEquals(t.value(), 'here are some bytes')
t.clear()
p.dataReceived('prepare for vector! to the extreme')
v = f.openFile.getvalue()
self.assertIn("SV 1: ['prepare for vector! to the extreme']", v)
self.assertEquals(t.value(), 'prepare for vector! to the extreme')
p.loseConnection()
v = f.openFile.getvalue()
self.assertIn('ConnectionDone', v)
def test_counter(self):
"""
Test counter management with the resetCounter method.
"""
wrappedFactory = Server()
f = TestLoggingFactory(wrappedFactory, 'test')
self.assertEqual(f._counter, 0)
f.buildProtocol(('1.2.3.4', 5678))
self.assertEqual(f._counter, 1)
# Reset log file
f.openFile = None
f.buildProtocol(('1.2.3.4', 5679))
self.assertEqual(f._counter, 2)
f.resetCounter()
self.assertEqual(f._counter, 0)
0
Example 27
Project: mythbox Source File: test_assertions.py
def test_failIf_matches_assertNot(self):
asserts = reflect.prefixedMethods(unittest.TestCase, 'assertNot')
failIfs = reflect.prefixedMethods(unittest.TestCase, 'failIf')
self.failUnlessEqual(sorted(asserts, key=self._name),
sorted(failIfs, key=self._name))
0
Example 28
def test_concurrentImplicitWorkingDirectory(self):
"""
If no working directory is explicitly specified and the default
working directory is in use by another runner, L{TrialRunner.run}
selects a different default working directory to use.
"""
self.parseOptions([])
initialDirectory = os.getcwd()
self.addCleanup(os.chdir, initialDirectory)
firstRunner = self.getRunner()
secondRunner = self.getRunner()
where = {}
class ConcurrentCase(unittest.TestCase):
def test_first(self):
"""
Start a second test run which will have a default working
directory which is the same as the working directory of the
test run already in progress.
"""
# Change the working directory to the value it had before this
# test suite was started.
where['concurrent'] = subsequentDirectory = os.getcwd()
os.chdir(initialDirectory)
self.addCleanup(os.chdir, subsequentDirectory)
secondRunner.run(ConcurrentCase('test_second'))
def test_second(self):
"""
Record the working directory for later analysis.
"""
where['record'] = os.getcwd()
result = firstRunner.run(ConcurrentCase('test_first'))
bad = result.errors + result.failures
if bad:
self.fail(bad[0][1])
self.assertEqual(
where, {
'concurrent': os.path.join(initialDirectory, '_trial_temp'),
'record': os.path.join(initialDirectory, '_trial_temp-1')})
0
Example 29
def test_concurrentExplicitWorkingDirectory(self):
"""
If a working directory which is already in use is explicitly specified,
L{TrialRunner.run} raises L{_WorkingDirectoryBusy}.
"""
self.parseOptions(['--temp-directory', os.path.abspath(self.mktemp())])
initialDirectory = os.getcwd()
self.addCleanup(os.chdir, initialDirectory)
firstRunner = self.getRunner()
secondRunner = self.getRunner()
class ConcurrentCase(unittest.TestCase):
def test_concurrent(self):
"""
Try to start another runner in the same working directory and
assert that it raises L{_WorkingDirectoryBusy}.
"""
self.assertRaises(
runner._WorkingDirectoryBusy,
secondRunner.run, ConcurrentCase('test_failure'))
def test_failure(self):
"""
Should not be called, always fails.
"""
self.fail("test_failure should never be called.")
result = firstRunner.run(ConcurrentCase('test_concurrent'))
bad = result.errors + result.failures
if bad:
self.fail(bad[0][1])
0
Example 30
def test_shouldStop(self):
"""
Test the C{shouldStop} management: raising a C{KeyboardInterrupt} must
interrupt the suite.
"""
called = []
class MockTest(unittest.TestCase):
def test_foo1(test):
called.append(1)
def test_foo2(test):
raise KeyboardInterrupt()
def test_foo3(test):
called.append(2)
result = reporter.TestResult()
loader = runner.TestLoader()
loader.suiteFactory = runner.DestructiveTestSuite
suite = loader.loadClass(MockTest)
self.assertEquals(called, [])
suite.run(result)
self.assertEquals(called, [1])
# The last test shouldn't have been run
self.assertEquals(suite.countTestCases(), 1)
0
Example 31
def setUp(self):
self.originalValue = 'original'
self.patchedValue = 'patched'
self.objectToPatch = self.originalValue
self.test = unittest.TestCase()
0
Example 32
Project: ccs-calendarserver Source File: util.py
def childStore(self):
"""
Create a store suitable for use in a child process, that is hooked up
to the store that a parent test process is managing.
"""
disableMemcacheForTest(TestCase())
staticQuota = 3000
attachmentRoot = (FilePath(self.sharedDBPath).child("attachments"))
stubsvc = self.createService(lambda cf: Service())
cp = ConnectionPool(
stubsvc.produceConnection,
maxConnections=1,
dbtype=DatabaseType(DB_TYPE[0], DB_TYPE[1]),
)
# Attach the service to the running reactor.
cp.startService()
reactor.addSystemEventTrigger("before", "shutdown", cp.stopService)
cds = CommonDataStore(
cp.connection,
{"push": StubNotifierFactory(), },
None,
attachmentRoot, "",
quota=staticQuota
)
return cds
0
Example 33
Project: SubliminalCollaborator Source File: test_policies.py
def test_limit(self):
"""
Full test using a custom server limiting number of connections.
"""
server = Server()
c1, c2, c3, c4 = [SimpleProtocol() for i in range(4)]
tServer = policies.ThrottlingFactory(server, 2)
wrapTServer = WrappingFactory(tServer)
wrapTServer.deferred = defer.Deferred()
# Start listening
p = reactor.listenTCP(0, wrapTServer, interface="127.0.0.1")
n = p.getHost().port
def _connect123(results):
reactor.connectTCP("127.0.0.1", n, SillyFactory(c1))
c1.dConnected.addCallback(
lambda r: reactor.connectTCP("127.0.0.1", n, SillyFactory(c2)))
c2.dConnected.addCallback(
lambda r: reactor.connectTCP("127.0.0.1", n, SillyFactory(c3)))
return c3.dDisconnected
def _check123(results):
self.assertEqual([c.connected for c in c1, c2, c3], [1, 1, 1])
self.assertEqual([c.disconnected for c in c1, c2, c3], [0, 0, 1])
self.assertEqual(len(tServer.protocols.keys()), 2)
return results
def _lose1(results):
# disconnect one protocol and now another should be able to connect
c1.transport.loseConnection()
return c1.dDisconnected
def _connect4(results):
reactor.connectTCP("127.0.0.1", n, SillyFactory(c4))
return c4.dConnected
def _check4(results):
self.assertEqual(c4.connected, 1)
self.assertEqual(c4.disconnected, 0)
return results
def _cleanup(results):
for c in c2, c4:
c.transport.loseConnection()
return defer.DeferredList([
defer.maybeDeferred(p.stopListening),
c2.dDisconnected,
c4.dDisconnected])
wrapTServer.deferred.addCallback(_connect123)
wrapTServer.deferred.addCallback(_check123)
wrapTServer.deferred.addCallback(_lose1)
wrapTServer.deferred.addCallback(_connect4)
wrapTServer.deferred.addCallback(_check4)
wrapTServer.deferred.addCallback(_cleanup)
return wrapTServer.deferred
def test_writeLimit(self):
"""
Check the writeLimit parameter: write data, and check for the pause
status.
"""
server = Server()
tServer = TestableThrottlingFactory(task.Clock(), server, writeLimit=10)
port = tServer.buildProtocol(address.IPv4Address('TCP', '127.0.0.1', 0))
tr = StringTransportWithDisconnection()
tr.protocol = port
port.makeConnection(tr)
port.producer = port.wrappedProtocol
port.dataReceived("0123456789")
port.dataReceived("abcdefghij")
self.assertEqual(tr.value(), "0123456789abcdefghij")
self.assertEqual(tServer.writtenThisSecond, 20)
self.assertFalse(port.wrappedProtocol.paused)
# at this point server should've written 20 bytes, 10 bytes
# above the limit so writing should be paused around 1 second
# from 'now', and resumed a second after that
tServer.clock.advance(1.05)
self.assertEqual(tServer.writtenThisSecond, 0)
self.assertTrue(port.wrappedProtocol.paused)
tServer.clock.advance(1.05)
self.assertEqual(tServer.writtenThisSecond, 0)
self.assertFalse(port.wrappedProtocol.paused)
def test_readLimit(self):
"""
Check the readLimit parameter: read data and check for the pause
status.
"""
server = Server()
tServer = TestableThrottlingFactory(task.Clock(), server, readLimit=10)
port = tServer.buildProtocol(address.IPv4Address('TCP', '127.0.0.1', 0))
tr = StringTransportWithDisconnection()
tr.protocol = port
port.makeConnection(tr)
port.dataReceived("0123456789")
port.dataReceived("abcdefghij")
self.assertEqual(tr.value(), "0123456789abcdefghij")
self.assertEqual(tServer.readThisSecond, 20)
tServer.clock.advance(1.05)
self.assertEqual(tServer.readThisSecond, 0)
self.assertEqual(tr.producerState, 'paused')
tServer.clock.advance(1.05)
self.assertEqual(tServer.readThisSecond, 0)
self.assertEqual(tr.producerState, 'producing')
tr.clear()
port.dataReceived("0123456789")
port.dataReceived("abcdefghij")
self.assertEqual(tr.value(), "0123456789abcdefghij")
self.assertEqual(tServer.readThisSecond, 20)
tServer.clock.advance(1.05)
self.assertEqual(tServer.readThisSecond, 0)
self.assertEqual(tr.producerState, 'paused')
tServer.clock.advance(1.05)
self.assertEqual(tServer.readThisSecond, 0)
self.assertEqual(tr.producerState, 'producing')
class TimeoutTestCase(unittest.TestCase):
"""
Tests for L{policies.TimeoutFactory}.
"""
def setUp(self):
"""
Create a testable, deterministic clock, and a set of
server factory/protocol/transport.
"""
self.clock = task.Clock()
wrappedFactory = protocol.ServerFactory()
wrappedFactory.protocol = SimpleProtocol
self.factory = TestableTimeoutFactory(self.clock, wrappedFactory, 3)
self.proto = self.factory.buildProtocol(
address.IPv4Address('TCP', '127.0.0.1', 12345))
self.transport = StringTransportWithDisconnection()
self.transport.protocol = self.proto
self.proto.makeConnection(self.transport)
def test_timeout(self):
"""
Make sure that when a TimeoutFactory accepts a connection, it will
time out that connection if no data is read or written within the
timeout period.
"""
# Let almost 3 time units pass
self.clock.pump([0.0, 0.5, 1.0, 1.0, 0.4])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Now let the timer elapse
self.clock.pump([0.0, 0.2])
self.failUnless(self.proto.wrappedProtocol.disconnected)
def test_sendAvoidsTimeout(self):
"""
Make sure that writing data to a transport from a protocol
constructed by a TimeoutFactory resets the timeout countdown.
"""
# Let half the countdown period elapse
self.clock.pump([0.0, 0.5, 1.0])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Send some data (self.proto is the /real/ proto's transport, so this
# is the write that gets called)
self.proto.write('bytes bytes bytes')
# More time passes, putting us past the original timeout
self.clock.pump([0.0, 1.0, 1.0])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Make sure writeSequence delays timeout as well
self.proto.writeSequence(['bytes'] * 3)
# Tick tock
self.clock.pump([0.0, 1.0, 1.0])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Don't write anything more, just let the timeout expire
self.clock.pump([0.0, 2.0])
self.failUnless(self.proto.wrappedProtocol.disconnected)
def test_receiveAvoidsTimeout(self):
"""
Make sure that receiving data also resets the timeout countdown.
"""
# Let half the countdown period elapse
self.clock.pump([0.0, 1.0, 0.5])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Some bytes arrive, they should reset the counter
self.proto.dataReceived('bytes bytes bytes')
# We pass the original timeout
self.clock.pump([0.0, 1.0, 1.0])
self.failIf(self.proto.wrappedProtocol.disconnected)
# Nothing more arrives though, the new timeout deadline is passed,
# the connection should be dropped.
self.clock.pump([0.0, 1.0, 1.0])
self.failUnless(self.proto.wrappedProtocol.disconnected)
class TimeoutTester(protocol.Protocol, policies.TimeoutMixin):
"""
A testable protocol with timeout facility.
@ivar timedOut: set to C{True} if a timeout has been detected.
@type timedOut: C{bool}
"""
timeOut = 3
timedOut = False
def __init__(self, clock):
"""
Initialize the protocol with a C{task.Clock} object.
"""
self.clock = clock
def connectionMade(self):
"""
Upon connection, set the timeout.
"""
self.setTimeout(self.timeOut)
def dataReceived(self, data):
"""
Reset the timeout on data.
"""
self.resetTimeout()
protocol.Protocol.dataReceived(self, data)
def connectionLost(self, reason=None):
"""
On connection lost, cancel all timeout operations.
"""
self.setTimeout(None)
def timeoutConnection(self):
"""
Flags the timedOut variable to indicate the timeout of the connection.
"""
self.timedOut = True
def callLater(self, timeout, func, *args, **kwargs):
"""
Override callLater to use the deterministic clock.
"""
return self.clock.callLater(timeout, func, *args, **kwargs)
class TestTimeout(unittest.TestCase):
"""
Tests for L{policies.TimeoutMixin}.
"""
def setUp(self):
"""
Create a testable, deterministic clock and a C{TimeoutTester} instance.
"""
self.clock = task.Clock()
self.proto = TimeoutTester(self.clock)
def test_overriddenCallLater(self):
"""
Test that the callLater of the clock is used instead of
C{reactor.callLater}.
"""
self.proto.setTimeout(10)
self.assertEqual(len(self.clock.calls), 1)
def test_timeout(self):
"""
Check that the protocol does timeout at the time specified by its
C{timeOut} attribute.
"""
self.proto.makeConnection(StringTransport())
# timeOut value is 3
self.clock.pump([0, 0.5, 1.0, 1.0])
self.failIf(self.proto.timedOut)
self.clock.pump([0, 1.0])
self.failUnless(self.proto.timedOut)
def test_noTimeout(self):
"""
Check that receiving data is delaying the timeout of the connection.
"""
self.proto.makeConnection(StringTransport())
self.clock.pump([0, 0.5, 1.0, 1.0])
self.failIf(self.proto.timedOut)
self.proto.dataReceived('hello there')
self.clock.pump([0, 1.0, 1.0, 0.5])
self.failIf(self.proto.timedOut)
self.clock.pump([0, 1.0])
self.failUnless(self.proto.timedOut)
def test_resetTimeout(self):
"""
Check that setting a new value for timeout cancel the previous value
and install a new timeout.
"""
self.proto.timeOut = None
self.proto.makeConnection(StringTransport())
self.proto.setTimeout(1)
self.assertEqual(self.proto.timeOut, 1)
self.clock.pump([0, 0.9])
self.failIf(self.proto.timedOut)
self.clock.pump([0, 0.2])
self.failUnless(self.proto.timedOut)
def test_cancelTimeout(self):
"""
Setting the timeout to C{None} cancel any timeout operations.
"""
self.proto.timeOut = 5
self.proto.makeConnection(StringTransport())
self.proto.setTimeout(None)
self.assertEqual(self.proto.timeOut, None)
self.clock.pump([0, 5, 5, 5])
self.failIf(self.proto.timedOut)
def test_return(self):
"""
setTimeout should return the value of the previous timeout.
"""
self.proto.timeOut = 5
self.assertEqual(self.proto.setTimeout(10), 5)
self.assertEqual(self.proto.setTimeout(None), 10)
self.assertEqual(self.proto.setTimeout(1), None)
self.assertEqual(self.proto.timeOut, 1)
# Clean up the DelayedCall
self.proto.setTimeout(None)
class LimitTotalConnectionsFactoryTestCase(unittest.TestCase):
"""Tests for policies.LimitTotalConnectionsFactory"""
def testConnectionCounting(self):
# Make a basic factory
factory = policies.LimitTotalConnectionsFactory()
factory.protocol = protocol.Protocol
# connectionCount starts at zero
self.assertEqual(0, factory.connectionCount)
# connectionCount increments as connections are made
p1 = factory.buildProtocol(None)
self.assertEqual(1, factory.connectionCount)
p2 = factory.buildProtocol(None)
self.assertEqual(2, factory.connectionCount)
# and decrements as they are lost
p1.connectionLost(None)
self.assertEqual(1, factory.connectionCount)
p2.connectionLost(None)
self.assertEqual(0, factory.connectionCount)
def testConnectionLimiting(self):
# Make a basic factory with a connection limit of 1
factory = policies.LimitTotalConnectionsFactory()
factory.protocol = protocol.Protocol
factory.connectionLimit = 1
# Make a connection
p = factory.buildProtocol(None)
self.assertNotEqual(None, p)
self.assertEqual(1, factory.connectionCount)
# Try to make a second connection, which will exceed the connection
# limit. This should return None, because overflowProtocol is None.
self.assertEqual(None, factory.buildProtocol(None))
self.assertEqual(1, factory.connectionCount)
# Define an overflow protocol
class OverflowProtocol(protocol.Protocol):
def connectionMade(self):
factory.overflowed = True
factory.overflowProtocol = OverflowProtocol
factory.overflowed = False
# Try to make a second connection again, now that we have an overflow
# protocol. Note that overflow connections count towards the connection
# count.
op = factory.buildProtocol(None)
op.makeConnection(None) # to trigger connectionMade
self.assertEqual(True, factory.overflowed)
self.assertEqual(2, factory.connectionCount)
# Close the connections.
p.connectionLost(None)
self.assertEqual(1, factory.connectionCount)
op.connectionLost(None)
self.assertEqual(0, factory.connectionCount)
class WriteSequenceEchoProtocol(EchoProtocol):
def dataReceived(self, bytes):
if bytes.find('vector!') != -1:
self.transport.writeSequence([bytes])
else:
EchoProtocol.dataReceived(self, bytes)
class TestLoggingFactory(policies.TrafficLoggingFactory):
openFile = None
def open(self, name):
assert self.openFile is None, "open() called too many times"
self.openFile = StringIO()
return self.openFile
class LoggingFactoryTestCase(unittest.TestCase):
"""
Tests for L{policies.TrafficLoggingFactory}.
"""
def test_thingsGetLogged(self):
"""
Check the output produced by L{policies.TrafficLoggingFactory}.
"""
wrappedFactory = Server()
wrappedFactory.protocol = WriteSequenceEchoProtocol
t = StringTransportWithDisconnection()
f = TestLoggingFactory(wrappedFactory, 'test')
p = f.buildProtocol(('1.2.3.4', 5678))
t.protocol = p
p.makeConnection(t)
v = f.openFile.getvalue()
self.failUnless('*' in v, "* not found in %r" % (v,))
self.failIf(t.value())
p.dataReceived('here are some bytes')
v = f.openFile.getvalue()
self.assertIn("C 1: 'here are some bytes'", v)
self.assertIn("S 1: 'here are some bytes'", v)
self.assertEqual(t.value(), 'here are some bytes')
t.clear()
p.dataReceived('prepare for vector! to the extreme')
v = f.openFile.getvalue()
self.assertIn("SV 1: ['prepare for vector! to the extreme']", v)
self.assertEqual(t.value(), 'prepare for vector! to the extreme')
p.loseConnection()
v = f.openFile.getvalue()
self.assertIn('ConnectionDone', v)
def test_counter(self):
"""
Test counter management with the resetCounter method.
"""
wrappedFactory = Server()
f = TestLoggingFactory(wrappedFactory, 'test')
self.assertEqual(f._counter, 0)
f.buildProtocol(('1.2.3.4', 5678))
self.assertEqual(f._counter, 1)
# Reset log file
f.openFile = None
f.buildProtocol(('1.2.3.4', 5679))
self.assertEqual(f._counter, 2)
f.resetCounter()
self.assertEqual(f._counter, 0)
0
Example 34
Project: SubliminalCollaborator Source File: test_runner.py
def test_concurrentImplicitWorkingDirectory(self):
"""
If no working directory is explicitly specified and the default
working directory is in use by another runner, L{TrialRunner.run}
selects a different default working directory to use.
"""
self.parseOptions([])
# Make sure we end up with the same working directory after this test
# as we had before it.
self.addCleanup(os.chdir, os.getcwd())
# Make a new directory and change into it. This isolates us from state
# that other tests might have dumped into this process's temp
# directory.
runDirectory = FilePath(self.mktemp())
runDirectory.makedirs()
os.chdir(runDirectory.path)
firstRunner = self.getRunner()
secondRunner = self.getRunner()
where = {}
class ConcurrentCase(unittest.TestCase):
def test_first(self):
"""
Start a second test run which will have a default working
directory which is the same as the working directory of the
test run already in progress.
"""
# Change the working directory to the value it had before this
# test suite was started.
where['concurrent'] = subsequentDirectory = os.getcwd()
os.chdir(runDirectory.path)
self.addCleanup(os.chdir, subsequentDirectory)
secondRunner.run(ConcurrentCase('test_second'))
def test_second(self):
"""
Record the working directory for later analysis.
"""
where['record'] = os.getcwd()
result = firstRunner.run(ConcurrentCase('test_first'))
bad = result.errors + result.failures
if bad:
self.fail(bad[0][1])
self.assertEqual(
where, {
'concurrent': runDirectory.child('_trial_temp').path,
'record': runDirectory.child('_trial_temp-1').path})
0
Example 35
Project: SubliminalCollaborator Source File: test_runner.py
Function: test_concurrentexplicitworkingdirectory
Function: test_concurrentexplicitworkingdirectory
def test_concurrentExplicitWorkingDirectory(self):
"""
If a working directory which is already in use is explicitly specified,
L{TrialRunner.run} raises L{_WorkingDirectoryBusy}.
"""
self.parseOptions(['--temp-directory', os.path.abspath(self.mktemp())])
initialDirectory = os.getcwd()
self.addCleanup(os.chdir, initialDirectory)
firstRunner = self.getRunner()
secondRunner = self.getRunner()
class ConcurrentCase(unittest.TestCase):
def test_concurrent(self):
"""
Try to start another runner in the same working directory and
assert that it raises L{_WorkingDirectoryBusy}.
"""
self.assertRaises(
util._WorkingDirectoryBusy,
secondRunner.run, ConcurrentCase('test_failure'))
def test_failure(self):
"""
Should not be called, always fails.
"""
self.fail("test_failure should never be called.")
result = firstRunner.run(ConcurrentCase('test_concurrent'))
bad = result.errors + result.failures
if bad:
self.fail(bad[0][1])
0
Example 36
def test_shouldStop(self):
"""
Test the C{shouldStop} management: raising a C{KeyboardInterrupt} must
interrupt the suite.
"""
called = []
class MockTest(unittest.TestCase):
def test_foo1(test):
called.append(1)
def test_foo2(test):
raise KeyboardInterrupt()
def test_foo3(test):
called.append(2)
result = reporter.TestResult()
loader = runner.TestLoader()
loader.suiteFactory = runner.DestructiveTestSuite
suite = loader.loadClass(MockTest)
self.assertEqual(called, [])
suite.run(result)
self.assertEqual(called, [1])
# The last test shouldn't have been run
self.assertEqual(suite.countTestCases(), 1)