예제 #1
0
    def prepare(self, reactor, clock, homeserver):
        super().prepare(reactor, clock, homeserver)
        self.room_creator = homeserver.get_room_creation_handler()
        self.persist_event_storage_controller = (
            self.hs.get_storage_controllers().persistence
        )

        # Create a test user
        self.ourUser = UserID.from_string(OUR_USER_ID)
        self.ourRequester = create_requester(self.ourUser)

        # Create a second test user
        self.otherUser = UserID.from_string(OTHER_USER_ID)
        self.otherRequester = create_requester(self.otherUser)

        # Create a test room
        info, _ = self.get_success(self.room_creator.create_room(self.ourRequester, {}))
        self.room_id1 = info["room_id"]

        # Create a second test room
        info, _ = self.get_success(self.room_creator.create_room(self.ourRequester, {}))
        self.room_id2 = info["room_id"]

        # Join the second user to the first room
        memberEvent, memberEventContext = self.get_success(
            create_event(
                self.hs,
                room_id=self.room_id1,
                type="m.room.member",
                sender=self.otherRequester.user.to_string(),
                state_key=self.otherRequester.user.to_string(),
                content={"membership": "join"},
            )
        )
        self.get_success(
            self.persist_event_storage_controller.persist_event(
                memberEvent, memberEventContext
            )
        )

        # Join the second user to the second room
        memberEvent, memberEventContext = self.get_success(
            create_event(
                self.hs,
                room_id=self.room_id2,
                type="m.room.member",
                sender=self.otherRequester.user.to_string(),
                state_key=self.otherRequester.user.to_string(),
                content={"membership": "join"},
            )
        )
        self.get_success(
            self.persist_event_storage_controller.persist_event(
                memberEvent, memberEventContext
            )
        )
예제 #2
0
    def test_get_joined_users_from_context(self):
        room = self.helper.create_room_as(self.u_alice, tok=self.t_alice)
        bob_event = self.get_success(
            event_injection.inject_member_event(
                self.hs, room, self.u_bob, Membership.JOIN
            )
        )

        # first, create a regular event
        event, context = self.get_success(
            event_injection.create_event(
                self.hs,
                room_id=room,
                sender=self.u_alice,
                prev_event_ids=[bob_event.event_id],
                type="m.test.1",
                content={},
            )
        )

        users = self.get_success(
            self.store.get_joined_users_from_context(event, context)
        )
        self.assertEqual(users.keys(), {self.u_alice, self.u_bob})

        # Regression test for #7376: create a state event whose key matches bob's
        # user_id, but which is *not* a membership event, and persist that; then check
        # that `get_joined_users_from_context` returns the correct users for the next event.
        non_member_event = self.get_success(
            event_injection.inject_event(
                self.hs,
                room_id=room,
                sender=self.u_bob,
                prev_event_ids=[bob_event.event_id],
                type="m.test.2",
                state_key=self.u_bob,
                content={},
            )
        )
        event, context = self.get_success(
            event_injection.create_event(
                self.hs,
                room_id=room,
                sender=self.u_alice,
                prev_event_ids=[non_member_event.event_id],
                type="m.test.3",
                content={},
            )
        )
        users = self.get_success(
            self.store.get_joined_users_from_context(event, context)
        )
        self.assertEqual(users.keys(), {self.u_alice, self.u_bob})
예제 #3
0
    def test_serialize_deserialize_state_no_prev(self):
        """Test that an EventContext for a state event (with not previous entry)
        is the same after serialize/deserialize.
        """
        event, context = create_event(
            self.hs,
            room_id=self.room_id,
            type="m.test",
            sender=self.user_id,
            state_key="",
        )

        self._check_serialize_deserialize(event, context)
예제 #4
0
    def test_serialize_deserialize_msg(self):
        """Test that an EventContext for a message event is the same after
        serialize/deserialize.
        """

        event, context = create_event(
            self.hs,
            room_id=self.room_id,
            type="m.test",
            sender=self.user_id,
        )

        self._check_serialize_deserialize(event, context)
예제 #5
0
    def test_serialize_deserialize_state_prev(self):
        """Test that an EventContext for a state event (which replaces a
        previous entry) is the same after serialize/deserialize.
        """
        event, context = create_event(
            self.hs,
            room_id=self.room_id,
            type="m.room.member",
            sender=self.user_id,
            state_key=self.user_id,
            content={"membership": "leave"},
        )

        self._check_serialize_deserialize(event, context)
예제 #6
0
    def _create_and_persist_member_event(
            self) -> Tuple[EventBase, EventContext]:
        # Create a member event we can use as an auth_event
        memberEvent, memberEventContext = self.get_success(
            create_event(
                self.hs,
                room_id=self.room_id,
                type="m.room.member",
                sender=self.requester.user.to_string(),
                state_key=self.requester.user.to_string(),
                content={"membership": "join"},
            ))
        self.get_success(
            self.persist_event_storage.persist_event(memberEvent,
                                                     memberEventContext))

        return memberEvent, memberEventContext