Fix up event-construction in tests ahead of the Rust event port (#19781)

When we port the `Event` class to Rust, the constructor will check for
the existence of required fields. To support that, we tidy up the test
code where we construct fake events to add all the required fields.

There should be no behavioural changes.

Review commit-by-commit.
This commit is contained in:
Erik Johnston
2026-05-15 10:12:42 +01:00
committed by GitHub
parent b233892a13
commit ff55aff5b2
29 changed files with 403 additions and 233 deletions
+1
View File
@@ -0,0 +1 @@
Fix up event-construction in tests ahead of the Rust event port.
+49 -37
View File
@@ -36,7 +36,7 @@ from synapse.util.clock import Clock
from synapse.util.frozenutils import freeze
from tests import unittest
from tests.events.test_utils import MockEvent
from tests.test_utils.event_builders import make_test_event
user_id = UserID.from_string("@test_user:test")
user2_id = UserID.from_string("@test_user2:test")
@@ -134,18 +134,22 @@ class FilteringTestCase(unittest.HomeserverTestCase):
def test_definition_types_works_with_literals(self) -> None:
definition = {"types": ["m.room.message", "org.matrix.foo.bar"]}
event = MockEvent(sender="@foo:bar", type="m.room.message", room_id="!foo:bar")
event = make_test_event(
sender="@foo:bar", type="m.room.message", room_id="!foo:bar"
)
self.assertTrue(Filter(self.hs, definition)._check(event))
def test_definition_types_works_with_wildcards(self) -> None:
definition = {"types": ["m.*", "org.matrix.foo.bar"]}
event = MockEvent(sender="@foo:bar", type="m.room.message", room_id="!foo:bar")
event = make_test_event(
sender="@foo:bar", type="m.room.message", room_id="!foo:bar"
)
self.assertTrue(Filter(self.hs, definition)._check(event))
def test_definition_types_works_with_unknowns(self) -> None:
definition = {"types": ["m.room.message", "org.matrix.foo.bar"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="now.for.something.completely.different",
room_id="!foo:bar",
@@ -154,19 +158,23 @@ class FilteringTestCase(unittest.HomeserverTestCase):
def test_definition_not_types_works_with_literals(self) -> None:
definition = {"not_types": ["m.room.message", "org.matrix.foo.bar"]}
event = MockEvent(sender="@foo:bar", type="m.room.message", room_id="!foo:bar")
event = make_test_event(
sender="@foo:bar", type="m.room.message", room_id="!foo:bar"
)
self.assertFalse(Filter(self.hs, definition)._check(event))
def test_definition_not_types_works_with_wildcards(self) -> None:
definition = {"not_types": ["m.room.message", "org.matrix.*"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar", type="org.matrix.custom.event", room_id="!foo:bar"
)
self.assertFalse(Filter(self.hs, definition)._check(event))
def test_definition_not_types_works_with_unknowns(self) -> None:
definition = {"not_types": ["m.*", "org.*"]}
event = MockEvent(sender="@foo:bar", type="com.nom.nom.nom", room_id="!foo:bar")
event = make_test_event(
sender="@foo:bar", type="com.nom.nom.nom", room_id="!foo:bar"
)
self.assertTrue(Filter(self.hs, definition)._check(event))
def test_definition_not_types_takes_priority_over_types(self) -> None:
@@ -174,33 +182,35 @@ class FilteringTestCase(unittest.HomeserverTestCase):
"not_types": ["m.*", "org.*"],
"types": ["m.room.message", "m.room.topic"],
}
event = MockEvent(sender="@foo:bar", type="m.room.topic", room_id="!foo:bar")
event = make_test_event(
sender="@foo:bar", type="m.room.topic", room_id="!foo:bar"
)
self.assertFalse(Filter(self.hs, definition)._check(event))
def test_definition_senders_works_with_literals(self) -> None:
definition = {"senders": ["@flibble:wibble"]}
event = MockEvent(
event = make_test_event(
sender="@flibble:wibble", type="com.nom.nom.nom", room_id="!foo:bar"
)
self.assertTrue(Filter(self.hs, definition)._check(event))
def test_definition_senders_works_with_unknowns(self) -> None:
definition = {"senders": ["@flibble:wibble"]}
event = MockEvent(
event = make_test_event(
sender="@challenger:appears", type="com.nom.nom.nom", room_id="!foo:bar"
)
self.assertFalse(Filter(self.hs, definition)._check(event))
def test_definition_not_senders_works_with_literals(self) -> None:
definition = {"not_senders": ["@flibble:wibble"]}
event = MockEvent(
event = make_test_event(
sender="@flibble:wibble", type="com.nom.nom.nom", room_id="!foo:bar"
)
self.assertFalse(Filter(self.hs, definition)._check(event))
def test_definition_not_senders_works_with_unknowns(self) -> None:
definition = {"not_senders": ["@flibble:wibble"]}
event = MockEvent(
event = make_test_event(
sender="@challenger:appears", type="com.nom.nom.nom", room_id="!foo:bar"
)
self.assertTrue(Filter(self.hs, definition)._check(event))
@@ -210,21 +220,21 @@ class FilteringTestCase(unittest.HomeserverTestCase):
"not_senders": ["@misspiggy:muppets"],
"senders": ["@kermit:muppets", "@misspiggy:muppets"],
}
event = MockEvent(
event = make_test_event(
sender="@misspiggy:muppets", type="m.room.topic", room_id="!foo:bar"
)
self.assertFalse(Filter(self.hs, definition)._check(event))
def test_definition_rooms_works_with_literals(self) -> None:
definition = {"rooms": ["!secretbase:unknown"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar", type="m.room.message", room_id="!secretbase:unknown"
)
self.assertTrue(Filter(self.hs, definition)._check(event))
def test_definition_rooms_works_with_unknowns(self) -> None:
definition = {"rooms": ["!secretbase:unknown"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!anothersecretbase:unknown",
@@ -233,7 +243,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
def test_definition_not_rooms_works_with_literals(self) -> None:
definition = {"not_rooms": ["!anothersecretbase:unknown"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!anothersecretbase:unknown",
@@ -242,7 +252,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
def test_definition_not_rooms_works_with_unknowns(self) -> None:
definition = {"not_rooms": ["!secretbase:unknown"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!anothersecretbase:unknown",
@@ -254,7 +264,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
"not_rooms": ["!secretbase:unknown"],
"rooms": ["!secretbase:unknown"],
}
event = MockEvent(
event = make_test_event(
sender="@foo:bar", type="m.room.message", room_id="!secretbase:unknown"
)
self.assertFalse(Filter(self.hs, definition)._check(event))
@@ -268,7 +278,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
"types": ["m.room.message", "muppets.kermit.*"],
"not_types": ["muppets.misspiggy.*"],
}
event = MockEvent(
event = make_test_event(
sender="@kermit:muppets", # yup
type="m.room.message", # yup
room_id="!stage:unknown", # yup
@@ -284,7 +294,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
"types": ["m.room.message", "muppets.kermit.*"],
"not_types": ["muppets.misspiggy.*"],
}
event = MockEvent(
event = make_test_event(
sender="@misspiggy:muppets", # nope
type="m.room.message", # yup
room_id="!stage:unknown", # yup
@@ -300,7 +310,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
"types": ["m.room.message", "muppets.kermit.*"],
"not_types": ["muppets.misspiggy.*"],
}
event = MockEvent(
event = make_test_event(
sender="@kermit:muppets", # yup
type="m.room.message", # yup
room_id="!piggyshouse:muppets", # nope
@@ -316,7 +326,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
"types": ["m.room.message", "muppets.kermit.*"],
"not_types": ["muppets.misspiggy.*"],
}
event = MockEvent(
event = make_test_event(
sender="@kermit:muppets", # yup
type="muppets.misspiggy.kisses", # nope
room_id="!stage:unknown", # yup
@@ -325,7 +335,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
def test_filter_labels(self) -> None:
definition = {"org.matrix.labels": ["#fun"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -334,7 +344,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
self.assertTrue(Filter(self.hs, definition)._check(event))
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -344,7 +354,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
self.assertFalse(Filter(self.hs, definition)._check(event))
# check it works with frozen dictionaries too
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -354,7 +364,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
def test_filter_not_labels(self) -> None:
definition = {"org.matrix.not_labels": ["#fun"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -363,7 +373,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
self.assertFalse(Filter(self.hs, definition)._check(event))
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -375,7 +385,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
@unittest.override_config({"experimental_features": {"msc3874_enabled": True}})
def test_filter_rel_type(self) -> None:
definition = {"org.matrix.msc3874.rel_types": ["m.thread"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -384,7 +394,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
self.assertFalse(Filter(self.hs, definition)._check(event))
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -393,7 +403,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
self.assertFalse(Filter(self.hs, definition)._check(event))
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -405,7 +415,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
@unittest.override_config({"experimental_features": {"msc3874_enabled": True}})
def test_filter_not_rel_type(self) -> None:
definition = {"org.matrix.msc3874.not_rel_types": ["m.thread"]}
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -414,7 +424,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
self.assertFalse(Filter(self.hs, definition)._check(event))
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -423,7 +433,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
self.assertTrue(Filter(self.hs, definition)._check(event))
event = MockEvent(
event = make_test_event(
sender="@foo:bar",
type="m.room.message",
room_id="!secretbase:unknown",
@@ -494,7 +504,9 @@ class FilteringTestCase(unittest.HomeserverTestCase):
user_id=user_id, user_filter=user_filter_json
)
)
event = MockEvent(sender="@foo:bar", type="m.room.topic", room_id="!foo:bar")
event = make_test_event(
sender="@foo:bar", type="m.room.topic", room_id="!foo:bar"
)
events = [event]
user_filter = self.get_success(
@@ -511,7 +523,7 @@ class FilteringTestCase(unittest.HomeserverTestCase):
user_id=user_id, user_filter=user_filter_json
)
)
event = MockEvent(
event = make_test_event(
sender="@foo:bar", type="org.matrix.custom.event", room_id="!foo:bar"
)
events = [event]
@@ -542,14 +554,14 @@ class FilteringTestCase(unittest.HomeserverTestCase):
def test_filter_relations(self) -> None:
events = [
# An event without a relation.
MockEvent(
make_test_event(
event_id="$no_relation",
sender="@foo:bar",
type="org.matrix.custom.event",
room_id="!foo:bar",
),
# An event with a relation.
MockEvent(
make_test_event(
event_id="$with_relation",
sender="@foo:bar",
type="org.matrix.custom.event",
+9 -8
View File
@@ -34,10 +34,11 @@ from synapse.crypto.event_signing import (
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.
@@ -70,7 +71,7 @@ class EventSigningTestCase(unittest.TestCase):
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)
@@ -103,7 +104,7 @@ class EventSigningTestCase(unittest.TestCase):
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)
@@ -141,7 +142,7 @@ class EventResigningTestCase(unittest.TestCase):
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]
@@ -171,7 +172,7 @@ class EventResigningTestCase(unittest.TestCase):
"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])
@@ -188,7 +189,7 @@ class EventResigningTestCase(unittest.TestCase):
"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,
@@ -207,7 +208,7 @@ class EventResigningTestCase(unittest.TestCase):
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,
@@ -215,7 +216,7 @@ class EventResigningTestCase(unittest.TestCase):
},
{
"name": "already signed with this key",
"event": make_event_from_dict(
"event": make_test_event(
{
**event_that_needs_resigning_dict,
"signatures": {
+3 -3
View File
@@ -33,7 +33,6 @@ from synapse.api.errors import SynapseError
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
@@ -43,6 +42,7 @@ from synapse.types import StreamToken, UserID, UserInfo, create_requester
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,
@@ -182,7 +182,7 @@ class AutoAcceptInvitesTestCase(FederatingHomeserverTestCase):
)
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"},
@@ -308,7 +308,7 @@ class AutoAcceptInvitesTestCase(FederatingHomeserverTestCase):
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"},
+57 -47
View File
@@ -26,7 +26,7 @@ from parameterized import parameterized
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,
@@ -42,31 +42,16 @@ from synapse.events.utils import (
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:
from synapse.server import HomeServer
def MockEvent(**kwargs: Any) -> EventBase:
if "event_id" not in kwargs:
kwargs["event_id"] = "fake_event_id"
if "type" not in kwargs:
kwargs["type"] = "fake_type"
if "content" not in kwargs:
kwargs["content"] = {}
# Move internal metadata out so we can call make_event properly
internal_metadata = kwargs.get("internal_metadata")
if internal_metadata is not None:
kwargs.pop("internal_metadata")
return make_event_from_dict(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"
)
@@ -74,7 +59,7 @@ class TestMaybeUpsertEventField(stdlib_unittest.TestCase):
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
@@ -83,7 +68,7 @@ class TestMaybeUpsertEventField(stdlib_unittest.TestCase):
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
@@ -95,6 +80,20 @@ class TestMaybeUpsertEventField(stdlib_unittest.TestCase):
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": {},
"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
@@ -105,8 +104,9 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
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:
@@ -123,9 +123,6 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
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",
@@ -134,12 +131,12 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
"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",
@@ -152,11 +149,11 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
"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",
@@ -625,7 +622,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
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",
@@ -679,7 +676,8 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_works_with_keys(self) -> None:
self.assertEqual(
self.serialize(
MockEvent(sender="@alice:localhost", room_id="!foo:bar"), ["room_id"]
make_test_event(sender="@alice:localhost", room_id="!foo:bar"),
["room_id"],
),
{"room_id": "!foo:bar"},
)
@@ -687,7 +685,7 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_works_with_nested_keys(self) -> None:
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
sender="@alice:localhost",
room_id="!foo:bar",
content={"body": "A message"},
@@ -700,7 +698,7 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_works_with_dot_keys(self) -> None:
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
sender="@alice:localhost",
room_id="!foo:bar",
content={"key.with.dots": {}},
@@ -713,7 +711,7 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_works_with_nested_dot_keys(self) -> None:
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
sender="@alice:localhost",
room_id="!foo:bar",
content={
@@ -729,7 +727,7 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_nops_with_unknown_keys(self) -> None:
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
sender="@alice:localhost",
room_id="!foo:bar",
content={"foo": "bar"},
@@ -742,7 +740,7 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_nops_with_non_dict_keys(self) -> None:
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
sender="@alice:localhost",
room_id="!foo:bar",
content={"foo": ["I", "am", "an", "array"]},
@@ -755,7 +753,7 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_nops_with_array_keys(self) -> None:
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
sender="@alice:localhost",
room_id="!foo:bar",
content={"foo": ["I", "am", "an", "array"]},
@@ -768,7 +766,7 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_all_fields_if_empty(self) -> None:
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
type="foo",
event_id="test",
room_id="!foo:bar",
@@ -782,6 +780,9 @@ class SerializeEventTestCase(HomeserverTestCase):
"room_id": "!foo:bar",
"content": {"foo": "bar"},
"unsigned": {},
"sender": "@test:test",
"user_id": "@test:test",
"origin_server_ts": 1,
},
)
@@ -799,12 +800,12 @@ class SerializeEventTestCase(HomeserverTestCase):
# Default behaviour should be *not* to include it
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
type="foo",
event_id="test",
room_id="!foo:bar",
content={"foo": "bar"},
internal_metadata={"soft_failed": True},
internal_metadata_dict={"soft_failed": True},
),
[],
),
@@ -814,18 +815,21 @@ class SerializeEventTestCase(HomeserverTestCase):
"room_id": "!foo:bar",
"content": {"foo": "bar"},
"unsigned": {},
"sender": "@test:test",
"user_id": "@test:test",
"origin_server_ts": 1,
},
)
# When asked though, we should set it
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
type="foo",
event_id="test",
room_id="!foo:bar",
content={"foo": "bar"},
internal_metadata={"soft_failed": True},
internal_metadata_dict={"soft_failed": True},
),
[],
True,
@@ -836,16 +840,19 @@ class SerializeEventTestCase(HomeserverTestCase):
"room_id": "!foo:bar",
"content": {"foo": "bar"},
"unsigned": {"io.element.synapse.soft_failed": True},
"sender": "@test:test",
"user_id": "@test:test",
"origin_server_ts": 1,
},
)
self.assertEqual(
self.serialize(
MockEvent(
make_test_event(
type="foo",
event_id="test",
room_id="!foo:bar",
content={"foo": "bar"},
internal_metadata={
internal_metadata_dict={
"soft_failed": True,
"policy_server_spammy": True,
},
@@ -862,6 +869,9 @@ class SerializeEventTestCase(HomeserverTestCase):
"io.element.synapse.soft_failed": True,
"io.element.synapse.policy_server_spammy": True,
},
"sender": "@test:test",
"user_id": "@test:test",
"origin_server_ts": 1,
},
)
@@ -896,7 +906,7 @@ class SerializeEventTestCase(HomeserverTestCase):
redaction_id = "$redaction_event_id"
event = MockEvent(
event = make_test_event(
type="foo",
event_id="test",
room_id="!foo:bar",
@@ -904,7 +914,7 @@ class SerializeEventTestCase(HomeserverTestCase):
)
event.internal_metadata.redacted_by = redaction_id
redaction_event = MockEvent(
redaction_event = make_test_event(
type="m.room.redaction",
event_id=redaction_id,
content={"redacts": "test"},
+3
View File
@@ -36,6 +36,9 @@ class FederationBaseTestCase(unittest.HomeserverTestCase):
"type": "m.room.message",
"room_id": "!r:domain",
"sender": f"@u:{self.hs.config.server.server_name}",
"auth_events": [],
"prev_events": [],
"depth": 1,
"signatures": {},
"unsigned": {"age_ts": 1000000},
}
@@ -73,6 +73,7 @@ class FederationClientTest(FederatingHomeserverTestCase):
"content": {"creator": self.creator},
"prev_events": [],
"auth_events": [],
"depth": 1,
"origin_server_ts": 500,
}
)
@@ -85,6 +86,7 @@ class FederationClientTest(FederatingHomeserverTestCase):
"content": {"membership": "join"},
"prev_events": [],
"auth_events": [],
"depth": 2,
"origin_server_ts": 600,
}
)
@@ -97,6 +99,7 @@ class FederationClientTest(FederatingHomeserverTestCase):
"content": {},
"prev_events": [],
"auth_events": [],
"depth": 3,
"origin_server_ts": 700,
}
)
@@ -33,11 +33,8 @@ from twisted.internet.testing import MemoryReactor
from synapse.api.constants import EventContentFields, EventTypes, Membership
from synapse.api.room_versions import RoomVersion, RoomVersions
from synapse.events import EventBase, make_event_from_dict
from synapse.events import EventBase
from synapse.events.utils import strip_event
from synapse.federation.federation_base import (
event_from_pdu_json,
)
from synapse.federation.transport.client import SendJoinResponse
from synapse.http.matrixfederationclient import (
ByteParser,
@@ -53,6 +50,7 @@ from synapse.types.handlers.sliding_sync import (
from synapse.util.clock import Clock
from tests import unittest
from tests.test_utils.event_builders import make_test_event, make_test_pdu_event
from tests.utils import test_timeout
logger = logging.getLogger(__name__)
@@ -80,9 +78,7 @@ def required_state_json_to_state_map(required_state: Any) -> StateMap[EventBase]
"Each event in `required_state` should have a string `state_key`"
)
state_map[(event_type, event_state_key)] = make_event_from_dict(
state_event_dict
)
state_map[(event_type, event_state_key)] = make_test_event(state_event_dict)
else:
# Yell because we're in a test and this is unexpected
raise AssertionError("`required_state` should be a list of event dicts")
@@ -195,7 +191,7 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
remote_room_id = f"!remote-room:{self.OTHER_SERVER_NAME}"
room_version = RoomVersions.V10
room_create_event = make_event_from_dict(
room_create_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"room_id": remote_room_id,
@@ -217,7 +213,7 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
room_version=room_version,
)
creator_membership_event = make_event_from_dict(
creator_membership_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"room_id": remote_room_id,
@@ -235,7 +231,7 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
)
# From the remote homeserver, invite user1 on the local homserver
user1_invite_membership_event = make_event_from_dict(
user1_invite_membership_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"room_id": remote_room_id,
@@ -297,7 +293,7 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
# Prevent tight-looping to allow the `test_timeout` to work
time.sleep(0.1)
user1_join_membership_event_template = make_event_from_dict(
user1_join_membership_event_template = make_test_event(
{
"room_id": remote_room_id,
"sender": local_user1_id,
@@ -377,7 +373,7 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
and parser is not None
):
# As the remote server, we need to sign the event before sending it back
user1_join_membership_event_signed = make_event_from_dict(
user1_join_membership_event_signed = make_test_event(
self.add_hashes_and_signatures_from_other_server(data),
room_version=room_version,
)
@@ -404,12 +400,12 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
if path.startswith("/_matrix/federation/v1/send/") and data is not None:
for pdu in data.get("pdus", []):
event = event_from_pdu_json(pdu, room_version)
event = make_test_pdu_event(pdu, room_version)
collected_pdus_from_hs1_federation_send.add(event.event_id)
# Just acknowledge everything hs1 is trying to send hs2
return {
event_from_pdu_json(pdu, room_version).event_id: {}
make_test_pdu_event(pdu, room_version).event_id: {}
for pdu in data.get("pdus", [])
}
@@ -521,12 +517,12 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
) -> JsonDict | T:
if path.startswith("/_matrix/federation/v1/send/") and data is not None:
for pdu in data.get("pdus", []):
event = event_from_pdu_json(pdu, room_version)
event = make_test_pdu_event(pdu, room_version)
collected_pdus_from_hs1_federation_send.add(event.event_id)
# Just acknowledge everything hs1 is trying to send hs2
return {
event_from_pdu_json(pdu, room_version).event_id: {}
make_test_pdu_event(pdu, room_version).event_id: {}
for pdu in data.get("pdus", [])
}
@@ -538,7 +534,7 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
self.federation_http_client.put_json.side_effect = put_json
# From the remote homeserver, invite user2 on the local homserver
user2_invite_membership_event = make_event_from_dict(
user2_invite_membership_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"room_id": remote_room_id,
+8 -8
View File
@@ -31,8 +31,7 @@ from synapse.api.errors import FederationError
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS, RoomVersions
from synapse.config.server import DEFAULT_ROOM_VERSION
from synapse.crypto.event_signing import add_hashes_and_signatures
from synapse.events import EventBase, make_event_from_dict
from synapse.federation.federation_base import event_from_pdu_json
from synapse.events import EventBase
from synapse.http.types import QueryParams
from synapse.logging.context import LoggingContext
from synapse.rest import admin
@@ -43,6 +42,7 @@ from synapse.types import JsonDict
from synapse.util.clock import Clock
from tests import unittest
from tests.test_utils.event_builders import make_test_event, make_test_pdu_event
from tests.unittest import override_config
logger = logging.getLogger(__name__)
@@ -95,7 +95,7 @@ class FederationServerTests(unittest.FederatingHomeserverTestCase):
def _create_acl_event(content: JsonDict) -> EventBase:
return make_event_from_dict(
return make_test_event(
{
"room_id": "!a:b",
"event_id": "$a:b",
@@ -147,7 +147,7 @@ class MessageAcceptTests(unittest.FederatingHomeserverTestCase):
# Join a remote user to the room that will attempt to send bad events
self.remote_bad_user_id = f"@baduser:{self.OTHER_SERVER_NAME}"
self.remote_bad_user_join_event = make_event_from_dict(
self.remote_bad_user_join_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"room_id": self.room_id,
@@ -212,7 +212,7 @@ class MessageAcceptTests(unittest.FederatingHomeserverTestCase):
)
# Now lie about an event's prev_events
lying_event = make_event_from_dict(
lying_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"room_id": self.room_id,
@@ -732,7 +732,7 @@ class StripUnsignedFromEventsTestCase(unittest.TestCase):
"auth_events": [],
"unsigned": {"malicious garbage": "hackz", "more warez": "more hackz"},
}
filtered_event = event_from_pdu_json(event1, RoomVersions.V1)
filtered_event = make_test_pdu_event(event1, RoomVersions.V1)
# Make sure unauthorized fields are stripped from unsigned
self.assertNotIn("more warez", filtered_event.unsigned)
@@ -754,7 +754,7 @@ class StripUnsignedFromEventsTestCase(unittest.TestCase):
},
}
filtered_event2 = event_from_pdu_json(event2, RoomVersions.V1, received_time=20)
filtered_event2 = make_test_pdu_event(event2, RoomVersions.V1, received_time=20)
self.assertIn("age_ts", filtered_event2.unsigned)
self.assertEqual(6, filtered_event2.unsigned["age_ts"])
self.assertNotIn("more warez", filtered_event2.unsigned)
@@ -779,7 +779,7 @@ class StripUnsignedFromEventsTestCase(unittest.TestCase):
"invite_room_state": [],
},
}
filtered_event3 = event_from_pdu_json(event3, RoomVersions.V1, received_time=20)
filtered_event3 = make_test_pdu_event(event3, RoomVersions.V1, received_time=20)
self.assertIn("age_ts", filtered_event3.unsigned)
# Invite_room_state field is only permitted in event type m.room.member
self.assertNotIn("invite_room_state", filtered_event3.unsigned)
+10
View File
@@ -36,7 +36,16 @@ class SendJoinParserTestCase(TestCase):
def test_two_writes(self) -> None:
"""Test that the parser can sensibly deserialise an input given in two slices."""
parser = SendJoinParser(RoomVersions.V1, True)
common_event_fields = {
"sender": "@user:example.org",
"depth": 1,
"origin_server_ts": 1,
"hashes": {},
"auth_events": [],
"prev_events": [],
}
parent_event = {
**common_event_fields,
"content": {
"see_room_version_spec": "The event format changes depending on the room version."
},
@@ -45,6 +54,7 @@ class SendJoinParserTestCase(TestCase):
"type": "m.room.minimal_pdu",
}
state = {
**common_event_fields,
"content": {
"see_room_version_spec": "The event format changes depending on the room version."
},
+13 -13
View File
@@ -35,8 +35,7 @@ from synapse.api.errors import (
SynapseError,
)
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase, make_event_from_dict
from synapse.federation.federation_base import event_from_pdu_json
from synapse.events import EventBase
from synapse.federation.federation_client import SendJoinResult
from synapse.rest import admin
from synapse.rest.client import login, room
@@ -45,6 +44,7 @@ from synapse.storage.databases.main.events_worker import EventCacheEntry
from synapse.util.clock import Clock
from tests import unittest
from tests.test_utils.event_builders import make_test_event, make_test_pdu_event
logger = logging.getLogger(__name__)
@@ -132,7 +132,7 @@ class FederationTestCase(unittest.FederatingHomeserverTestCase):
)
# build and send an event which will be rejected
ev = event_from_pdu_json(
ev = make_test_pdu_event(
{
"type": EventTypes.Message,
"content": {},
@@ -183,7 +183,7 @@ class FederationTestCase(unittest.FederatingHomeserverTestCase):
)
# build and send an event which will be rejected
ev = event_from_pdu_json(
ev = make_test_pdu_event(
{
"type": "org.matrix.test",
"state_key": "test_key",
@@ -227,7 +227,7 @@ class FederationTestCase(unittest.FederatingHomeserverTestCase):
room_version = self.get_success(self.store.get_room_version(room_id))
# Build an event to backfill
event = event_from_pdu_json(
event = make_test_pdu_event(
{
"type": EventTypes.Message,
"content": {"body": "hello world", "msgtype": "m.text"},
@@ -324,7 +324,7 @@ class FederationTestCase(unittest.FederatingHomeserverTestCase):
def create_invite() -> EventBase:
room_id = self.helper.create_room_as(room_creator=user_id, tok=tok)
room_version = self.get_success(self.store.get_room_version(room_id))
return event_from_pdu_json(
return make_test_pdu_event(
{
"type": EventTypes.Member,
"content": {"membership": "invite"},
@@ -386,7 +386,7 @@ class FederationTestCase(unittest.FederatingHomeserverTestCase):
class EventFromPduTestCase(TestCase):
def test_valid_json(self) -> None:
"""Valid JSON should be turned into an event."""
ev = event_from_pdu_json(
ev = make_test_pdu_event(
{
"type": EventTypes.Message,
"content": {"bool": True, "null": None, "int": 1, "str": "foobar"},
@@ -413,7 +413,7 @@ class EventFromPduTestCase(TestCase):
float("nan"),
]:
with self.assertRaises(SynapseError):
event_from_pdu_json(
make_test_pdu_event(
{
"type": EventTypes.Message,
"content": {"foo": value},
@@ -430,7 +430,7 @@ class EventFromPduTestCase(TestCase):
def test_invalid_nested(self) -> None:
"""List and dictionaries are recursively searched."""
with self.assertRaises(SynapseError):
event_from_pdu_json(
make_test_pdu_event(
{
"type": EventTypes.Message,
"content": {"foo": [{"bar": 2**56}]},
@@ -457,7 +457,7 @@ class PartialJoinTestCase(unittest.FederatingHomeserverTestCase):
room_id = "!room:example.com"
EVENT_CREATE = make_event_from_dict(
EVENT_CREATE = make_test_event(
{
"room_id": room_id,
"type": "m.room.create",
@@ -470,7 +470,7 @@ class PartialJoinTestCase(unittest.FederatingHomeserverTestCase):
},
room_version=RoomVersions.V10,
)
EVENT_CREATOR_MEMBERSHIP = make_event_from_dict(
EVENT_CREATOR_MEMBERSHIP = make_test_event(
{
"room_id": room_id,
"type": "m.room.member",
@@ -484,7 +484,7 @@ class PartialJoinTestCase(unittest.FederatingHomeserverTestCase):
},
room_version=RoomVersions.V10,
)
EVENT_INVITATION_MEMBERSHIP = make_event_from_dict(
EVENT_INVITATION_MEMBERSHIP = make_test_event(
{
"room_id": room_id,
"type": "m.room.member",
@@ -501,7 +501,7 @@ class PartialJoinTestCase(unittest.FederatingHomeserverTestCase):
},
room_version=RoomVersions.V10,
)
membership_event = make_event_from_dict(
membership_event = make_test_event(
{
"room_id": room_id,
"type": "m.room.member",
+13 -13
View File
@@ -28,7 +28,6 @@ from synapse.event_auth import (
check_state_dependent_auth_rules,
check_state_independent_auth_rules,
)
from synapse.events import make_event_from_dict
from synapse.events.snapshot import EventContext
from synapse.federation.transport.client import StateRequestResponse
from synapse.logging.context import LoggingContext
@@ -42,6 +41,7 @@ from synapse.util.clock import Clock
from tests import unittest
from tests.test_utils import event_injection
from tests.test_utils.event_builders import make_test_event
class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
@@ -127,7 +127,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
# mock up a load of state events which we are missing
state_events = [
make_event_from_dict(
make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "test_state_type",
@@ -154,7 +154,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
# mock up a prev event.
# Depending on the test, we either persist this upfront (as an outlier),
# or let the server request it.
prev_event = make_event_from_dict(
prev_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "test_regular_type",
@@ -191,7 +191,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
self.mock_federation_transport_client.get_event.side_effect = get_event
# mock up a regular event to pass into _process_pulled_event
pulled_event = make_event_from_dict(
pulled_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "test_regular_type",
@@ -301,7 +301,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
)
)
pulled_event = make_event_from_dict(
pulled_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "test_regular_type",
@@ -421,7 +421,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
member_event.event_id,
]
pulled_event = make_event_from_dict(
pulled_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "test_regular_type",
@@ -524,7 +524,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
# We purposely don't run `add_hashes_and_signatures_from_other_server`
# over this because we want the signature check to fail.
pulled_event_without_signatures = make_event_from_dict(
pulled_event_without_signatures = make_test_event(
{
"type": "test_regular_type",
"room_id": room_id,
@@ -540,7 +540,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
# Create a regular event that should pass except for the
# `pulled_event_without_signatures` in the `prev_event`.
pulled_event = make_event_from_dict(
pulled_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "test_regular_type",
@@ -720,7 +720,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
]
# Create a regular event that should process
pulled_event = make_event_from_dict(
pulled_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "test_regular_type",
@@ -878,7 +878,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
# accepted, but the local homeserver will reject.
next_depth = 100
next_timestamp = other_member_event.origin_server_ts + 100
rejected_power_levels_event = make_event_from_dict(
rejected_power_levels_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "m.room.power_levels",
@@ -927,7 +927,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
# Then we create a kick event for a local user that cites the rejected power
# levels event in its auth events. The kick event will be rejected solely
# because of the rejected auth event and would otherwise be accepted.
rejected_kick_event = make_event_from_dict(
rejected_kick_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "m.room.member",
@@ -1042,7 +1042,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
# Create a missing event, so that the local homeserver has to do a `/state` or
# `/state_ids` request to pull state from the remote homeserver.
missing_event = make_event_from_dict(
missing_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "m.room.message",
@@ -1067,7 +1067,7 @@ class FederationEventHandlerTests(unittest.FederatingHomeserverTestCase):
# The pulled event has two prev events, one of which is missing. We will make a
# `/state` or `/state_ids` request to the remote homeserver to ask it for the
# state before the missing prev event.
pulled_event = make_event_from_dict(
pulled_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
{
"type": "m.room.message",
+4 -6
View File
@@ -9,9 +9,6 @@ from synapse.api.constants import AccountDataTypes, EventTypes, Membership
from synapse.api.errors import Codes, LimitExceededError, SynapseError
from synapse.crypto.event_signing import add_hashes_and_signatures
from synapse.events import FrozenEventV3
from synapse.federation.federation_base import (
event_from_pdu_json,
)
from synapse.federation.federation_client import SendJoinResult
from synapse.server import HomeServer
from synapse.types import UserID, create_requester
@@ -19,6 +16,7 @@ from synapse.util.clock import Clock
from tests.replication._base import BaseMultiWorkerStreamTestCase
from tests.server import make_request
from tests.test_utils.event_builders import make_test_pdu_event
from tests.unittest import (
FederatingHomeserverTestCase,
HomeserverTestCase,
@@ -549,7 +547,7 @@ class TestMSC4155InviteFiltering(FederatingHomeserverTestCase):
)
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"},
@@ -595,7 +593,7 @@ class TestMSC4155InviteFiltering(FederatingHomeserverTestCase):
)
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"},
@@ -710,7 +708,7 @@ class TestMSC4380InviteBlocking(FederatingHomeserverTestCase):
)
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"},
+10 -9
View File
@@ -22,7 +22,7 @@ from twisted.internet.testing import MemoryReactor
from synapse.api.constants import EventTypes
from synapse.api.errors import HttpResponseException, SynapseError
from synapse.crypto.event_signing import compute_event_signature
from synapse.events import EventBase, make_event_from_dict
from synapse.events import EventBase
from synapse.handlers.room_policy import POLICY_SERVER_KEY_ID
from synapse.rest import admin
from synapse.rest.client import filter, login, room, sync
@@ -32,6 +32,7 @@ from synapse.util.clock import Clock
from tests import unittest
from tests.test_utils import event_injection
from tests.test_utils.event_builders import make_test_event
class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
@@ -75,7 +76,7 @@ class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
self.signing_key = signedjson.key.generate_signing_key("policy_server")
# Create some sample events
self.spammy_event = make_event_from_dict(
self.spammy_event = make_test_event(
room_version=room_version,
internal_metadata_dict={},
event_dict={
@@ -88,7 +89,7 @@ class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
},
},
)
self.not_spammy_event = make_event_from_dict(
self.not_spammy_event = make_test_event(
room_version=room_version,
internal_metadata_dict={},
event_dict={
@@ -272,7 +273,7 @@ class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
def test_signed_event_is_not_spam(self) -> None:
verify_key_str = encode_verify_key_base64(get_verify_key(self.signing_key))
self._add_policy_server_to_room(public_key=verify_key_str)
event = make_event_from_dict(
event = make_test_event(
room_version=self.room_version,
internal_metadata_dict={},
event_dict={
@@ -302,7 +303,7 @@ class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
def test_ask_policy_server_to_sign_event_ok(self) -> None:
verify_key_str = encode_verify_key_base64(get_verify_key(self.signing_key))
self._add_policy_server_to_room(public_key=verify_key_str)
event = make_event_from_dict(
event = make_test_event(
room_version=self.room_version,
internal_metadata_dict={},
event_dict={
@@ -324,7 +325,7 @@ class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
def test_ask_policy_server_to_sign_event_refuses(self) -> None:
verify_key_str = encode_verify_key_base64(get_verify_key(self.signing_key))
self._add_policy_server_to_room(public_key=verify_key_str)
event = make_event_from_dict(
event = make_test_event(
room_version=self.room_version,
internal_metadata_dict={},
event_dict={
@@ -353,7 +354,7 @@ class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
def test_ask_policy_server_to_sign_event_cannot_reach(self) -> None:
verify_key_str = encode_verify_key_base64(get_verify_key(self.signing_key))
self._add_policy_server_to_room(public_key=verify_key_str)
event = make_event_from_dict(
event = make_test_event(
room_version=self.room_version,
internal_metadata_dict={},
event_dict={
@@ -379,7 +380,7 @@ class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
verify_key_str = encode_verify_key_base64(get_verify_key(self.signing_key))
self._add_policy_server_to_room(public_key=verify_key_str)
self.mock_federation_transport_client.ask_policy_server_to_sign_event.side_effect = self.policy_server_signs_event_with_wrong_key
unverified_event = make_event_from_dict(
unverified_event = make_test_event(
room_version=self.room_version,
internal_metadata_dict={},
event_dict={
@@ -398,7 +399,7 @@ class RoomPolicyTestCase(unittest.FederatingHomeserverTestCase):
)
self.assertEqual(len(unverified_event.signatures), 1)
verified_event = make_event_from_dict(
verified_event = make_test_event(
room_version=self.room_version,
internal_metadata_dict={},
event_dict={
+2 -2
View File
@@ -35,7 +35,6 @@ from synapse.api.constants import (
)
from synapse.api.errors import AuthError, NotFoundError, SynapseError
from synapse.api.room_versions import RoomVersions
from synapse.events import make_event_from_dict
from synapse.federation.transport.client import TransportLayerClient
from synapse.handlers.room_summary import _child_events_comparison_key, _RoomEntry
from synapse.rest import admin
@@ -45,6 +44,7 @@ from synapse.types import JsonDict, UserID, create_requester
from synapse.util.clock import Clock
from tests import unittest
from tests.test_utils.event_builders import make_test_event
from tests.unittest import override_config
@@ -217,7 +217,7 @@ class SpaceSummaryTestCase(unittest.HomeserverTestCase):
# Poke an invite over federation into the database.
fed_handler = self.hs.get_federation_handler()
fed_hostname = UserID.from_string(from_user).domain
event = make_event_from_dict(
event = make_test_event(
{
"room_id": room_id,
"event_id": "!abcd:" + fed_hostname,
+3 -3
View File
@@ -32,7 +32,6 @@ from synapse.api.filtering import FilterCollection, Filtering
from synapse.api.room_versions import RoomVersion, RoomVersions
from synapse.events import EventBase
from synapse.events.snapshot import EventContext
from synapse.federation.federation_base import event_from_pdu_json
from synapse.handlers.sync import (
SyncConfig,
SyncRequestKey,
@@ -55,6 +54,7 @@ from synapse.util.duration import Duration
import tests.unittest
import tests.utils
from tests.test_utils.event_builders import make_test_pdu_event
_request_key = 0
@@ -913,7 +913,7 @@ class SyncTestCase(tests.unittest.HomeserverTestCase):
prev_events = self.get_success(self.store.get_prev_events_for_room(room_id))
# create a call invite event
call_event = event_from_pdu_json(
call_event = make_test_pdu_event(
{
"type": EventTypes.CallInvite,
"content": {},
@@ -961,7 +961,7 @@ class SyncTestCase(tests.unittest.HomeserverTestCase):
priv_prev_events = self.get_success(
self.store.get_prev_events_for_room(private_room_id)
)
private_call_event = event_from_pdu_json(
private_call_event = make_test_pdu_event(
{
"type": EventTypes.CallInvite,
"content": {},
+4 -3
View File
@@ -23,11 +23,12 @@ from typing import Iterable, cast
from synapse.api.constants import EventTypes, Membership
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase, FrozenEvent
from synapse.events import EventBase
from synapse.push.presentable_names import calculate_room_name
from synapse.types import StateKey, StateMap
from tests import unittest
from tests.test_utils.event_builders import make_test_event
class MockDataStore:
@@ -44,7 +45,7 @@ class MockDataStore:
self._events = {}
for i, (event_id, content) in enumerate(events):
self._events[event_id] = FrozenEvent(
self._events[event_id] = make_test_event(
{
"event_id": "$event_id",
"type": event_id[0],
@@ -59,7 +60,7 @@ class MockDataStore:
async def get_event(
self, event_id: str, allow_none: bool = False
) -> FrozenEvent | None:
) -> EventBase | None:
assert allow_none, "Mock not configured for allow_none = False"
# Decode the state key from the event ID.
+17 -5
View File
@@ -27,7 +27,6 @@ import synapse.rest.admin
from synapse.api.constants import EventTypes, HistoryVisibility, Membership
from synapse.api.room_versions import RoomVersions
from synapse.appservice import ApplicationService
from synapse.events import FrozenEvent, make_event_from_dict
from synapse.push.bulk_push_rule_evaluator import _flatten_dict
from synapse.push.httppusher import tweaks_for_actions
from synapse.rest import admin
@@ -40,6 +39,7 @@ from synapse.util.clock import Clock
from synapse.util.frozenutils import freeze
from tests import unittest
from tests.test_utils.event_builders import make_test_event
from tests.test_utils.event_injection import create_event, inject_member_event
@@ -81,7 +81,7 @@ class FlattenDictTestCase(unittest.TestCase):
def test_event(self) -> None:
"""Events can also be flattened."""
event = make_event_from_dict(
event = make_test_event(
{
"room_id": "!test:test",
"type": "m.room.message",
@@ -103,6 +103,10 @@ class FlattenDictTestCase(unittest.TestCase):
"room_id": "!test:test",
"sender": "@alice:test",
"type": "m.room.message",
"depth": 1,
"origin_server_ts": 1,
"auth_events": [],
"prev_events": [],
}
self.assertEqual(expected, _flatten_dict(event))
@@ -121,24 +125,32 @@ class FlattenDictTestCase(unittest.TestCase):
}
# For a current room version, there's no special behavior.
event = make_event_from_dict(event_dict, room_version=RoomVersions.V8)
event = make_test_event(event_dict, room_version=RoomVersions.V8)
expected = {
"room_id": "!test:test",
"sender": "@alice:test",
"type": "m.room.message",
"content.org\\.matrix\\.msc1767\\.markup": [],
"depth": 1,
"origin_server_ts": 1,
"auth_events": [],
"prev_events": [],
}
self.assertEqual(expected, _flatten_dict(event))
# For a room version with extensible events, they parse out the text/plain
# to a content.body property.
event = make_event_from_dict(event_dict, room_version=RoomVersions.MSC1767v10)
event = make_test_event(event_dict, room_version=RoomVersions.MSC1767v10)
expected = {
"content.body": "hello world!",
"room_id": "!test:test",
"sender": "@alice:test",
"type": "m.room.message",
"content.org\\.matrix\\.msc1767\\.markup": [],
"depth": 1,
"origin_server_ts": 1,
"auth_events": [],
"prev_events": [],
}
self.assertEqual(expected, _flatten_dict(event))
@@ -152,7 +164,7 @@ class PushRuleEvaluatorTestCase(unittest.TestCase):
msc4210: bool = False,
msc4306: bool = False,
) -> PushRuleEvaluator:
event = FrozenEvent(
event = make_test_event(
{
"event_id": "$event_id",
"type": "m.room.history_visibility",
@@ -30,7 +30,7 @@ from synapse.api.constants import (
RoomTypes,
)
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase, StrippedStateEvent, make_event_from_dict
from synapse.events import EventBase, StrippedStateEvent
from synapse.events.snapshot import EventContext
from synapse.handlers.sliding_sync import StateValues
from synapse.rest.client import account_data, devices, login, receipts, room, sync
@@ -47,6 +47,7 @@ from synapse.util.stringutils import random_string
from tests import unittest
from tests.server import FakeChannel, TimedOutException
from tests.test_utils.event_builders import make_test_event
from tests.test_utils.event_injection import create_event
logger = logging.getLogger(__name__)
@@ -308,7 +309,7 @@ class SlidingSyncBase(unittest.HomeserverTestCase):
"invite_room_state": serialized_stripped_state_events
}
invite_event = make_event_from_dict(
invite_event = make_test_event(
invite_event_dict,
room_version=RoomVersions.V10,
)
@@ -532,6 +532,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
"origin_server_ts": self.clock.time_msec(),
"prev_events": [],
"auth_events": [],
"hashes": {},
"signatures": {},
"unsigned": {},
}
+13 -12
View File
@@ -33,7 +33,7 @@ from twisted.internet import defer
from synapse.api.constants import EventTypes, JoinRules, Membership
from synapse.api.room_versions import RoomVersions
from synapse.event_auth import auth_types_for_event
from synapse.events import EventBase, make_event_from_dict
from synapse.events import EventBase
from synapse.state.v2 import (
_get_auth_chain_difference,
_get_power_level_for_sender,
@@ -45,6 +45,7 @@ from synapse.types import EventID, StateMap
from synapse.util.duration import Duration
from tests import unittest
from tests.test_utils.event_builders import make_test_event
ALICE = "@alice:example.com"
BOB = "@bob:example.com"
@@ -119,7 +120,7 @@ class FakeEvent:
if self.state_key is not None:
event_dict["state_key"] = self.state_key
return make_event_from_dict(event_dict)
return make_test_event(event_dict)
# All graphs start with this set of events
@@ -878,7 +879,7 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
on room version"""
store = TestStateResolutionStore({})
for room_version in [RoomVersions.V10, RoomVersions.V11]:
create_event = make_event_from_dict(
create_event = make_test_event(
{
"room_id": ROOM_ID,
"sender": ALICE,
@@ -894,9 +895,9 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
else {}
),
},
room_version,
room_version=room_version,
)
member_event = make_event_from_dict(
member_event = make_test_event(
{
"room_id": ROOM_ID,
"sender": ALICE,
@@ -908,9 +909,9 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
"auth_events": [create_event.event_id],
"prev_events": [create_event.event_id],
},
room_version,
room_version=room_version,
)
pl_event = make_event_from_dict(
pl_event = make_test_event(
{
"room_id": ROOM_ID,
"sender": ALICE,
@@ -926,7 +927,7 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
"auth_events": [create_event.event_id, member_event.event_id],
"prev_events": [member_event.event_id],
},
room_version,
room_version=room_version,
)
event_map = {
@@ -940,7 +941,7 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
CHARLIE: 10,
}
for user_id, want_pl in want_pls.items():
test_event = make_event_from_dict(
test_event = make_test_event(
{
"room_id": ROOM_ID,
"sender": user_id,
@@ -954,7 +955,7 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
],
"prev_events": [pl_event.event_id],
},
room_version,
room_version=room_version,
)
event_map[test_event.event_id] = test_event
got_pl = self.successResultOf(
@@ -977,7 +978,7 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
CHARLIE: 0,
}
for user_id, want_pl in want_pls.items():
test_event = make_event_from_dict(
test_event = make_test_event(
{
"room_id": ROOM_ID,
"sender": user_id,
@@ -991,7 +992,7 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
],
"prev_events": [pl_event.event_id],
},
room_version,
room_version=room_version,
)
got_pl = self.successResultOf(
defer.ensureDeferred(
+1
View File
@@ -495,6 +495,7 @@ class StateResV21TestCase(unittest.HomeserverTestCase):
"prev_events": prev_events,
"auth_events": auth_events,
"origin_server_ts": monotonic_timestamp(),
"hashes": {},
}
if event_type != EventTypes.Create:
if room_id is None:
@@ -28,7 +28,6 @@ from twisted.internet.defer import CancelledError, Deferred, ensureDeferred
from twisted.internet.testing import MemoryReactor
from synapse.api.room_versions import EventFormatVersions, RoomVersions
from synapse.events import make_event_from_dict
from synapse.logging.context import LoggingContext
from synapse.rest import admin
from synapse.rest.client import login, room
@@ -42,6 +41,7 @@ from synapse.util.async_helpers import yieldable_gather_results
from synapse.util.clock import Clock
from tests import unittest
from tests.test_utils.event_builders import make_test_event
from tests.test_utils.event_injection import create_event, inject_event
@@ -377,7 +377,7 @@ class DatabaseOutageTestCase(unittest.HomeserverTestCase):
"type": f"test {idx}",
"room_id": self.room_id,
}
event = make_event_from_dict(event_json, room_version=RoomVersions.V4)
event = make_test_event(event_json, room_version=RoomVersions.V4)
event_id = event.event_id
self.get_success(
self.store.db_pool.simple_upsert(
@@ -400,7 +400,7 @@ class DatabaseOutageTestCase(unittest.HomeserverTestCase):
{"event_id": event_id},
{
"room_id": self.room_id,
"json": json.dumps(event_json),
"json": json.dumps(event.get_dict()),
"internal_metadata": "{}",
"format_version": EventFormatVersions.ROOM_V4_PLUS,
},
+11 -11
View File
@@ -26,13 +26,13 @@ from twisted.internet.testing import MemoryReactor
from synapse.api.constants import EventTypes, Membership
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase
from synapse.federation.federation_base import event_from_pdu_json
from synapse.rest import admin
from synapse.rest.client import login, room
from synapse.server import HomeServer
from synapse.types import StateMap
from synapse.util.clock import Clock
from tests.test_utils.event_builders import make_test_pdu_event
from tests.unittest import HomeserverTestCase
logger = logging.getLogger(__name__)
@@ -142,7 +142,7 @@ class ExtremPruneTestCase(HomeserverTestCase):
# Fudge a remote event and persist it. This will be the extremity before
# the gap.
self.remote_event_1 = event_from_pdu_json(
self.remote_event_1 = make_test_pdu_event(
{
"type": EventTypes.Message,
"state_key": "@user:other",
@@ -198,7 +198,7 @@ class ExtremPruneTestCase(HomeserverTestCase):
# Fudge a second event which points to an event we don't have. This is a
# state event so that the state changes (otherwise we won't prune the
# extremity as they'll have the same state group).
remote_event_2 = event_from_pdu_json(
remote_event_2 = make_test_pdu_event(
{
"type": EventTypes.Member,
"state_key": "@user:other",
@@ -237,7 +237,7 @@ class ExtremPruneTestCase(HomeserverTestCase):
)
# Fudge a second event which points to an event we don't have.
remote_event_2 = event_from_pdu_json(
remote_event_2 = make_test_pdu_event(
{
"type": EventTypes.Message,
"state_key": "@user:other",
@@ -286,7 +286,7 @@ class ExtremPruneTestCase(HomeserverTestCase):
# Fudge a second event which points to an event we don't have. This is a
# state event so that the state changes (otherwise we won't prune the
# extremity as they'll have the same state group).
remote_event_2 = event_from_pdu_json(
remote_event_2 = make_test_pdu_event(
{
"type": EventTypes.Member,
"state_key": "@user:other2",
@@ -322,7 +322,7 @@ class ExtremPruneTestCase(HomeserverTestCase):
# Fudge a second event which points to an event we don't have. This is a
# state event so that the state changes (otherwise we won't prune the
# extremity as they'll have the same state group).
remote_event_2 = event_from_pdu_json(
remote_event_2 = make_test_pdu_event(
{
"type": EventTypes.Member,
"state_key": "@user:other2",
@@ -367,7 +367,7 @@ class ExtremPruneTestCase(HomeserverTestCase):
# Fudge a second event which points to an event we don't have. This is a
# state event so that the state changes (otherwise we won't prune the
# extremity as they'll have the same state group).
remote_event_2 = event_from_pdu_json(
remote_event_2 = make_test_pdu_event(
{
"type": EventTypes.Member,
"state_key": "@user:other2",
@@ -415,7 +415,7 @@ class ExtremPruneTestCase(HomeserverTestCase):
# Fudge a second event which points to an event we don't have. This is a
# state event so that the state changes (otherwise we won't prune the
# extremity as they'll have the same state group).
remote_event_2 = event_from_pdu_json(
remote_event_2 = make_test_pdu_event(
{
"type": EventTypes.Member,
"state_key": "@user:other2",
@@ -455,7 +455,7 @@ class ExtremPruneTestCase(HomeserverTestCase):
# Fudge a second event which points to an event we don't have. This is a
# state event so that the state changes (otherwise we won't prune the
# extremity as they'll have the same state group).
remote_event_2 = event_from_pdu_json(
remote_event_2 = make_test_pdu_event(
{
"type": EventTypes.Member,
"state_key": "@user:other2",
@@ -514,7 +514,7 @@ class InvalideUsersInRoomCacheTestCase(HomeserverTestCase):
# Fudge a join event for a remote user.
remote_user = "@user:other"
remote_event_1 = event_from_pdu_json(
remote_event_1 = make_test_pdu_event(
{
"type": EventTypes.Member,
"state_key": remote_user,
@@ -561,7 +561,7 @@ class InvalideUsersInRoomCacheTestCase(HomeserverTestCase):
# Fudge a join event for a remote user.
remote_user = "@user:other"
remote_event_1 = event_from_pdu_json(
remote_event_1 = make_test_pdu_event(
{
"type": EventTypes.Member,
"state_key": remote_user,
+2 -4
View File
@@ -19,15 +19,13 @@ from twisted.test.proto_helpers import MemoryReactor
from synapse.api.constants import EventTypes
from synapse.api.errors import SynapseError
from synapse.api.room_versions import RoomVersions
from synapse.events import (
make_event_from_dict,
)
from synapse.events.py_protocol import MSC4242Event, supports_msc4242_state_dag
from synapse.events.snapshot import EventContext
from synapse.rest.client import room
from synapse.server import HomeServer
from synapse.util.clock import Clock
from tests.test_utils.event_builders import make_test_event
from tests.unittest import HomeserverTestCase, override_config
@@ -156,7 +154,7 @@ class MSC4242EventPersistenceStateDagsStoreTestCase(HomeserverTestCase):
prev_state_events: list[str],
rejected: bool = False,
) -> tuple[MSC4242Event, EventContext]:
ev = make_event_from_dict(
ev = make_test_event(
{
"prev_state_events": prev_state_events,
"content": {
+3 -2
View File
@@ -27,7 +27,7 @@ from twisted.internet.testing import MemoryReactor
from synapse.api.constants import EventContentFields, EventTypes, Membership, RoomTypes
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase, StrippedStateEvent, make_event_from_dict
from synapse.events import EventBase, StrippedStateEvent
from synapse.events.snapshot import EventContext
from synapse.rest import admin
from synapse.rest.client import login, room, sync
@@ -46,6 +46,7 @@ from synapse.types.storage import _BackgroundUpdates
from synapse.util.clock import Clock
from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase
from tests.test_utils.event_builders import make_test_event
from tests.test_utils.event_injection import create_event
logger = logging.getLogger(__name__)
@@ -240,7 +241,7 @@ class SlidingSyncTablesTestCaseBase(SlidingSyncBase):
"prev_events": [],
}
kick_event = make_event_from_dict(
kick_event = make_test_event(
kick_event_dict,
room_version=RoomVersions.V10,
)
+24 -23
View File
@@ -29,11 +29,12 @@ from synapse import event_auth
from synapse.api.constants import EventContentFields, RejectedReason
from synapse.api.errors import AuthError, SynapseError
from synapse.api.room_versions import EventFormatVersions, RoomVersion, RoomVersions
from synapse.events import EventBase, event_exists_in_state_dag, make_event_from_dict
from synapse.events import EventBase, event_exists_in_state_dag
from synapse.storage.databases.main.events_worker import EventRedactBehaviour
from synapse.types import JsonDict, get_domain_from_id
from tests.test_utils import get_awaitable_result
from tests.test_utils.event_builders import make_test_event
class _StubEventSourceStore:
@@ -128,7 +129,7 @@ class EventAuthTestCase(unittest.TestCase):
# we make both a good event and a bad event, to check that we are rejecting
# the bad event for the reason we think we are.
good_event = make_event_from_dict(
good_event = make_test_event(
{
"room_id": TEST_ROOM_ID,
"type": "m.room.create",
@@ -143,7 +144,7 @@ class EventAuthTestCase(unittest.TestCase):
},
room_version=RoomVersions.V9,
)
bad_event = make_event_from_dict(
bad_event = make_test_event(
{**good_event.get_dict(), "prev_events": ["$fakeevent"]},
room_version=RoomVersions.V9,
)
@@ -387,7 +388,7 @@ class EventAuthTestCase(unittest.TestCase):
creator = "@creator:example.com"
room_version = RoomVersions.MSC4242v12
create_event = make_event_from_dict(
create_event = make_test_event(
{
"type": "m.room.create",
"sender": creator,
@@ -398,7 +399,7 @@ class EventAuthTestCase(unittest.TestCase):
},
room_version,
)
create_event_2 = make_event_from_dict(
create_event_2 = make_test_event(
{
"type": "m.room.create",
"sender": creator,
@@ -411,7 +412,7 @@ class EventAuthTestCase(unittest.TestCase):
)
room_id = create_event.room_id
another_room_id = create_event_2.room_id
join_event = make_event_from_dict(
join_event = make_test_event(
{
"room_id": room_id,
"type": "m.room.member",
@@ -424,7 +425,7 @@ class EventAuthTestCase(unittest.TestCase):
room_version,
{"calculated_auth_event_ids": [create_event.event_id]},
)
event_in_another_room = make_event_from_dict(
event_in_another_room = make_test_event(
{
"room_id": another_room_id,
"type": "m.room.join_rules",
@@ -437,7 +438,7 @@ class EventAuthTestCase(unittest.TestCase):
room_version,
{"calculated_auth_event_ids": [create_event.event_id, join_event.event_id]},
)
msg_event = make_event_from_dict(
msg_event = make_test_event(
{
"room_id": room_id,
"type": "m.room.message",
@@ -449,7 +450,7 @@ class EventAuthTestCase(unittest.TestCase):
room_version,
{"calculated_auth_event_ids": [create_event.event_id, join_event.event_id]},
)
rejected_event = make_event_from_dict(
rejected_event = make_test_event(
{
"room_id": room_id,
"type": "m.room.name",
@@ -470,7 +471,7 @@ class EventAuthTestCase(unittest.TestCase):
RejectingTestCase(
name="create event has prev_state_events",
events_in_store=[],
test_event=make_event_from_dict(
test_event=make_test_event(
{
"type": "m.room.create",
"sender": creator,
@@ -486,7 +487,7 @@ class EventAuthTestCase(unittest.TestCase):
RejectingTestCase(
name="prev_state_event belongs in a different room",
events_in_store=[create_event, join_event, event_in_another_room],
test_event=make_event_from_dict(
test_event=make_test_event(
{
"room_id": room_id,
"type": "m.room.name",
@@ -508,7 +509,7 @@ class EventAuthTestCase(unittest.TestCase):
RejectingTestCase(
name="prev_state_event is a message event",
events_in_store=[create_event, join_event, msg_event],
test_event=make_event_from_dict(
test_event=make_test_event(
{
"room_id": room_id,
"type": "m.room.name",
@@ -530,7 +531,7 @@ class EventAuthTestCase(unittest.TestCase):
RejectingTestCase(
name="prev_state_event was rejected",
events_in_store=[create_event, join_event, rejected_event],
test_event=make_event_from_dict(
test_event=make_test_event(
{
"room_id": room_id,
"type": "m.room.name",
@@ -892,7 +893,7 @@ class EventAuthTestCase(unittest.TestCase):
def test_room_v10_rejects_string_power_levels(self) -> None:
pl_event_content = {"users_default": "42"}
pl_event = make_event_from_dict(
pl_event = make_test_event(
{
"room_id": TEST_ROOM_ID,
**_maybe_get_event_id_dict_for_room_version(RoomVersions.V10),
@@ -906,7 +907,7 @@ class EventAuthTestCase(unittest.TestCase):
)
pl_event2_content = {"events": {"m.room.name": "42", "m.room.power_levels": 42}}
pl_event2 = make_event_from_dict(
pl_event2 = make_test_event(
{
"room_id": TEST_ROOM_ID,
**_maybe_get_event_id_dict_for_room_version(RoomVersions.V10),
@@ -936,7 +937,7 @@ class EventAuthTestCase(unittest.TestCase):
"""
def create_event(pl_event_content: dict[str, Any]) -> EventBase:
return make_event_from_dict(
return make_test_event(
{
"room_id": TEST_ROOM_ID,
**_maybe_get_event_id_dict_for_room_version(RoomVersions.V10),
@@ -1049,7 +1050,7 @@ class EventAuthTestCase(unittest.TestCase):
"signatures": {"test.com": {"ed25519:0": "some9signature"}},
}
base.update(ev)
event = make_event_from_dict(base, RoomVersions.V10)
event = make_test_event(base, RoomVersions.V10)
got = event_exists_in_state_dag(event)
self.assertEqual(
got, should_exist, f"{ev} should_exist={should_exist} but got {got}"
@@ -1068,7 +1069,7 @@ def _create_event(
room_version: RoomVersion,
user_id: str,
) -> EventBase:
return make_event_from_dict(
return make_test_event(
{
"room_id": TEST_ROOM_ID,
**_maybe_get_event_id_dict_for_room_version(room_version),
@@ -1089,7 +1090,7 @@ def _member_event(
sender: str | None = None,
additional_content: dict | None = None,
) -> EventBase:
return make_event_from_dict(
return make_test_event(
{
"room_id": TEST_ROOM_ID,
**_maybe_get_event_id_dict_for_room_version(room_version),
@@ -1122,7 +1123,7 @@ def _power_levels_event(
sender: str,
content: JsonDict,
) -> EventBase:
return make_event_from_dict(
return make_test_event(
{
"room_id": TEST_ROOM_ID,
**_maybe_get_event_id_dict_for_room_version(room_version),
@@ -1145,7 +1146,7 @@ def _alias_event(room_version: RoomVersion, sender: str, **kwargs: Any) -> Event
"content": {"aliases": []},
}
data.update(**kwargs)
return make_event_from_dict(data, room_version=room_version)
return make_test_event(data, room_version=room_version)
def _build_auth_dict_for_room_version(
@@ -1164,7 +1165,7 @@ def _random_state_event(
) -> EventBase:
if auth_events is None:
auth_events = []
return make_event_from_dict(
return make_test_event(
{
"room_id": TEST_ROOM_ID,
**_maybe_get_event_id_dict_for_room_version(room_version),
@@ -1181,7 +1182,7 @@ def _random_state_event(
def _join_rules_event(
room_version: RoomVersion, sender: str, join_rule: str
) -> EventBase:
return make_event_from_dict(
return make_test_event(
{
"room_id": TEST_ROOM_ID,
**_maybe_get_event_id_dict_for_room_version(room_version),
+3 -2
View File
@@ -32,7 +32,7 @@ from twisted.internet import defer
from synapse.api.auth.internal import InternalAuth
from synapse.api.constants import EventTypes, Membership
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase, make_event_from_dict
from synapse.events import EventBase
from synapse.events.snapshot import EventContext
from synapse.state import StateHandler, StateResolutionHandler, _make_state_cache_entry
from synapse.types import JsonDict, MutableStateMap, StateMap
@@ -41,6 +41,7 @@ from synapse.util.macaroons import MacaroonGenerator
from tests import unittest
from tests.server import get_clock
from tests.test_utils.event_builders import make_test_event
from tests.utils import default_config
_next_event_id = 1000
@@ -82,7 +83,7 @@ def create_event(
d.update(kwargs)
return make_event_from_dict(d)
return make_test_event(d)
class _DummyStore:
+117
View File
@@ -0,0 +1,117 @@
#
# This file is licensed under the Affero General Public License (AGPL) version 3.
#
# Copyright (C) 2026 Element Creations Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# See the GNU Affero General Public License for more details:
# <https://www.gnu.org/licenses/agpl-3.0.html>.
#
from typing import TypedDict
from typing_extensions import NotRequired, Unpack
from synapse.api.room_versions import (
RoomVersion,
RoomVersions,
)
from synapse.events import EventBase, make_event_from_dict
from synapse.federation.federation_base import event_from_pdu_json
from synapse.types import JsonDict
def default_event_fields(room_version: RoomVersion) -> JsonDict:
"""Return default values for every field required by `room_version`."""
# We need to include entries for every required field for the room version.
# Note that they don't necessarily have to be valid values, just enough to
# allow us to construct the event class. (Ideally we'd build a fully valid
# event, but this is fine for now.)
defaults: JsonDict = {
"type": "m.test",
"sender": "@test:test",
"content": {},
"depth": 1,
"origin_server_ts": 1,
"hashes": {},
"prev_events": [],
"room_id": "!test:test",
}
# MSC4242 versions require prev_state_events but not auth_events.
if room_version.msc4242_state_dags:
defaults["prev_state_events"] = []
else:
defaults["auth_events"] = []
if room_version == RoomVersions.V1:
# V1 requires an event_id field, but later versions don't.
defaults["event_id"] = "$test_event_id:matrix.org"
return defaults
def make_test_event(
event_dict: JsonDict | None = None,
room_version: RoomVersion = RoomVersions.V1,
internal_metadata_dict: JsonDict | None = None,
rejected_reason: str | None = None,
**fields: Unpack["_EventFields"],
) -> EventBase:
"""Build an `EventBase` with defaults for the strict-required fields.
Pass an `event_dict` and/or `**fields` keyword arguments both are
merged on top of the format-version defaults from
`default_event_fields`. Explicit values win over defaults, and
`**fields` wins over `event_dict` so call sites can override a
shared base dict with one-off tweaks.
"""
merged: JsonDict = {
**default_event_fields(room_version),
**(event_dict or {}),
**fields,
}
return make_event_from_dict(
merged,
room_version=room_version,
internal_metadata_dict=internal_metadata_dict,
rejected_reason=rejected_reason,
)
def make_test_pdu_event(
pdu: JsonDict,
room_version: RoomVersion,
received_time: int | None = None,
) -> EventBase:
"""Wrapper around `event_from_pdu_json` for test PDU dicts.
Federation-side test fixtures often omit fields the strict Rust ctor
requires (e.g. `hashes`, `auth_events`, `prev_events`, `depth`)
because those tests focus on transport/auth flow rather than event
well-formedness. This helper layers in the same format-version
defaults as `make_test_event` before delegating.
"""
pdu = {**default_event_fields(room_version), **pdu}
return event_from_pdu_json(pdu, room_version, received_time=received_time)
class _EventFields(TypedDict):
"""Type for `kwargs` in `make_test_event`."""
event_id: NotRequired[str]
type: NotRequired[str]
sender: NotRequired[str]
content: NotRequired[JsonDict]
depth: NotRequired[int]
origin_server_ts: NotRequired[int]
hashes: NotRequired[dict[str, str]]
auth_events: NotRequired[list[str]]
prev_events: NotRequired[list[str]]
prev_state_events: NotRequired[list[str]]
room_id: NotRequired[str]