Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions tests/crypto/test_event_signing.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,11 @@
event_needs_resigning,
resign_event,
)
from synapse.events import EventBase, make_event_from_dict
from synapse.events import EventBase
from synapse.types import JsonDict

from tests import unittest
from tests.test_utils.event_builders import make_test_event

# Perform these tests using given secret key so we get entirely deterministic
# signatures output that we can test against.
Expand Down Expand Up @@ -70,7 +71,7 @@ def test_sign_minimal(self) -> None:
RoomVersions.V1, event_dict, HOSTNAME, self.signing_key
)

event = make_event_from_dict(event_dict)
event = make_test_event(event_dict)

self.assertTrue(hasattr(event, "hashes"))
self.assertIn("sha256", event.hashes)
Expand Down Expand Up @@ -103,7 +104,7 @@ def test_sign_message(self) -> None:
RoomVersions.V1, event_dict, HOSTNAME, self.signing_key
)

event = make_event_from_dict(event_dict)
event = make_test_event(event_dict)

self.assertTrue(hasattr(event, "hashes"))
self.assertIn("sha256", event.hashes)
Expand Down Expand Up @@ -141,7 +142,7 @@ def test_resign(self) -> None:
add_hashes_and_signatures(
RoomVersions.V1, event_dict, HOSTNAME, self.signing_key
)
event = make_event_from_dict(event_dict)
event = make_test_event(event_dict)
self.assertIn(HOSTNAME, event.signatures)
self.assertIn(KEY_NAME, event.signatures[HOSTNAME])
signature = event.signatures[HOSTNAME][KEY_NAME]
Expand Down Expand Up @@ -171,7 +172,7 @@ def test_resign(self) -> None:
"signatures": {},
"unsigned": {"age_ts": 1000000},
}
event = make_event_from_dict(event_dict)
event = make_test_event(event_dict)
resigned_event = resign_event(event, HOSTNAME, signing_key_2)
self.assertIn(HOSTNAME, resigned_event["signatures"])
self.assertIn(key_name_2, resigned_event["signatures"][HOSTNAME])
Expand All @@ -188,7 +189,7 @@ def test_event_needs_resigning(self) -> None:
"unsigned": {"age_ts": 1000000},
}
internal_metadata: JsonDict = {}
event_that_needs_resigning = make_event_from_dict(
event_that_needs_resigning = make_test_event(
event_that_needs_resigning_dict,
RoomVersions.V1,
internal_metadata,
Expand All @@ -207,15 +208,15 @@ class TestCase(TypedDict):
events_that_dont_need_resigning: list[TestCase] = [
{
"name": "sender domain isn't ours",
"event": make_event_from_dict(
"event": make_test_event(
{**event_that_needs_resigning_dict, "sender": "@u:somewhereelse"},
RoomVersions.V1,
internal_metadata,
),
},
{
"name": "already signed with this key",
"event": make_event_from_dict(
"event": make_test_event(
{
**event_that_needs_resigning_dict,
"signatures": {
Expand Down
6 changes: 3 additions & 3 deletions tests/events/test_auto_accept_invites.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
from synapse.config._base import RootConfig
from synapse.config.auto_accept_invites import AutoAcceptInvitesConfig
from synapse.events.auto_accept_invites import InviteAutoAccepter
from synapse.federation.federation_base import event_from_pdu_json
from synapse.handlers.sync import JoinedSyncResult, SyncRequestKey
from synapse.module_api import ModuleApi
from synapse.rest import admin
Expand All @@ -43,6 +42,7 @@
from synapse.util.clock import Clock

from tests.handlers.test_sync import generate_sync_config
from tests.test_utils.event_builders import make_test_pdu_event
from tests.unittest import (
FederatingHomeserverTestCase,
HomeserverTestCase,
Expand Down Expand Up @@ -182,7 +182,7 @@ def test_invite_from_remote_user(self) -> None:
)
room_version = self.get_success(self.store.get_room_version(room_id))

invite_event = event_from_pdu_json(
invite_event = make_test_pdu_event(
{
"type": EventTypes.Member,
"content": {"membership": "invite"},
Expand Down Expand Up @@ -308,7 +308,7 @@ def test_accept_invite_local_user(
remote_server = "otherserver"
remote_user = "@otheruser:" + remote_server

invite_event = event_from_pdu_json(
invite_event = make_test_pdu_event(
{
"type": EventTypes.Member,
"content": {"membership": "invite"},
Expand Down
70 changes: 54 additions & 16 deletions tests/events/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

from synapse.api.constants import EventContentFields
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase, make_event_from_dict
from synapse.events import EventBase
from synapse.events.utils import (
FilteredEvent,
PowerLevelsContent,
Expand All @@ -42,6 +42,7 @@
from synapse.types import JsonDict, create_requester
from synapse.util.frozenutils import freeze

from tests.test_utils.event_builders import make_test_event
from tests.unittest import HomeserverTestCase

if TYPE_CHECKING:
Expand All @@ -61,20 +62,33 @@ def MockEvent(**kwargs: Any) -> EventBase:
if internal_metadata is not None:
kwargs.pop("internal_metadata")

return make_event_from_dict(kwargs, internal_metadata_dict=internal_metadata)
kwargs.setdefault("event_id", "$fake_event_id")
kwargs.setdefault("type", "fake_type")
kwargs.setdefault("auth_events", [])
kwargs.setdefault("prev_events", [])
kwargs.setdefault("content", {})
kwargs.setdefault("hashes", {})
kwargs.setdefault("signatures", {})
kwargs.setdefault("unsigned", {})
Comment thread
erikjohnston marked this conversation as resolved.
Outdated
kwargs.setdefault("sender", "@fake_sender:domain")
kwargs.setdefault("room_id", "!fake_room_id")
kwargs.setdefault("depth", 0)
kwargs.setdefault("origin_server_ts", 0)

return make_test_event(kwargs, internal_metadata_dict=internal_metadata)


class TestMaybeUpsertEventField(stdlib_unittest.TestCase):
def test_update_okay(self) -> None:
event = make_event_from_dict({"event_id": "$1234"})
event = make_test_event({"event_id": "$1234"})
success = maybe_upsert_event_field(
event, event.unsigned, "replaces_state", "value"
)
self.assertTrue(success)
self.assertEqual(event.unsigned["replaces_state"], "value")

def test_update_not_okay(self) -> None:
event = make_event_from_dict({"event_id": "$1234"})
event = make_test_event({"event_id": "$1234"})
LARGE_STRING = "a" * 100_000
success = maybe_upsert_event_field(
event, event.unsigned, "replaces_state", LARGE_STRING
Expand All @@ -83,7 +97,7 @@ def test_update_not_okay(self) -> None:
self.assertNotIn("replaces_state", event.unsigned)

def test_update_not_okay_leaves_original_value(self) -> None:
event = make_event_from_dict(
event = make_test_event(
{"event_id": "$1234", "unsigned": {"replaces_state": "value"}}
)
LARGE_STRING = "a" * 100_000
Expand All @@ -95,6 +109,20 @@ def test_update_not_okay_leaves_original_value(self) -> None:


class PruneEventTestCase(stdlib_unittest.TestCase):
# Fields that `make_test_event` fills in by default and that `prune_event`
# preserves as spec-required keep fields. Pruning tests only spell out the
# fields they care about; these are merged into the expected dict so each
# test stays focused on what it is actually checking.
_DEFAULT_KEPT_FIELDS: JsonDict = {
"sender": "@test:test",
"room_id": "!test:test",
"depth": 1,
"origin_server_ts": 1,
"hashes": {"sha256": ""},
"auth_events": [],
"prev_events": [],
}

def run_test(self, evdict: JsonDict, matchdict: JsonDict, **kwargs: Any) -> None:
"""
Asserts that a new event constructed with `evdict` will look like
Expand All @@ -105,8 +133,9 @@ def run_test(self, evdict: JsonDict, matchdict: JsonDict, **kwargs: Any) -> None
matchdict: The expected resulting dictionary.
kwargs: Additional keyword arguments used to create the event.
"""
expected = {**self._DEFAULT_KEPT_FIELDS, **matchdict}
self.assertEqual(
prune_event(make_event_from_dict(evdict, **kwargs)).get_dict(), matchdict
prune_event(make_test_event(evdict, **kwargs)).get_dict(), expected
)

def test_minimal(self) -> None:
Expand All @@ -123,9 +152,6 @@ def test_minimal(self) -> None:

def test_basic_keys(self) -> None:
"""Ensure that the keys that should be untouched are kept."""
# Note that some of the values below don't really make sense, but the
# pruning of events doesn't worry about the values of any fields (with
# the exception of the content field).
self.run_test(
{
"event_id": "$3:domain",
Expand All @@ -134,12 +160,12 @@ def test_basic_keys(self) -> None:
"sender": "@2:domain",
"state_key": "B",
"content": {"other_key": "foo"},
"hashes": "hashes",
"hashes": {"sha256": "abc"},
"signatures": {"domain": {"algo:1": "sigs"}},
"depth": 4,
"prev_events": "prev_events",
"prev_events": [],
"prev_state": "prev_state",
"auth_events": "auth_events",
"auth_events": [],
"origin": "domain", # historical top-level field that still exists on old events
"origin_server_ts": 1234,
"membership": "join",
Expand All @@ -152,11 +178,11 @@ def test_basic_keys(self) -> None:
"room_id": "!1:domain",
"sender": "@2:domain",
"state_key": "B",
"hashes": "hashes",
"hashes": {"sha256": "abc"},
"depth": 4,
"prev_events": "prev_events",
"prev_events": [],
"prev_state": "prev_state",
"auth_events": "auth_events",
"auth_events": [],
"origin": "domain", # historical top-level field that still exists on old events
"origin_server_ts": 1234,
"membership": "join",
Expand Down Expand Up @@ -625,7 +651,7 @@ def test_relations(self) -> None:

class CloneEventTestCase(stdlib_unittest.TestCase):
def test_unsigned_is_copied(self) -> None:
original = make_event_from_dict(
original = make_test_event(
{
"type": "A",
"event_id": "$test:domain",
Expand Down Expand Up @@ -782,6 +808,9 @@ def test_event_fields_all_fields_if_empty(self) -> None:
"room_id": "!foo:bar",
"content": {"foo": "bar"},
"unsigned": {},
"sender": "@fake_sender:domain",
"user_id": "@fake_sender:domain",
"origin_server_ts": 0,
},
)

Expand Down Expand Up @@ -814,6 +843,9 @@ def test_event_flagged_for_admins(self) -> None:
"room_id": "!foo:bar",
"content": {"foo": "bar"},
"unsigned": {},
"sender": "@fake_sender:domain",
"user_id": "@fake_sender:domain",
"origin_server_ts": 0,
},
)

Expand All @@ -836,6 +868,9 @@ def test_event_flagged_for_admins(self) -> None:
"room_id": "!foo:bar",
"content": {"foo": "bar"},
"unsigned": {"io.element.synapse.soft_failed": True},
"sender": "@fake_sender:domain",
"user_id": "@fake_sender:domain",
"origin_server_ts": 0,
},
)
self.assertEqual(
Expand All @@ -862,6 +897,9 @@ def test_event_flagged_for_admins(self) -> None:
"io.element.synapse.soft_failed": True,
"io.element.synapse.policy_server_spammy": True,
},
"sender": "@fake_sender:domain",
"user_id": "@fake_sender:domain",
"origin_server_ts": 0,
},
)

Expand Down
4 changes: 4 additions & 0 deletions tests/federation/test_federation_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ def test_events_signed_by_banned_key_are_refused(self) -> None:
"type": "m.room.message",
"room_id": "!r:domain",
"sender": f"@u:{self.hs.config.server.server_name}",
"auth_events": [],
"prev_events": [],
"depth": 1,
"hashes": {"sha256": ""},
Comment thread
erikjohnston marked this conversation as resolved.
Outdated
"signatures": {},
"unsigned": {"age_ts": 1000000},
}
Expand Down
5 changes: 4 additions & 1 deletion tests/federation/test_federation_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ def test_get_room_state(self) -> None:
"content": {"creator": self.creator},
"prev_events": [],
"auth_events": [],
"depth": 1,
"origin_server_ts": 500,
}
)
Expand All @@ -85,6 +86,7 @@ def test_get_room_state(self) -> None:
"content": {"membership": "join"},
"prev_events": [],
"auth_events": [],
"depth": 2,
"origin_server_ts": 600,
}
)
Expand All @@ -97,6 +99,7 @@ def test_get_room_state(self) -> None:
"content": {},
"prev_events": [],
"auth_events": [],
"depth": 3,
"origin_server_ts": 700,
}
)
Expand Down Expand Up @@ -208,8 +211,8 @@ def _get_pdu_once(self) -> EventBase:
"content": {},
"prev_events": [],
"auth_events": [],
"depth": 3,
Comment thread
erikjohnston marked this conversation as resolved.
Outdated
"origin_server_ts": 700,
"depth": 10,
}
)

Expand Down
Loading