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

Reply via email to