Merge pull request #4164 from matrix-org/erikj/fix_device_comparison

Fix noop checks when updating device keys
This commit is contained in:
Erik Johnston 2018-11-08 14:37:20 +00:00 committed by GitHub
commit 7b22421a7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 1 deletions

1
changelog.d/4164.bugfix Normal file
View File

@ -0,0 +1 @@
Fix noop checks when updating device keys, reducing spurious device list update notifications.

View File

@ -40,7 +40,10 @@ class EndToEndKeyStore(SQLBaseStore):
allow_none=True, allow_none=True,
) )
new_key_json = encode_canonical_json(device_keys) # In py3 we need old_key_json to match new_key_json type. The DB
# returns unicode while encode_canonical_json returns bytes.
new_key_json = encode_canonical_json(device_keys).decode("utf-8")
if old_key_json == new_key_json: if old_key_json == new_key_json:
return False return False

View File

@ -44,6 +44,21 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
dev = res["user"]["device"] dev = res["user"]["device"]
self.assertDictContainsSubset({"keys": json, "device_display_name": None}, dev) self.assertDictContainsSubset({"keys": json, "device_display_name": None}, dev)
@defer.inlineCallbacks
def test_reupload_key(self):
now = 1470174257070
json = {"key": "value"}
yield self.store.store_device("user", "device", None)
changed = yield self.store.set_e2e_device_keys("user", "device", now, json)
self.assertTrue(changed)
# If we try to upload the same key then we should be told nothing
# changed
changed = yield self.store.set_e2e_device_keys("user", "device", now, json)
self.assertFalse(changed)
@defer.inlineCallbacks @defer.inlineCallbacks
def test_get_key_with_device_name(self): def test_get_key_with_device_name(self):
now = 1470174257070 now = 1470174257070