'Connect C{client} to a server listening on C{interface} started with
L{IReactorTCP.listenTCP} and return the address returned by one of the
server transport\'s address lookup methods, C{getHost} or C{getPeer}.
@param client: A C{SOCK_STREAM} L{socket.socket} created with an address
family such that it will be able to connect to a server listening on
C{interface}.
@param interface: A C{str} giving an address for a server to listen on.
This should almost certainly be the loopback address for some
address family supported by L{IReactorTCP.listenTCP}.
@param which: A C{str} equal to either C{"getHost"} or C{"getPeer"}
determining which address will be returned.
@return: Whatever object, probably an L{IAddress} provider, is returned
from the method indicated by C{which}.'

def _serverGetConnectionAddressTest(self, client, interface, which):

    class ObserveAddress(Protocol, ):
        def makeConnection(self, transport):
            reactor.stop()
            self.factory.address = getattr(transport, which)()
    reactor = self.buildReactor()
    factory = ServerFactory()
    factory.protocol = ObserveAddress
    port = self.getListeningPort(reactor, factory, 0, interface)
    client.setblocking(False)
    try:
        connect(client, (port.getHost().host, port.getHost().port))
    except socket.error as e:
        self.assertIn(e.errno, (errno.EINPROGRESS, errno.EWOULDBLOCK))
    self.runReactor(reactor)
    return factory.address
