def _ourServerOurClientTest(self, name='session', **kwargs): """ Create a connected SSH client and server protocol pair and return a L{Deferred} which fires with an L{SSHTestChannel} instance connected to a channel on that SSH connection. """ result = defer.Deferred() self.realm = ConchTestRealm('testuser') p = portal.Portal(self.realm) sshpc = ConchTestSSHChecker() sshpc.registerChecker(ConchTestPasswordChecker()) sshpc.registerChecker(conchTestPublicKeyChecker()) p.registerChecker(sshpc) fac = ConchTestServerFactory() fac.portal = p fac.startFactory() self.server = fac.buildProtocol(None) self.clientTransport = LoopbackRelay(self.server) self.client = ConchTestClient( lambda conn: SSHTestChannel(name, result, conn=conn, **kwargs)) self.serverTransport = LoopbackRelay(self.client) self.server.makeConnection(self.serverTransport) self.client.makeConnection(self.clientTransport) return result
def test_ourServerOurClient(self): """ Run the Conch server against the Conch client. Set up several different channels which exercise different behaviors and wait for them to complete. Verify that the channels with errors log them. """ realm = ConchTestRealm() p = portal.Portal(realm) sshpc = ConchTestSSHChecker() sshpc.registerChecker(ConchTestPasswordChecker()) sshpc.registerChecker(ConchTestPublicKeyChecker()) p.registerChecker(sshpc) fac = ConchTestServerFactory() fac.portal = p fac.startFactory() self.server = fac.buildProtocol(None) self.clientTransport = LoopbackRelay(self.server) self.client = ConchTestClient() self.serverTransport = LoopbackRelay(self.client) self.server.makeConnection(self.serverTransport) self.client.makeConnection(self.clientTransport) while self.serverTransport.buffer or self.clientTransport.buffer: log.callWithContext({'system': 'serverTransport'}, self.serverTransport.clearBuffer) log.callWithContext({'system': 'clientTransport'}, self.clientTransport.clearBuffer) self.assertFalse(self.server.done and self.client.done) return self.client.completed.addCallback(self._verifyExpectedErrors)