Work around a race condition in async cancel test

This commit is contained in:
Daniele Varrazzo 2017-02-06 18:05:13 +00:00
parent e599da6308
commit d23fe42873
2 changed files with 10 additions and 3 deletions

View File

@ -23,11 +23,13 @@
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
# License for more details. # License for more details.
import time
import psycopg2 import psycopg2
from psycopg2 import extras from psycopg2 import extras
from testconfig import dsn from testconfig import dsn
from testutils import ConnectingTestCase, unittest, skip_before_postgres from testutils import ConnectingTestCase, unittest, skip_before_postgres, slow
from test_replication import ReplicationTestCase, skip_repl_if_green from test_replication import ReplicationTestCase, skip_repl_if_green
from psycopg2.extras import LogicalReplicationConnection, StopReplication from psycopg2.extras import LogicalReplicationConnection, StopReplication
@ -97,13 +99,15 @@ class CancelTests(ConnectingTestCase):
)''') )''')
self.conn.commit() self.conn.commit()
@slow
@skip_before_postgres(8, 2) @skip_before_postgres(8, 2)
def test_async_cancel(self): def test_async_cancel(self):
async_conn = psycopg2.connect(dsn, async=True) async_conn = psycopg2.connect(dsn, async=True)
self.assertRaises(psycopg2.OperationalError, async_conn.cancel) self.assertRaises(psycopg2.OperationalError, async_conn.cancel)
extras.wait_select(async_conn) extras.wait_select(async_conn)
cur = async_conn.cursor() cur = async_conn.cursor()
cur.execute("select pg_sleep(10000)") cur.execute("select pg_sleep(10)")
time.sleep(1)
self.assertTrue(async_conn.isexecuting()) self.assertTrue(async_conn.isexecuting())
async_conn.cancel() async_conn.cancel()
self.assertRaises(psycopg2.extensions.QueryCanceledError, self.assertRaises(psycopg2.extensions.QueryCanceledError,

View File

@ -23,6 +23,7 @@
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
# License for more details. # License for more details.
import time
import threading import threading
import psycopg2 import psycopg2
@ -86,13 +87,15 @@ class CancelTests(ConnectingTestCase):
self.assertEqual(errors, []) self.assertEqual(errors, [])
@slow
@skip_before_postgres(8, 2) @skip_before_postgres(8, 2)
def test_async_cancel(self): def test_async_cancel(self):
async_conn = psycopg2.connect(dsn, async_=True) async_conn = psycopg2.connect(dsn, async_=True)
self.assertRaises(psycopg2.OperationalError, async_conn.cancel) self.assertRaises(psycopg2.OperationalError, async_conn.cancel)
extras.wait_select(async_conn) extras.wait_select(async_conn)
cur = async_conn.cursor() cur = async_conn.cursor()
cur.execute("select pg_sleep(2)") cur.execute("select pg_sleep(10)")
time.sleep(1)
self.assertTrue(async_conn.isexecuting()) self.assertTrue(async_conn.isexecuting())
async_conn.cancel() async_conn.cancel()
self.assertRaises(psycopg2.extensions.QueryCanceledError, self.assertRaises(psycopg2.extensions.QueryCanceledError,