Changeset: f5514a22cc45 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/f5514a22cc45 Modified Files: sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py Branch: Jul2021 Log Message:
Make sure subprocess is always terminated and delete tables in a single transaction diffs (114 lines): diff --git a/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py b/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py --- a/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py +++ b/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py @@ -8,11 +8,10 @@ def freeport(): sock.close() return port -def wait_server_to_start(port): +def wait_server_to_start(port, mserver_process): started = False mserver_process.poll() if mserver_process.returncode is not None: - mserver_process.wait() raise Exception("The server terminated early") retry = 0 while retry < 3: @@ -28,26 +27,33 @@ def wait_server_to_start(port): if not started: raise Exception("The server did not start?") -prt = freeport() -cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt,)] -mserver_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) -wait_server_to_start(prt) -with SQLTestCase() as mdb: - mdb.connect(database=None, port=prt, username="monetdb", password="monetdb") - mdb.execute(""" - start transaction; - create table iwontpersist (mycol int); - insert into iwontpersist values (1); - commit; - """).assertSucceeded() - mdb.execute('SELECT mycol FROM iwontpersist;').assertDataResultMatch([(1,)]) -mserver_process.terminate() +mserver_process1 = None +mserver_process2 = None -prt = freeport() -cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt,)] -mserver_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) -wait_server_to_start(prt) -with SQLTestCase() as mdb: - mdb.connect(database=None, port=prt, username="monetdb", password="monetdb") - mdb.execute('SELECT mycol FROM iwontpersist;').assertFailed(err_code="42S02", err_message="SELECT: no such table 'iwontpersist'") -mserver_process.terminate() +try: + prt1 = freeport() + cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt1,)] + mserver_process1 = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + wait_server_to_start(prt1, mserver_process1) + with SQLTestCase() as mdb: + mdb.connect(database=None, port=prt1, username="monetdb", password="monetdb") + mdb.execute(""" + start transaction; + create table iwontpersist (mycol int); + insert into iwontpersist values (1); + commit; + """).assertSucceeded() + mdb.execute('SELECT mycol FROM iwontpersist;').assertDataResultMatch([(1,)]) + + prt2 = freeport() + cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt2,)] + mserver_process2 = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + wait_server_to_start(prt2, mserver_process2) + with SQLTestCase() as mdb: + mdb.connect(database=None, port=prt2, username="monetdb", password="monetdb") + mdb.execute('SELECT mycol FROM iwontpersist;').assertFailed(err_code="42S02", err_message="SELECT: no such table 'iwontpersist'") +finally: + if mserver_process1 is not None: + mserver_process1.terminate() + if mserver_process2 is not None: + mserver_process2.terminate() diff --git a/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py b/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py --- a/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py +++ b/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py @@ -74,10 +74,12 @@ with SQLTestCase() as mdb1: mdb2.execute("ALTER TABLE parent ADD TABLE child2;").assertFailed(err_code="42000", err_message="ALTER TABLE: transaction conflict detected") mdb1.execute('commit;').assertSucceeded() mdb2.execute('rollback;').assertSucceeded() + mdb1.execute('start transaction;').assertSucceeded() mdb1.execute('ALTER TABLE parent DROP TABLE child1;').assertSucceeded() mdb1.execute('DROP TABLE parent;').assertSucceeded() mdb1.execute('DROP TABLE child1;').assertSucceeded() mdb1.execute('DROP TABLE child2;').assertSucceeded() + mdb1.execute('commit;').assertSucceeded() mdb1.execute('create merge table parent(a int) PARTITION BY RANGE ON (a);').assertSucceeded() mdb1.execute('create table child1(c int);').assertSucceeded() @@ -88,10 +90,12 @@ with SQLTestCase() as mdb1: mdb2.execute("ALTER TABLE parent ADD TABLE child2 AS PARTITION FROM '0' TO '4';").assertFailed(err_code="42000", err_message="ALTER TABLE: failed due to conflict with another transaction") mdb1.execute('commit;').assertSucceeded() mdb2.execute('rollback;').assertSucceeded() + mdb1.execute('start transaction;').assertSucceeded() mdb1.execute('ALTER TABLE parent DROP TABLE child1;').assertSucceeded() mdb1.execute('DROP TABLE parent;').assertSucceeded() mdb1.execute('DROP TABLE child1;').assertSucceeded() mdb1.execute('DROP TABLE child2;').assertSucceeded() + mdb1.execute('commit;').assertSucceeded() mdb1.execute('create merge table parent1(a int) PARTITION BY RANGE ON (a);').assertSucceeded() mdb1.execute('create merge table parent2(a int) PARTITION BY RANGE ON (a);').assertSucceeded() @@ -102,10 +106,12 @@ with SQLTestCase() as mdb1: mdb2.execute("ALTER TABLE parent2 ADD TABLE child AS PARTITION FROM '0' TO '4';").assertFailed(err_code="42000", err_message="ALTER TABLE: failed due to conflict with another transaction") mdb1.execute('commit;').assertSucceeded() mdb2.execute('rollback;').assertSucceeded() + mdb1.execute('start transaction;').assertSucceeded() mdb1.execute('ALTER TABLE parent1 DROP TABLE child;').assertSucceeded() mdb1.execute('DROP TABLE parent1;').assertSucceeded() mdb1.execute('DROP TABLE parent2;').assertSucceeded() mdb1.execute('DROP TABLE child;').assertSucceeded() + mdb1.execute('commit;').assertSucceeded() mdb1.execute('start transaction;').assertSucceeded() mdb2.execute('start transaction;').assertSucceeded() _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list