Add test case for #5574

There's no test that makes sure #5574 didn't break things or works correctly (my bad), so this PR adds a test case that makes sure of it.
This commit is contained in:
Brendan Abolivier 2019-06-28 10:29:02 +01:00
parent f370fd01ec
commit ee0ee97447
No known key found for this signature in database
GPG Key ID: 1E015C145F1916CD

View File

@ -0,0 +1,108 @@
# -*- coding: utf-8 -*-
# Copyright 2019 New Vector Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from mock import Mock
from twisted.internet import defer
import synapse.rest.admin
from synapse.rest.client.v1 import login
from synapse.rest.client.v2_alpha import account
from tests import unittest
class ThreepidISRewrittenURLTestCase(unittest.HomeserverTestCase):
servlets = [
synapse.rest.admin.register_servlets_for_client_rest_resource,
login.register_servlets,
account.register_servlets,
]
def make_homeserver(self, reactor, clock):
self.address = "test@test"
self.is_server_name = "testis"
self.rewritten_is_url = "int.testis"
config = self.default_config()
config["trusted_third_party_id_servers"] = [
self.is_server_name,
]
config["rewrite_identity_server_urls"] = {
self.is_server_name: self.rewritten_is_url,
}
mock_http_client = Mock(spec=[
"post_urlencoded_get_json",
])
mock_http_client.post_urlencoded_get_json.return_value = defer.succeed({
"address": self.address,
"medium": "email",
})
self.hs = self.setup_test_homeserver(
config=config,
simple_http_client=mock_http_client,
)
return self.hs
def prepare(self, reactor, clock, hs):
self.user_id = self.register_user("kermit", "monkey")
def test_rewritten_id_server(self):
"""
Tests that, when validating a 3PID association while rewriting the IS's server
name:
* the bind request is done against the rewritten hostname
* the original, non-rewritten, server name is stored in the database
"""
handler = self.hs.get_handlers().identity_handler
post_urlenc_get_json = self.hs.get_simple_http_client().post_urlencoded_get_json
store = self.hs.get_datastore()
creds = {
"sid": "123",
"client_secret": "some_secret",
}
# Make sure processing the mocked response goes through.
data = self.get_success(handler.bind_threepid(
{
"id_server": self.is_server_name,
"client_secret": creds["client_secret"],
"sid": creds["sid"],
},
self.user_id,
))
self.assertEqual(data.get("address"), self.address)
# Check that the request was done against the rewritten server name.
post_urlenc_get_json.assert_called_once_with(
"https://%s/_matrix/identity/api/v1/3pid/bind" % self.rewritten_is_url,
{
'sid': creds['sid'],
'client_secret': creds["client_secret"],
'mxid': self.user_id,
}
)
# Check that the original server name is saved in the database instead of the
# rewritten one.
id_servers = self.get_success(store.get_id_servers_user_bound(
self.user_id, "email", self.address
))
self.assertEqual(id_servers, [self.is_server_name])