Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Use SimpleResolverComplexifier in tests (#4497)
Browse files Browse the repository at this point in the history
two reasons for this. One, it saves a bunch of boilerplate. Two, it squashes
unicode to IDNA-in-a-`str` (even on python 3) in a way that it turns out we
rely on to give consistent behaviour between python 2 and 3.
  • Loading branch information
richvdh authored and hawkowl committed Jan 29, 2019
1 parent f1a0446 commit f2b553d
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 32 deletions.
1 change: 1 addition & 0 deletions changelog.d/4497.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Implement MSC1708 (.well-known routing for server-server federation)
7 changes: 3 additions & 4 deletions tests/http/federation/test_matrix_federation_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,9 +377,8 @@ def test_idna_servername(self):

self.mock_resolver.resolve_service.side_effect = lambda _: []

# hostnameendpoint does the lookup on the unicode value (getaddrinfo encodes
# it back to idna)
self.reactor.lookups[u"bücher.com"] = "1.2.3.4"
# the resolver is always called with the IDNA hostname as a native string.
self.reactor.lookups["xn--bcher-kva.com"] = "1.2.3.4"

# this is idna for bücher.com
test_d = self._make_get_request(b"matrix://xn--bcher-kva.com/foo/bar")
Expand Down Expand Up @@ -424,7 +423,7 @@ def test_idna_srv_target(self):
self.mock_resolver.resolve_service.side_effect = lambda _: [
Server(host=b"xn--trget-3qa.com", port=8443) # târget.com
]
self.reactor.lookups[u"târget.com"] = "1.2.3.4"
self.reactor.lookups["xn--trget-3qa.com"] = "1.2.3.4"

test_d = self._make_get_request(b"matrix://xn--bcher-kva.com/foo/bar")

Expand Down
41 changes: 13 additions & 28 deletions tests/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@
from zope.interface import implementer

from twisted.internet import address, threads, udp
from twisted.internet._resolver import HostResolution
from twisted.internet.address import IPv4Address
from twisted.internet.defer import Deferred
from twisted.internet._resolver import SimpleResolverComplexifier
from twisted.internet.defer import Deferred, fail, succeed
from twisted.internet.error import DNSLookupError
from twisted.internet.interfaces import IReactorPluggableNameResolver
from twisted.internet.interfaces import IReactorPluggableNameResolver, IResolverSimple
from twisted.python.failure import Failure
from twisted.test.proto_helpers import MemoryReactorClock
from twisted.web.http import unquote
Expand Down Expand Up @@ -227,30 +226,16 @@ class ThreadedMemoryReactorClock(MemoryReactorClock):

def __init__(self):
self._udp = []
self.lookups = {}

class Resolver(object):
def resolveHostName(
_self,
resolutionReceiver,
hostName,
portNumber=0,
addressTypes=None,
transportSemantics='TCP',
):

resolution = HostResolution(hostName)
resolutionReceiver.resolutionBegan(resolution)
if hostName not in self.lookups:
raise DNSLookupError("OH NO")

resolutionReceiver.addressResolved(
IPv4Address('TCP', self.lookups[hostName], portNumber)
)
resolutionReceiver.resolutionComplete()
return resolution

self.nameResolver = Resolver()
lookups = self.lookups = {}

@implementer(IResolverSimple)
class FakeResolver(object):
def getHostByName(self, name, timeout=None):
if name not in lookups:
return fail(DNSLookupError("OH NO: unknown %s" % (name, )))
return succeed(lookups[name])

self.nameResolver = SimpleResolverComplexifier(FakeResolver())
super(ThreadedMemoryReactorClock, self).__init__()

def listenUDP(self, port, protocol, interface='', maxPacketSize=8196):
Expand Down

0 comments on commit f2b553d

Please sign in to comment.