def test_connectedWriteToIPv6Interface(self): """ An IPv6 address can be passed as the C{interface} argument to L{listenUDP}. The resulting Port accepts IPv6 datagrams. """ reactor = self.buildReactor() server = Server() serverStarted = server.startedDeferred = defer.Deferred() self.getListeningPort(reactor, server, interface="::1") client = GoodClient() clientStarted = client.startedDeferred = defer.Deferred() self.getListeningPort(reactor, client, interface="::1") cAddr = client.transport.getHost() def cbClientStarted(ignored): """ Send a datagram from the client once it's started. @param ignored: a list of C{[None, None]}, which is ignored @returns: a deferred which fires when the server has received a datagram. """ client.transport.connect("::1", server.transport.getHost().port) client.transport.write(b"spam") serverReceived = server.packetReceived = defer.Deferred() return serverReceived def cbServerReceived(ignored): """ Stop the reactor after a datagram is received. @param ignored: L{None}, which is ignored @returns: L{None} """ reactor.stop() d = defer.gatherResults([serverStarted, clientStarted]) d.addCallback(cbClientStarted) d.addCallback(cbServerReceived) d.addErrback(err) self.runReactor(reactor) packet = server.packets[0] self.assertEqual(packet, (b'spam', (cAddr.host, cAddr.port)))
def test_writeToIPv6Interface(self): """ Writing to an IPv6 UDP socket on the loopback interface succeeds. """ reactor = self.buildReactor() server = Server() serverStarted = server.startedDeferred = defer.Deferred() self.getListeningPort(reactor, server, interface="::1") client = GoodClient() clientStarted = client.startedDeferred = defer.Deferred() self.getListeningPort(reactor, client, interface="::1") cAddr = client.transport.getHost() def cbClientStarted(ignored): """ Send a datagram from the client once it's started. @param ignored: a list of C{[None, None]}, which is ignored @returns: a deferred which fires when the server has received a datagram. """ client.transport.write(b"spam", ("::1", server.transport.getHost().port)) serverReceived = server.packetReceived = defer.Deferred() return serverReceived def cbServerReceived(ignored): """ Stop the reactor after a datagram is received. @param ignored: L{None}, which is ignored @returns: L{None} """ reactor.stop() d = defer.gatherResults([serverStarted, clientStarted]) d.addCallback(cbClientStarted) d.addCallback(cbServerReceived) d.addErrback(err) self.runReactor(reactor) packet = server.packets[0] self.assertEqual(packet, (b"spam", (cAddr.host, cAddr.port)))