zulip/zerver/tests
Christopher Chong 28173cafc8 message_flags: Fix deadlocks when updating message flags.
Previously, an active production Zulip server would experience a class
of deadlocks caused by two or more concurrent bulk update operations
on the UserMessage table.

This is because UPDATE ... SET ... WHERE statements that execute in
parallel take row-level UPDATE locks as they get results; since the
query plans may result in getting rows in different orders between two
queries, this can result in deadlocks.

Some databases allow ORDER BY on their UPDATE ... WHERE statements;
PostgreSQL does not. In PostgreSQL, the answer is to do a sub-select
with an ORDER BY ... FOR UPDATE to ensure consistent ordering on row
locks.

We do this all code paths using bitand or bitor as part of bulk
editing message flags, which should ensure that these concurrent
operations obtain row level locks on the table in the same order.

Fixes #19054.
2022-09-06 16:06:58 -07:00
..
fixtures gitter: Soft deactivate appropriate imported users. 2022-08-29 11:03:27 -07:00
images emoji: Support animated PNGs. 2022-03-15 12:47:21 -07:00
__init__.py
test_alert_words.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_attachments.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_audit_log.py realm: Create RealmAuditLog entries when removing custom emoji. 2022-07-31 18:32:28 -07:00
test_auth_backends.py settings: Extract unnecessary test specific settings. 2022-08-11 13:45:28 -07:00
test_bots.py tests: Pass all arguments in do_change_stream_permission. 2022-08-09 17:05:38 -07:00
test_cache.py preview: Use cache only as a non-durable cache, not an IPC. 2022-04-15 14:48:12 -07:00
test_compatibility.py python: Reformat with Black 22 (stable). 2022-02-18 18:03:13 -08:00
test_create_video_call.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_custom_profile_data.py populate_db: Fix data for "Favorite editor" custom field. 2022-07-15 16:51:24 -07:00
test_data_types.py
test_decorators.py rate_limit: Remove rate_limit_ip. 2022-08-17 12:05:38 -07:00
test_digest.py testing: 100% coverage for zerver/tests/test_digest.py. 2022-06-01 16:09:13 -07:00
test_docs.py tests: Update DocPageTest for HTML metatags for landing pages. 2022-09-06 14:57:06 -07:00
test_drafts.py test_draft: Avoid inference with type annotation. 2022-07-26 18:00:24 -07:00
test_email_change.py user-settings: Make default `None` for name, email and password changes. 2022-08-08 15:37:41 -07:00
test_email_log.py tests: Remove `FORWARD_ADDRESS_CONFIG_FILE` created in test. 2022-07-21 15:25:11 -07:00
test_email_mirror.py settings: Make SHARED_SECRET mandatory. 2022-08-25 12:13:03 -07:00
test_email_notifications.py tests: Rename missed message email tests in test_email_notifications.py. 2022-08-26 11:48:29 -07:00
test_embedded_bot_system.py tests: Ensure stream senders get a UserMessage row. 2021-12-10 09:40:04 -08:00
test_event_queue.py test_helpers: Remove default tornado_handler from HostRequestMock. 2022-06-25 08:42:23 -07:00
test_event_system.py settings: Send presence update event toggling presence_enabled. 2022-08-25 12:30:12 -07:00
test_events.py test_events: Fix test failures 10 days after last provision. 2022-09-06 11:31:13 -07:00
test_example.py email_backends: Fix concurrent backend testing for generate_emails. 2022-05-03 08:45:51 -07:00
test_external.py rate_limit: Move rate_limit_remote_server to zilencer.auth. 2022-08-17 12:05:38 -07:00
test_github.py downloads: Serve desktop downloads from desktop-download.zulip.com. 2021-08-28 23:08:45 -07:00
test_gitter_importer.py import: Fix timestamp check in long_term_idle_helper. 2022-08-29 15:18:00 -07:00
test_home.py emoji: Add which emoji are supported to the /register call. 2022-08-26 17:58:31 -07:00
test_hotspots.py actions: Split out zerver.actions.create_user. 2022-04-14 17:14:35 -07:00
test_i18n.py tests: Replace `HttpResponse` with `TestHttpResponse.` 2022-06-08 11:25:03 -07:00
test_import_export.py import: Fix the import of authentication_methods BitField. 2022-08-29 11:10:18 -07:00
test_integrations.py
test_integrations_dev_panel.py middleware: Pass unhandled API exceptions through to the test suite. 2022-06-23 19:23:08 -07:00
test_internet.py
test_legacy_subject.py tests: Remove `client` parameter if test can use default `User-Agent`. 2022-02-24 12:57:18 -08:00
test_link_embed.py actions: Create a separate message_delete.py file. 2022-09-01 14:18:38 -07:00
test_logging_handlers.py typing: Remove ViewFuncT. 2022-08-22 15:46:16 -07:00
test_management_commands.py tests: Replace some testserver.com dummy domains with zulip.example.com. 2022-08-29 10:39:14 -07:00
test_markdown.py CVE-2022-36048: Rewrite only specific local links to relative. 2022-08-24 16:29:09 -07:00
test_mattermost_importer.py tests: Verify emoji codes. 2021-12-06 13:22:47 -08:00
test_message_dict.py typing: Add none-checks for Recipient objects. 2022-05-31 09:43:55 -07:00
test_message_edit.py actions: Create a separate message_delete.py file. 2022-09-01 14:18:38 -07:00
test_message_edit_notifications.py push_notifications: Ensure notifications are on for the remove codepath. 2022-03-09 16:33:51 -08:00
test_message_fetch.py search: Add test for pgroogna parts-of-URL search. 2022-08-15 17:14:17 -07:00
test_message_flags.py message_flags: Fix deadlocks when updating message flags. 2022-09-06 16:06:58 -07:00
test_message_send.py internal_prep_private_message: Remove redundant realm arg. 2022-09-06 15:03:17 -07:00
test_message_topics.py tests: Pass all arguments in do_change_stream_permission. 2022-08-09 17:05:38 -07:00
test_messages.py actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
test_middleware.py request: Refactor remote_server into RequestNotes. 2022-07-28 09:38:40 -07:00
test_migrations.py tests: Mark test_migrations tests to be automatically skipped. 2022-03-07 15:33:29 -08:00
test_mirror_users.py actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
test_muting_topics.py typing: Add none-checks for Recipient objects. 2022-05-31 09:43:55 -07:00
test_muting_users.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_new_users.py requirements: Upgrade to Django 4.0. 2022-07-13 16:07:17 -07:00
test_notification_data.py notifications: Don't enqueue notifications for bots. 2022-01-03 09:55:06 -08:00
test_onboarding.py
test_openapi.py api: Document /users/me/alert_words API endpoint. 2022-08-16 13:37:52 -07:00
test_outgoing_http.py requirements: Upgrade Python requirements. 2022-06-01 16:01:54 -07:00
test_outgoing_webhook_interfaces.py outgoing webhooks: Fix inconsistencies with Slack's API. 2021-09-23 11:19:20 -07:00
test_outgoing_webhook_system.py testing: 100% code coverage for zerver/lib/outgoing_webhook.py. 2022-05-17 13:51:00 -07:00
test_populate_db.py populate_db: Add support for creating messages older than 5 days ago. 2022-04-25 16:16:15 -07:00
test_presence.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_push_notifications.py actions: Create a separate message_delete.py file. 2022-09-01 14:18:38 -07:00
test_queue.py test_queue_error_json: Acknowledge the received message. 2022-01-21 13:38:13 -08:00
test_queue_worker.py invites: Use expiration time in minutes instead of days. 2022-04-20 13:31:37 -07:00
test_rate_limiter.py test_rate_limiter: Make test_add_remove_rule clean up its rules. 2022-08-10 16:30:39 -07:00
test_reactions.py tests: Pass all arguments in do_change_stream_permission. 2022-08-09 17:05:38 -07:00
test_read_receipts.py read_receipts: Add support for displaying read receipts. 2022-08-12 13:16:35 -07:00
test_realm.py message_edit: Make zero invalid value for message_content_edit_time_limit_seconds. 2022-08-12 18:09:53 -07:00
test_realm_domains.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_realm_emoji.py cache: Avoid flushing invalid cache for realm emoji. 2022-08-09 14:44:28 -07:00
test_realm_export.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_realm_linkifiers.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_realm_playgrounds.py actions: Split out zerver.actions.realm_playgrounds. 2022-04-14 17:14:30 -07:00
test_redis_utils.py typing: Fix missing attribtute of RedisUtilsTest. 2022-06-23 22:05:12 -07:00
test_report.py docs: Fix many spelling mistakes. 2022-02-07 18:51:06 -08:00
test_retention.py actions: Create a separate message_delete.py file. 2022-09-01 14:18:38 -07:00
test_rocketchat_importer.py import_realm: Validate emails of users being imported. 2022-08-29 10:39:14 -07:00
test_scim.py scim: Upgrade scim2-filter-parser to 0.4.0 to fix case-sensitivity. 2022-08-29 10:35:29 -07:00
test_send_email.py test_send_email: Fix the to_email argument to pass str. 2022-07-15 14:00:56 -07:00
test_server_settings.py settings: Make SHARED_SECRET mandatory. 2022-08-25 12:13:03 -07:00
test_service_bot_system.py typing: Tighten type annotations for patch_queue_publish. 2022-08-22 15:46:16 -07:00
test_sessions.py home: For web public realms, skip login for spectators. 2022-04-28 12:34:29 -07:00
test_settings.py user-settings: Make default `None` for name, email and password changes. 2022-08-08 15:37:41 -07:00
test_signup.py tests: Replace some testserver.com dummy domains with zulip.example.com. 2022-08-29 10:39:14 -07:00
test_slack_importer.py import_realm: Validate emails of users being imported. 2022-08-29 10:39:14 -07:00
test_slack_message_conversion.py
test_soft_deactivation.py actions: Split out zerver.actions.alert_words. 2022-04-14 17:14:31 -07:00
test_subdomains.py
test_submessage.py actions: Split out zerver.actions.submessage. 2022-04-14 17:14:30 -07:00
test_subs.py subscriptions: Send update events for `is_muted` property. 2022-08-16 16:50:51 -07:00
test_templates.py markdown: Rewrite include plugin without markdown-include. 2022-06-26 17:36:31 -07:00
test_thumbnail.py typing: Access url via key "Location" instead of attribute "url". 2022-05-30 11:59:47 -07:00
test_timeout.py timeout: Add test coverage. 2022-04-07 17:26:01 -07:00
test_timestamp.py docs: Add missing space in “time zone”. 2022-02-24 14:05:12 -08:00
test_timezone.py requirements: Upgrade to Django 4.0. 2022-07-13 16:07:17 -07:00
test_tornado.py test_tornado: Avoid deprecated AsyncHTTPTestCase. 2022-07-05 17:54:17 -07:00
test_transfer.py mypy: Enable truthy-bool errors. 2022-06-23 19:22:12 -07:00
test_tutorial.py actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
test_typing.py streams: Capitalize "ID" in invalid stream errors in API. 2022-05-27 17:06:03 -07:00
test_upload.py actions: Create a separate message_delete.py file. 2022-09-01 14:18:38 -07:00
test_urls.py tests: Move URL redirect tests for portico landing pages. 2022-09-06 14:57:06 -07:00
test_user_groups.py user_groups: Add EVERYONE_GROUP_NAME constant. 2022-08-11 04:38:36 -07:00
test_user_status.py user_status: Add UserInfoDict. 2022-07-22 16:31:18 -07:00
test_users.py logout_all_users: Add --rotate-api-keys option to the command. 2022-08-15 17:58:05 -07:00
test_webhooks_common.py django: Use HttpRequest.headers. 2022-05-13 20:42:20 -07:00
test_widgets.py tests: Replace `HttpResponse` with `TestHttpResponse.` 2022-06-08 11:25:03 -07:00
test_zcommand.py tests: Refactor away result.json() calls with helpers. 2022-06-06 23:06:00 -07:00
test_zephyr.py zephyr: Check PERSONAL_ZMIRROR_SERVER before updating cache. 2022-08-12 17:08:04 -07:00