diff options
author | Erik Johnston <erik@matrix.org> | 2023-03-30 16:21:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-30 16:21:12 +0100 |
commit | 91c3f32673e0c62ea603dcc18f7f21f73c011f33 (patch) | |
tree | cd79456df5729402960c80d033dab32a24017925 /tests/server.py | |
parent | Implement MSC3984 to proxy /keys/query requests to appservices. (#15321) (diff) | |
download | synapse-91c3f32673e0c62ea603dcc18f7f21f73c011f33.tar.xz |
Speed up SQLite unit test CI (#15334)
Tests now take 40% of the time.
Diffstat (limited to 'tests/server.py')
-rw-r--r-- | tests/server.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/server.py b/tests/server.py index bb059630fa..b52ff1c463 100644 --- a/tests/server.py +++ b/tests/server.py @@ -16,6 +16,7 @@ import json import logging import os import os.path +import sqlite3 import time import uuid import warnings @@ -79,7 +80,9 @@ from synapse.http.site import SynapseRequest from synapse.logging.context import ContextResourceUsage from synapse.server import HomeServer from synapse.storage import DataStore +from synapse.storage.database import LoggingDatabaseConnection from synapse.storage.engines import PostgresEngine, create_engine +from synapse.storage.prepare_database import prepare_database from synapse.types import ISynapseReactor, JsonDict from synapse.util import Clock @@ -104,6 +107,10 @@ P = ParamSpec("P") # the type of thing that can be passed into `make_request` in the headers list CustomHeaderType = Tuple[Union[str, bytes], Union[str, bytes]] +# A pre-prepared SQLite DB that is used as a template when creating new SQLite +# DB each test run. This dramatically speeds up test set up when using SQLite. +PREPPED_SQLITE_DB_CONN: Optional[LoggingDatabaseConnection] = None + class TimedOutException(Exception): """ @@ -899,6 +906,22 @@ def setup_test_homeserver( "args": {"database": test_db_location, "cp_min": 1, "cp_max": 1}, } + # Check if we have set up a DB that we can use as a template. + global PREPPED_SQLITE_DB_CONN + if PREPPED_SQLITE_DB_CONN is None: + temp_engine = create_engine(database_config) + PREPPED_SQLITE_DB_CONN = LoggingDatabaseConnection( + sqlite3.connect(":memory:"), temp_engine, "PREPPED_CONN" + ) + + database = DatabaseConnectionConfig("master", database_config) + config.database.databases = [database] + prepare_database( + PREPPED_SQLITE_DB_CONN, create_engine(database_config), config + ) + + database_config["_TEST_PREPPED_CONN"] = PREPPED_SQLITE_DB_CONN + if "db_txn_limit" in kwargs: database_config["txn_limit"] = kwargs["db_txn_limit"] |