def test_simpleFailureWithTraceback(self): """ L{renderElement} will render a traceback when rendering of the element fails and our site is configured to display tracebacks. """ logObserver = EventLoggingObserver.createWithCleanup( self, globalLogPublisher ) self.request.site.displayTracebacks = True element = FailingElement() d = self.request.notifyFinish() def check(_): self.assertEquals(1, len(logObserver)) f = logObserver[0]["log_failure"] self.assertIsInstance(f.value, FlattenerError) flushed = self.flushLoggedErrors(FlattenerError) self.assertEqual(len(flushed), 1) self.assertEqual( b"".join(self.request.written), b"<!DOCTYPE html>\n<p>I failed.</p>") self.assertTrue(self.request.finished) d.addCallback(check) renderElement(self.request, element, _failElement=TestFailureElement) return d
def test_unexpectedLoginError(self): """ Any unexpected failure from L{Portal.login} results in a 500 response code and causes the failure to be logged. """ logObserver = EventLoggingObserver.createWithCleanup( self, globalLogPublisher) class UnexpectedException(Exception): pass class BrokenChecker: credentialInterfaces = (IUsernamePassword, ) def requestAvatarId(self, credentials): raise UnexpectedException() self.portal.registerChecker(BrokenChecker()) self.credentialFactories.append(BasicCredentialFactory('example.com')) request = self.makeRequest([self.childName]) child = self._authorizedBasicLogin(request) request.render(child) self.assertEqual(request.responseCode, 500) self.assertEquals(1, len(logObserver)) self.assertIsInstance(logObserver[0]["log_failure"].value, UnexpectedException) self.assertEqual(len(self.flushLoggedErrors(UnexpectedException)), 1)
def test_unexpectedDecodeError(self): """ Any unexpected exception raised by the credential factory's C{decode} method results in a 500 response code and causes the exception to be logged. """ logObserver = EventLoggingObserver.createWithCleanup( self, globalLogPublisher) class UnexpectedException(Exception): pass class BadFactory: scheme = b'bad' def getChallenge(self, client): return {} def decode(self, response, request): raise UnexpectedException() self.credentialFactories.append(BadFactory()) request = self.makeRequest([self.childName]) request.requestHeaders.addRawHeader(b'authorization', b'Bad abc') child = getChildForRequest(self.wrapper, request) request.render(child) self.assertEqual(request.responseCode, 500) self.assertEquals(1, len(logObserver)) self.assertIsInstance(logObserver[0]["log_failure"].value, UnexpectedException) self.assertEqual(len(self.flushLoggedErrors(UnexpectedException)), 1)
def test_unknown_correlation_id(self): """ A warning is logged and the connection dropped when a response with an unknown correlation ID is received. """ events = EventLoggingObserver.createWithCleanup(self, globalLogPublisher) self.transport.bufferReceived(b'\0\0\0\x101234 more stuff..') self.assertTrue(self.transport.disconnecting) [event] = events self.assertEqual(LogLevel.warn, event['log_level']) self.assertEqual(self.peer, event['peer']) self.assertEqual(b'1234', event['correlation_id'])
def test_unknown_correlation_id(self): """ A warning is logged and the connection dropped when a response with an unknown correlation ID is received. """ events = EventLoggingObserver.createWithCleanup( self, globalLogPublisher) self.transport.bufferReceived(b'\0\0\0\x101234 more stuff..') self.assertTrue(self.transport.disconnecting) [event] = events self.assertEqual(LogLevel.warn, event['log_level']) self.assertEqual(self.peer, event['peer']) self.assertEqual(b'1234', event['correlation_id'])