mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-06-08 16:32:38 -04:00
Delete messages from device_inbox
table when deleting device (#10969)
Fixes: #9346
This commit is contained in:
parent
a930da3291
commit
8d46fac98e
6 changed files with 256 additions and 15 deletions
90
tests/storage/databases/main/test_deviceinbox.py
Normal file
90
tests/storage/databases/main/test_deviceinbox.py
Normal file
|
@ -0,0 +1,90 @@
|
|||
# Copyright 2021 The Matrix.org Foundation C.I.C.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the 'License');
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an 'AS IS' BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from synapse.rest import admin
|
||||
from synapse.rest.client import devices
|
||||
|
||||
from tests.unittest import HomeserverTestCase
|
||||
|
||||
|
||||
class DeviceInboxBackgroundUpdateStoreTestCase(HomeserverTestCase):
|
||||
|
||||
servlets = [
|
||||
admin.register_servlets,
|
||||
devices.register_servlets,
|
||||
]
|
||||
|
||||
def prepare(self, reactor, clock, hs):
|
||||
self.store = hs.get_datastore()
|
||||
self.user_id = self.register_user("foo", "pass")
|
||||
|
||||
def test_background_remove_deleted_devices_from_device_inbox(self):
|
||||
"""Test that the background task to delete old device_inboxes works properly."""
|
||||
|
||||
# create a valid device
|
||||
self.get_success(
|
||||
self.store.store_device(self.user_id, "cur_device", "display_name")
|
||||
)
|
||||
|
||||
# Add device_inbox to devices
|
||||
self.get_success(
|
||||
self.store.db_pool.simple_insert(
|
||||
"device_inbox",
|
||||
{
|
||||
"user_id": self.user_id,
|
||||
"device_id": "cur_device",
|
||||
"stream_id": 1,
|
||||
"message_json": "{}",
|
||||
},
|
||||
)
|
||||
)
|
||||
self.get_success(
|
||||
self.store.db_pool.simple_insert(
|
||||
"device_inbox",
|
||||
{
|
||||
"user_id": self.user_id,
|
||||
"device_id": "old_device",
|
||||
"stream_id": 2,
|
||||
"message_json": "{}",
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
# Insert and run the background update.
|
||||
self.get_success(
|
||||
self.store.db_pool.simple_insert(
|
||||
"background_updates",
|
||||
{
|
||||
"update_name": "remove_deleted_devices_from_device_inbox",
|
||||
"progress_json": "{}",
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
# ... and tell the DataStore that it hasn't finished all updates yet
|
||||
self.store.db_pool.updates._all_done = False
|
||||
|
||||
self.wait_for_background_updates()
|
||||
|
||||
# Make sure the background task deleted old device_inbox
|
||||
res = self.get_success(
|
||||
self.store.db_pool.simple_select_onecol(
|
||||
table="device_inbox",
|
||||
keyvalues={},
|
||||
retcol="device_id",
|
||||
desc="get_device_id_from_device_inbox",
|
||||
)
|
||||
)
|
||||
self.assertEqual(1, len(res))
|
||||
self.assertEqual(res[0], "cur_device")
|
Loading…
Add table
Add a link
Reference in a new issue