diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2010-11-28 15:03:34 +0000 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2010-11-28 17:29:36 +0000 |
commit | 598b9424d27155b49d8ad1ca17dfa0c27b5ad974 (patch) | |
tree | c982d462cfe86e2089cfe21239ee1808703479fd | |
parent | 2b6d2017ed4f199caa7e032100ac048ebc3978e2 (diff) | |
download | psycopg2-598b9424d27155b49d8ad1ca17dfa0c27b5ad974.tar.gz |
Deal uniformly with test servers without pg_sleep.
-rwxr-xr-x | tests/test_async.py | 18 | ||||
-rw-r--r-- | tests/test_cancel.py | 4 | ||||
-rw-r--r-- | tests/test_connection.py | 4 | ||||
-rwxr-xr-x | tests/test_transaction.py | 10 | ||||
-rw-r--r-- | tests/testutils.py | 26 |
5 files changed, 43 insertions, 19 deletions
diff --git a/tests/test_async.py b/tests/test_async.py index 05b2344..96d7a2c 100755 --- a/tests/test_async.py +++ b/tests/test_async.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -from testutils import unittest +from testutils import unittest, skip_if_no_pg_sleep import psycopg2 from psycopg2 import extensions @@ -94,17 +94,15 @@ class AsyncTests(unittest.TestCase): self.assertFalse(self.conn.isexecuting()) self.assertEquals(cur.fetchone()[0], "a") + @skip_if_no_pg_sleep('conn') def test_async_callproc(self): cur = self.conn.cursor() - try: - cur.callproc("pg_sleep", (0.1, )) - self.assertTrue(self.conn.isexecuting()) - - self.wait(cur) - self.assertFalse(self.conn.isexecuting()) - self.assertEquals(cur.fetchall()[0][0], '') - except psycopg2.ProgrammingError: - return self.skipTest("PG < 8.1 did not have pg_sleep") + cur.callproc("pg_sleep", (0.1, )) + self.assertTrue(self.conn.isexecuting()) + + self.wait(cur) + self.assertFalse(self.conn.isexecuting()) + self.assertEquals(cur.fetchall()[0][0], '') def test_async_after_async(self): cur = self.conn.cursor() diff --git a/tests/test_cancel.py b/tests/test_cancel.py index 746b211..52383f8 100644 --- a/tests/test_cancel.py +++ b/tests/test_cancel.py @@ -2,7 +2,7 @@ import time import threading -import unittest +from testutils import unittest, skip_if_no_pg_sleep import tests import psycopg2 @@ -27,6 +27,7 @@ class CancelTests(unittest.TestCase): def test_empty_cancel(self): self.conn.cancel() + @skip_if_no_pg_sleep('conn') def test_cancel(self): errors = [] @@ -62,6 +63,7 @@ class CancelTests(unittest.TestCase): self.assertEqual(errors, []) + @skip_if_no_pg_sleep('conn') def test_async_cancel(self): async_conn = psycopg2.connect(tests.dsn, async=True) self.assertRaises(psycopg2.OperationalError, async_conn.cancel) diff --git a/tests/test_connection.py b/tests/test_connection.py index 99d9f4c..80f9183 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -2,7 +2,7 @@ import time import threading -from testutils import unittest, decorate_all_tests +from testutils import unittest, decorate_all_tests, skip_if_no_pg_sleep from operator import attrgetter import psycopg2 @@ -92,6 +92,7 @@ class ConnectionTests(unittest.TestCase): self.assertRaises(psycopg2.NotSupportedError, cnn.xid, 42, "foo", "bar") + @skip_if_no_pg_sleep('connect') def test_concurrent_execution(self): def slave(cnn): cur = cnn.cursor() @@ -111,6 +112,7 @@ class ConnectionTests(unittest.TestCase): self.assert_(time.time() - t0 < 3, "something broken in concurrency") + class IsolationLevelsTestCase(unittest.TestCase): def setUp(self): diff --git a/tests/test_transaction.py b/tests/test_transaction.py index 3ee5ee7..856f7a3 100755 --- a/tests/test_transaction.py +++ b/tests/test_transaction.py @@ -1,6 +1,6 @@ #!/usr/bin/env python import threading -from testutils import unittest +from testutils import unittest, skip_if_no_pg_sleep import psycopg2 from psycopg2.extensions import ( @@ -211,15 +211,13 @@ class QueryCancellationTests(unittest.TestCase): self.conn = psycopg2.connect(tests.dsn) self.conn.set_isolation_level(ISOLATION_LEVEL_SERIALIZABLE) + @skip_if_no_pg_sleep('conn') def test_statement_timeout(self): curs = self.conn.cursor() # Set a low statement timeout, then sleep for a longer period. curs.execute('SET statement_timeout TO 10') - try: - self.assertRaises(psycopg2.extensions.QueryCanceledError, - curs.execute, 'SELECT pg_sleep(50)') - except psycopg2.ProgrammingError: - return self.skipTest("pg_sleep not available") + self.assertRaises(psycopg2.extensions.QueryCanceledError, + curs.execute, 'SELECT pg_sleep(50)') def test_suite(): diff --git a/tests/testutils.py b/tests/testutils.py index fdc5f54..b7c0fab 100644 --- a/tests/testutils.py +++ b/tests/testutils.py @@ -44,4 +44,28 @@ def decorate_all_tests(cls, decorator): for n in dir(cls): if n.startswith('test'): setattr(cls, n, decorator(getattr(cls, n))) - + + +def skip_if_no_pg_sleep(name): + """Decorator to skip a test if pg_sleep is not supported by the server. + + Pass it the name of an attribute containing a connection or of a method + returning a connection. + """ + def skip_if_no_pg_sleep_(f): + def skip_if_no_pg_sleep__(self): + cnn = getattr(self, name) + if callable(cnn): + cnn = cnn() + + if cnn.server_version < 80100: + return self.skipTest( + "server version %s doesn't support pg_sleep" + % cnn.server_version) + + return f(self) + + skip_if_no_pg_sleep__.__name__ = f.__name__ + return skip_if_no_pg_sleep__ + + return skip_if_no_pg_sleep_ |