Correct var name
parent
b2df0e8e2c
commit
ecea5af491
|
@ -238,10 +238,10 @@ class MatrixFederationHttpClient(object):
|
|||
# Enable backoff if initially disabled
|
||||
send_request_args["backoff_on_404"] = backoff_on_404
|
||||
|
||||
send_request_args["path"] += "/"
|
||||
# Add trailing slash
|
||||
send_request_args["request"].path += "/"
|
||||
|
||||
response = yield self._send_request(**send_request_args)
|
||||
|
||||
body = yield _handle_json_response(
|
||||
self.hs.get_reactor(), self.default_timeout, request, response,
|
||||
)
|
||||
|
|
|
@ -268,6 +268,60 @@ class FederationClientTests(HomeserverTestCase):
|
|||
|
||||
self.assertIsInstance(f.value, TimeoutError)
|
||||
|
||||
def test_client_requires_trailing_slashes(self):
|
||||
"""
|
||||
If a connection is made to a client but the client rejects it due to
|
||||
requiring a trailing slash. We need to retry the request with a
|
||||
trailing slash. Workaround for Synapse <=v0.99.2, explained in #3622.
|
||||
"""
|
||||
d = self.cl.get_json(
|
||||
"testserv:8008", "foo/bar", try_trailing_slash_on_400=True,
|
||||
)
|
||||
|
||||
self.pump()
|
||||
|
||||
# there should have been a call to connectTCP
|
||||
clients = self.reactor.tcpClients
|
||||
self.assertEqual(len(clients), 1)
|
||||
(_host, _port, factory, _timeout, _bindAddress) = clients[0]
|
||||
|
||||
# complete the connection and wire it up to a fake transport
|
||||
client = factory.buildProtocol(None)
|
||||
conn = StringTransport()
|
||||
client.makeConnection(conn)
|
||||
|
||||
# that should have made it send the request to the connection
|
||||
self.assertRegex(conn.value(), b"^GET /foo/bar")
|
||||
|
||||
# Send the HTTP response
|
||||
client.dataReceived(
|
||||
b"HTTP/1.1 400 Bad Request\r\n"
|
||||
b"Content-Type: application/json\r\n"
|
||||
b"Content-Length: 59\r\n"
|
||||
b"\r\n"
|
||||
b'{"errcode":"M_UNRECOGNIZED","error":"Unrecognized request"}'
|
||||
)
|
||||
|
||||
# We should get a 400 response, then try again
|
||||
self.pump()
|
||||
|
||||
# We should get another request wiht a trailing slash
|
||||
self.assertRegex(conn.value(), b"^GET /foo/bar/")
|
||||
|
||||
# Send a happy response this time
|
||||
client.dataReceived(
|
||||
b"HTTP/1.1 200 OK\r\n"
|
||||
b"Content-Type: application/json\r\n"
|
||||
b"Content-Length: 2\r\n"
|
||||
b"\r\n"
|
||||
b'{}'
|
||||
)
|
||||
|
||||
# We should get a successful response
|
||||
r = self.successResultOf(d)
|
||||
self.assertEqual(r.code, 200)
|
||||
self.assertEqual(r, {})
|
||||
|
||||
def test_client_sends_body(self):
|
||||
self.cl.post_json(
|
||||
"testserv:8008", "foo/bar", timeout=10000,
|
||||
|
|
Loading…
Reference in New Issue