diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index a1a0cb8180ef040ecefe8ff441bfae6bcf893670..45e6fe7d985aedaa8b37861703594e7f12f61560 100755 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -197,7 +197,7 @@ def check_listen(host: str, port: int) -> bool: return result == 0 -def check_psql(db_conn: dict, query: str) -> bool: +def check_psql(db_conn: dict, query: str) -> tuple: """Check if we can write data on this node. :param db_conn: Database connection parameters @@ -205,7 +205,7 @@ def check_psql(db_conn: dict, query: str) -> bool: :param query: Query to execute :type query: str :return: Wether the query can be executed or not - :rtype: bool + :rtype: tuple """ # build database connection uri @@ -226,10 +226,10 @@ def check_psql(db_conn: dict, query: str) -> bool: # execute try: subprocess.check_output(command, shell=True) - except subprocess.CalledProcessError: - return False + except subprocess.CalledProcessError as psql_error: + return False, str(psql_error).rstrip() - return True + return True, "OK" def check_replication(primary: dict, standby: dict) -> tuple: @@ -247,9 +247,8 @@ def check_replication(primary: dict, standby: dict) -> tuple: try: primary_client = psycopg2.connect(**primary) standby_client = psycopg2.connect(**standby) - except psycopg2.Error: - msg = "connection error" - return False, msg + except psycopg2.Error as repl_conn_error: + return False, str(repl_conn_error).rstrip() # random id rand = uuid.uuid4().hex @@ -261,9 +260,8 @@ def check_replication(primary: dict, standby: dict) -> tuple: try: primary_psql = primary_client.cursor() primary_psql.execute(write_query) - except psycopg2.Error: - msg = "write error" - return False, msg + except psycopg2.Error as repl_write_error: + return False, str(repl_write_error).rstrip() # read max_time = 6.0 @@ -276,10 +274,9 @@ def check_replication(primary: dict, standby: dict) -> tuple: standby_psql.execute(read_query) msg = "took ~{}s".format(str(timer)) break - except psycopg2.Error: - pass + except psycopg2.Error as repl_read_error: + msg = str(repl_read_error).rstrip() else: - msg = "read error" return False, msg # delete @@ -355,10 +352,10 @@ def check_ha(db_conn: dict, errors: int = 0) -> int: standby["port"] = 54322 status, info = check_replication(primary, standby) if not status: - error("Cannot replicate data between primary/standby ({})".format(info)) + error("Cannot replicate between primary/standby ({})".format(info)) errors += 1 else: - success("Can replicate data between primary/standby ({})".format(info)) + success("Can replicate between primary/standby ({})".format(info)) return errors @@ -389,22 +386,25 @@ def check_local(db_conn: dict, errors: int = 0) -> int: # check read print("Checking read operation:") read_query = "SELECT 1;" - if not check_psql(db_conn, read_query): - error("Cannot read data on {}@{}:{}".format(db_user, db_host, db_port)) + status, info = check_psql(db_conn, read_query) + if not status: + error("Cannot read from {}@{}:{} ({})".format(db_user, db_host, db_port, info)) errors += 1 else: - success("Can read data on {}@{}:{}".format(db_user, db_host, db_port)) + success("Can read from {}@{}:{}".format(db_user, db_host, db_port)) # check write print("Checking write operation:") - write_query = "CREATE TABLE es_test (id serial PRIMARY KEY);" - if not check_psql(db_conn, write_query): - error("Cannot write data on {}@{}:{}".format(db_user, db_host, db_port)) + rand = uuid.uuid4().hex + write_query = "CREATE TABLE es_test_{} (id serial PRIMARY KEY);".format(rand) + status, info = check_psql(db_conn, write_query) + if not status: + error("Cannot write on {}@{}:{} ({})".format(db_user, db_host, db_port, info)) errors += 1 else: - success("Can write data on {}@{}:{}".format(db_user, db_host, db_port)) + success("Can write on {}@{}:{}".format(db_user, db_host, db_port)) # remove test table - check_psql(db_conn, "DROP TABLE es_test;") + check_psql(db_conn, "DROP TABLE es_test_{};".format(rand)) return errors