def __init__(self, service): self.service = service def authenticatorFactory(): return XMPPServerListenAuthenticator(service) XmlStreamServerFactory.__init__(self, authenticatorFactory) self.addBootstrap(xmlstream.STREAM_CONNECTED_EVENT, self.onConnectionMade) self.addBootstrap(xmlstream.STREAM_AUTHD_EVENT, self.onAuthenticated) self.serial = 0
def setUp(self): """ Set up a server factory with a authenticator factory function. """ class TestAuthenticator(object): def __init__(self): self.xmlstreams = [] def associateWithStream(self, xs): self.xmlstreams.append(xs) def authenticatorFactory(): return TestAuthenticator() self.factory = XmlStreamServerFactory(authenticatorFactory)
class XmlStreamServerFactoryTest(BootstrapMixinTest): """ Tests for L{XmlStreamServerFactory}. """ def setUp(self): """ Set up a server factory with a authenticator factory function. """ class TestAuthenticator(object): def __init__(self): self.xmlstreams = [] def associateWithStream(self, xs): self.xmlstreams.append(xs) def authenticatorFactory(): return TestAuthenticator() self.factory = XmlStreamServerFactory(authenticatorFactory) def test_interface(self): """ L{XmlStreamServerFactory} is a L{Factory}. """ verifyObject(IProtocolFactory, self.factory) def test_buildProtocolAuthenticatorInstantiation(self): """ The authenticator factory should be used to instantiate the authenticator and pass it to the protocol. The default protocol, L{XmlStream} stores the authenticator it is passed, and calls its C{associateWithStream} method. so we use that to check whether our authenticator factory is used and the protocol instance gets an authenticator. """ xs = self.factory.buildProtocol(None) self.assertEquals([xs], xs.authenticator.xmlstreams) def test_buildProtocolXmlStream(self): """ The protocol factory creates Jabber XML Stream protocols by default. """ xs = self.factory.buildProtocol(None) self.assertIsInstance(xs, xmlstream.XmlStream) def test_buildProtocolTwice(self): """ Subsequent calls to buildProtocol should result in different instances of the protocol, as well as their authenticators. """ xs1 = self.factory.buildProtocol(None) xs2 = self.factory.buildProtocol(None) self.assertNotIdentical(xs1, xs2) self.assertNotIdentical(xs1.authenticator, xs2.authenticator) def test_buildProtocolInstallsBootstraps(self): """ The protocol factory installs bootstrap event handlers on the protocol. """ called = [] def cb(data): called.append(data) self.factory.addBootstrap('//event/myevent', cb) xs = self.factory.buildProtocol(None) xs.dispatch(None, '//event/myevent') self.assertEquals(1, len(called)) def test_buildProtocolStoresFactory(self): """ The protocol factory is saved in the protocol. """ xs = self.factory.buildProtocol(None) self.assertIdentical(self.factory, xs.factory)