15 Commits

Author SHA1 Message Date
David Robertson
c94670eea7
Prevent a test from writing to a closed v2 server 2023-10-19 19:03:19 +01:00
Kegan Dougal
bfb980bad8 bugfix: fix deadlock when connections expire due to full buffers
Caused by the fix in https://github.com/matrix-org/sliding-sync/pull/220
2023-07-25 10:16:07 +01:00
David Robertson
9982ab24ee
Use different device names for each test 2023-05-15 19:14:09 +01:00
Kegan Dougal
1d48ebea2f Add conn_id as per the MSC
Also fix a bug whereby required_state would not cause new state
to be sent to clients if it was updated as part of a room subscription.
2023-05-10 17:31:07 +01:00
David Robertson
38aa6b0471
Test tweaks 2023-04-28 18:50:43 +01:00
David Robertson
af893f526b
update tests 2023-04-04 22:25:39 +01:00
Kegan Dougal
6bdef5feba bugfix: expire connections when the access token gets invalidated
With regression test. The behaviour is:
 - Delete the connection, such that incoming requests will end up with M_UNKNOWN_POS
 - The next request will then return HTTP 401.

This has knock-on effects:
 - We no longer send HTTP 502 if /whoami returns 401, instead we return 401.
 - When the token is expired (pollers get 401, the device is deleted from the DB).
2023-03-01 16:40:15 +00:00
Kegan Dougal
2139eda047 tests: add test for full connection buffers and expiry
Fixed a bug in notification code which could cause integration
tests to not be as deterministic as intended; should fix flakey
tests.
2023-02-03 10:00:45 +00:00
Kegan Dougal
ca6ceb28da BREAKING: Change the API to refer to lists by keys not index positions
This provides more flexibility to refer to lists as well as delete them.
2022-12-20 13:32:39 +00:00
Kegan Dougal
aa28df161c Rename package -> github.com/matrix-org/sliding-sync 2022-12-15 11:08:50 +00:00
Kegan Dougal
be8543a21a add extensions for typing and receipts; bugfixes and additional perf improvements
Features:
 - Add `typing` extension.
 - Add `receipts` extension.
 - Add comprehensive prometheus `/metrics` activated via `SYNCV3_PROM`.
 - Add `SYNCV3_PPROF` support.
 - Add `by_notification_level` sort order.
 - Add `include_old_rooms` support.
 - Add support for `$ME` and `$LAZY`.
 - Add correct filtering when `*,*` is used as `required_state`.
 - Add `num_live` to each room response to indicate how many timeline entries are live.

Bug fixes:
 - Use a stricter comparison function on ranges: fixes an issue whereby UTs fail on go1.19 due to change in sorting algorithm.
 - Send back an `errcode` on HTTP errors (e.g expired sessions).
 - Remove `unsigned.txn_id` on insertion into the DB. Otherwise other users would see other users txn IDs :(
 - Improve range delta algorithm: previously it didn't handle cases like `[0,20] -> [20,30]` and would panic.
 - Send HTTP 400 for invalid range requests.
 - Don't publish no-op unread counts which just adds extra noise.
 - Fix leaking DB connections which could eventually consume all available connections.
 - Ensure we always unblock WaitUntilInitialSync even on invalid access tokens. Other code relies on WaitUntilInitialSync() actually returning at _some_ point e.g on startup we have N workers which bound the number of concurrent pollers made at any one time, we need to not just hog a worker forever.

Improvements:
 - Greatly improve startup times of sync3 handlers by improving `JoinedRoomsTracker`: a modest amount of data would take ~28s to create the handler, now it takes 4s.
 - Massively improve initial initial v3 sync times, by refactoring `JoinedRoomsTracker`, from ~47s to <1s.
 - Add `SlidingSyncUntil...` in tests to reduce races.
 - Tweak the API shape of JoinedUsersForRoom to reduce state block processing time for large rooms from 63s to 39s.
 - Add trace task for initial syncs.
 - Include the proxy version in UA strings.
 - HTTP errors now wait 1s before returning to stop clients tight-looping on error.
 - Pending event buffer is now 2000.
 - Index the room ID first to cull the most events when returning timeline entries. Speeds up `SelectLatestEventsBetween` by a factor of 8.
 - Remove cancelled `m.room_key_requests` from the to-device inbox. Cuts down the amount of events in the inbox by ~94% for very large (20k+) inboxes, ~50% for moderate sized (200 events) inboxes. Adds book-keeping to remember the unacked to-device position for each client.
2022-12-14 18:53:55 +00:00
Kegan Dougal
ccbe1a81db Add response buffering to Conn
With unit/integration tests
2022-08-03 17:14:31 +01:00
Kegan Dougal
0d3157d610 Add support for txn_id in request/response
Missing buffering
2022-08-03 15:33:56 +01:00
Kegan Dougal
5b0e8568ea tests: move Match* functions to testutils/m
In preparation for migrating end-to-end style integration tests
to be actual end-to-end tests. The intended split is:
 - Does the test exclusively use the public sliding sync API for test assertions?
 - Does the test exclusively use the public sync v2 API for configuring the test?
If the answer to both questions is YES, then they should be end-to-end tests.
Some examples of this include testing core functionality of the API like
room subscriptions, multiple lists, filters, extensions, etc.

Some examples of tests which are NOT end-to-end tests include:
 - Testing connection handling (e.g sending multiple duplicate requests)
 - Ensuring outstanding requests get cancelled.
 - Testing restarts of the proxy.
 - Testing out-of-order responses.
 - Benchmarks.

These all involve configuring the test / asserting different things, which would
be extremely difficult to reliably engineer using a real homeserver.
2022-07-26 10:11:06 +01:00
Kegan Dougal
75c3579f9e refactor: move integration tests to tests-integration directory
Add tests-e2ee directory for end-to-end tests which require a synapse
server.
2022-07-25 15:06:13 +01:00