Make it possible to run tests against postgres

pull/2829/head
Richard van der Hoff 2018-01-25 23:54:38 +00:00
parent d7eacc4f87
commit 88b9c5cbf0
1 changed files with 34 additions and 9 deletions

View File

@ -25,11 +25,17 @@ from synapse.api.errors import CodeMessageException, cs_error
from synapse.federation.transport import server from synapse.federation.transport import server
from synapse.http.server import HttpServer from synapse.http.server import HttpServer
from synapse.server import HomeServer from synapse.server import HomeServer
from synapse.storage import PostgresEngine
from synapse.storage.engines import create_engine from synapse.storage.engines import create_engine
from synapse.storage.prepare_database import prepare_database from synapse.storage.prepare_database import prepare_database
from synapse.util.logcontext import LoggingContext from synapse.util.logcontext import LoggingContext
from synapse.util.ratelimitutils import FederationRateLimiter from synapse.util.ratelimitutils import FederationRateLimiter
# set this to True to run the tests against postgres instead of sqlite.
# It requires you to have a local postgres database called synapse_test, within
# which ALL TABLES WILL BE DROPPED
USE_POSTGRES_FOR_TESTS = False
@defer.inlineCallbacks @defer.inlineCallbacks
def setup_test_homeserver(name="test", datastore=None, config=None, **kargs): def setup_test_homeserver(name="test", datastore=None, config=None, **kargs):
@ -64,14 +70,25 @@ def setup_test_homeserver(name="test", datastore=None, config=None, **kargs):
if "clock" not in kargs: if "clock" not in kargs:
kargs["clock"] = MockClock() kargs["clock"] = MockClock()
config.database_config = { if USE_POSTGRES_FOR_TESTS:
"name": "sqlite3", config.database_config = {
"args": { "name": "psycopg2",
"database": ":memory:", "args": {
"cp_min": 1, "database": "synapse_test",
"cp_max": 1, "cp_min": 1,
}, "cp_max": 5,
} },
}
else:
config.database_config = {
"name": "sqlite3",
"args": {
"database": ":memory:",
"cp_min": 1,
"cp_max": 1,
},
}
db_engine = create_engine(config.database_config) db_engine = create_engine(config.database_config)
# we need to configure the connection pool to run the on_new_connection # we need to configure the connection pool to run the on_new_connection
@ -89,7 +106,15 @@ def setup_test_homeserver(name="test", datastore=None, config=None, **kargs):
tls_server_context_factory=Mock(), tls_server_context_factory=Mock(),
**kargs **kargs
) )
yield prepare_database(hs.get_db_conn(), db_engine, config) db_conn = hs.get_db_conn()
# make sure that the database is empty
if isinstance(db_engine, PostgresEngine):
cur = db_conn.cursor()
cur.execute("SELECT tablename FROM pg_tables where schemaname='public'")
rows = cur.fetchall()
for r in rows:
cur.execute("DROP TABLE %s CASCADE" % r[0])
yield prepare_database(db_conn, db_engine, config)
hs.setup() hs.setup()
else: else:
hs = HomeServer( hs = HomeServer(