mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-12-26 15:29:25 -05:00
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>
This commit is contained in:
parent
2bb4bd1269
commit
d3cf0730f8
1
changelog.d/11702.misc
Normal file
1
changelog.d/11702.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
Add the option to write sqlite test dbs to disk when running tests.
|
@ -14,6 +14,8 @@
|
|||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
import warnings
|
import warnings
|
||||||
@ -71,6 +73,7 @@ from tests.utils import (
|
|||||||
POSTGRES_HOST,
|
POSTGRES_HOST,
|
||||||
POSTGRES_PASSWORD,
|
POSTGRES_PASSWORD,
|
||||||
POSTGRES_USER,
|
POSTGRES_USER,
|
||||||
|
SQLITE_PERSIST_DB,
|
||||||
USE_POSTGRES_FOR_TESTS,
|
USE_POSTGRES_FOR_TESTS,
|
||||||
MockClock,
|
MockClock,
|
||||||
default_config,
|
default_config,
|
||||||
@ -739,9 +742,23 @@ def setup_test_homeserver(
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
else:
|
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 = {
|
database_config = {
|
||||||
"name": "sqlite3",
|
"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:
|
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_PASSWORD = os.environ.get("SYNAPSE_POSTGRES_PASSWORD", None)
|
||||||
POSTGRES_BASE_DB = "_synapse_unit_tests_base_%s" % (os.getpid(),)
|
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.
|
# the dbname we will connect to in order to create the base database.
|
||||||
POSTGRES_DBNAME_FOR_INITIAL_CREATE = "postgres"
|
POSTGRES_DBNAME_FOR_INITIAL_CREATE = "postgres"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user