mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-07-25 05:55:20 -04:00
Refactor OIDC tests to better mimic an actual OIDC provider. (#13910)
This implements a fake OIDC server, which intercepts calls to the HTTP client. Improves accuracy of tests by covering more internal methods. One particular example was the ID token validation, which previously mocked. This uncovered an incorrect dependency: Synapse actually requires at least authlib 0.15.1, not 0.14.0.
This commit is contained in:
parent
2d0ba3f89a
commit
9192d74b0b
10 changed files with 747 additions and 460 deletions
|
@ -12,13 +12,10 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import json
|
||||
from unittest import mock
|
||||
|
||||
import twisted.web.client
|
||||
from twisted.internet import defer
|
||||
from twisted.internet.protocol import Protocol
|
||||
from twisted.python.failure import Failure
|
||||
from twisted.test.proto_helpers import MemoryReactor
|
||||
|
||||
from synapse.api.room_versions import RoomVersions
|
||||
|
@ -26,10 +23,9 @@ from synapse.events import EventBase
|
|||
from synapse.rest import admin
|
||||
from synapse.rest.client import login, room
|
||||
from synapse.server import HomeServer
|
||||
from synapse.types import JsonDict
|
||||
from synapse.util import Clock
|
||||
|
||||
from tests.test_utils import event_injection
|
||||
from tests.test_utils import FakeResponse, event_injection
|
||||
from tests.unittest import FederatingHomeserverTestCase
|
||||
|
||||
|
||||
|
@ -98,8 +94,8 @@ class FederationClientTest(FederatingHomeserverTestCase):
|
|||
|
||||
# mock up the response, and have the agent return it
|
||||
self._mock_agent.request.side_effect = lambda *args, **kwargs: defer.succeed(
|
||||
_mock_response(
|
||||
{
|
||||
FakeResponse.json(
|
||||
payload={
|
||||
"pdus": [
|
||||
create_event_dict,
|
||||
member_event_dict,
|
||||
|
@ -208,8 +204,8 @@ class FederationClientTest(FederatingHomeserverTestCase):
|
|||
|
||||
# mock up the response, and have the agent return it
|
||||
self._mock_agent.request.side_effect = lambda *args, **kwargs: defer.succeed(
|
||||
_mock_response(
|
||||
{
|
||||
FakeResponse.json(
|
||||
payload={
|
||||
"origin": "yet.another.server",
|
||||
"origin_server_ts": 900,
|
||||
"pdus": [
|
||||
|
@ -269,8 +265,8 @@ class FederationClientTest(FederatingHomeserverTestCase):
|
|||
|
||||
# We expect an outbound request to /backfill, so stub that out
|
||||
self._mock_agent.request.side_effect = lambda *args, **kwargs: defer.succeed(
|
||||
_mock_response(
|
||||
{
|
||||
FakeResponse.json(
|
||||
payload={
|
||||
"origin": "yet.another.server",
|
||||
"origin_server_ts": 900,
|
||||
# Mimic the other server returning our new `pulled_event`
|
||||
|
@ -305,21 +301,3 @@ class FederationClientTest(FederatingHomeserverTestCase):
|
|||
# This is 2 because it failed once from `self.OTHER_SERVER_NAME` and the
|
||||
# other from "yet.another.server"
|
||||
self.assertEqual(backfill_num_attempts, 2)
|
||||
|
||||
|
||||
def _mock_response(resp: JsonDict):
|
||||
body = json.dumps(resp).encode("utf-8")
|
||||
|
||||
def deliver_body(p: Protocol):
|
||||
p.dataReceived(body)
|
||||
p.connectionLost(Failure(twisted.web.client.ResponseDone()))
|
||||
|
||||
response = mock.Mock(
|
||||
code=200,
|
||||
phrase=b"OK",
|
||||
headers=twisted.web.client.Headers({"content-Type": ["application/json"]}),
|
||||
length=len(body),
|
||||
deliverBody=deliver_body,
|
||||
)
|
||||
mock.seal(response)
|
||||
return response
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue