'L{TLSMemoryBIOProtocol.getHandle} returns the L{OpenSSL.SSL.Connection}
instance it uses to actually implement TLS.
This may seem odd.  In fact, it is.  The L{OpenSSL.SSL.Connection} is
not actually the "system handle" here, nor even an object the reactor
knows about directly.  However, L{twisted.internet.ssl.Certificate}\'s
C{peerFromTransport} and C{hostFromTransport} methods depend on being
able to get an L{OpenSSL.SSL.Connection} object in order to work
properly.  Implementing L{ISystemHandle.getHandle} like this is the
easiest way for those APIs to be made to work.  If they are changed,
then it may make sense to get rid of this implementation of
L{ISystemHandle} and return the underlying socket instead.'

def test_getHandle(self):

    factory = ClientFactory()
    contextFactory = ClientTLSContext()
    wrapperFactory = TLSMemoryBIOFactory(contextFactory, True, factory)
    proto = TLSMemoryBIOProtocol(wrapperFactory, Protocol())
    transport = StringTransport()
    proto.makeConnection(transport)
    self.assertIsInstance(proto.getHandle(), ConnectionType)
