Optionally use an on-disk sqlite db in tests (#11702)
* Optionally use an on-disk sqlite db in tests When debugging a test it is sometimes useful to inspect the state of the DB. This is not easy when the db is in-memory: one cannot attach the sqlite CLI to another process's DB. With this change, if SYNAPSE_TEST_PERSIST_SQLITE_DB is set, we use `_trial_temp/test.db` as our sqlite database. One can then use `sqlite3 _trial_temp/test.db` and query to your heart's content. The DB is destroyed and recreated between different test cases. Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>pull/11710/head
parent
2bb4bd1269
commit
d3cf0730f8
|
@ -0,0 +1 @@
|
|||
Add the option to write sqlite test dbs to disk when running tests.
|
|
@ -14,6 +14,8 @@
|
|||
import hashlib
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import os.path
|
||||
import time
|
||||
import uuid
|
||||
import warnings
|
||||
|
@ -71,6 +73,7 @@ from tests.utils import (
|
|||
POSTGRES_HOST,
|
||||
POSTGRES_PASSWORD,
|
||||
POSTGRES_USER,
|
||||
SQLITE_PERSIST_DB,
|
||||
USE_POSTGRES_FOR_TESTS,
|
||||
MockClock,
|
||||
default_config,
|
||||
|
@ -739,9 +742,23 @@ def setup_test_homeserver(
|
|||
},
|
||||
}
|
||||
else:
|
||||
if SQLITE_PERSIST_DB:
|
||||
# The current working directory is in _trial_temp, so this gets created within that directory.
|
||||
test_db_location = os.path.abspath("test.db")
|
||||
logger.debug("Will persist db to %s", test_db_location)
|
||||
# Ensure each test gets a clean database.
|
||||
try:
|
||||
os.remove(test_db_location)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
else:
|
||||
logger.debug("Removed existing DB at %s", test_db_location)
|
||||
else:
|
||||
test_db_location = ":memory:"
|
||||
|
||||
database_config = {
|
||||
"name": "sqlite3",
|
||||
"args": {"database": ":memory:", "cp_min": 1, "cp_max": 1},
|
||||
"args": {"database": test_db_location, "cp_min": 1, "cp_max": 1},
|
||||
}
|
||||
|
||||
if "db_txn_limit" in kwargs:
|
||||
|
|
|
@ -42,6 +42,10 @@ POSTGRES_HOST = os.environ.get("SYNAPSE_POSTGRES_HOST", None)
|
|||
POSTGRES_PASSWORD = os.environ.get("SYNAPSE_POSTGRES_PASSWORD", None)
|
||||
POSTGRES_BASE_DB = "_synapse_unit_tests_base_%s" % (os.getpid(),)
|
||||
|
||||
# When debugging a specific test, it's occasionally useful to write the
|
||||
# DB to disk and query it with the sqlite CLI.
|
||||
SQLITE_PERSIST_DB = os.environ.get("SYNAPSE_TEST_PERSIST_SQLITE_DB") is not None
|
||||
|
||||
# the dbname we will connect to in order to create the base database.
|
||||
POSTGRES_DBNAME_FOR_INITIAL_CREATE = "postgres"
|
||||
|
||||
|
|
Loading…
Reference in New Issue