mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-07-03 19:23:03 +03:00
Tests fail gracefully if tpc is supported but disabled by the server.
This commit is contained in:
parent
645ab521f3
commit
7276c4a6b1
|
@ -67,6 +67,32 @@ class ConnectionTests(unittest.TestCase):
|
||||||
self.assert_(conn.encoding in psycopg2.extensions.encodings)
|
self.assert_(conn.encoding in psycopg2.extensions.encodings)
|
||||||
|
|
||||||
|
|
||||||
|
def skip_if_tpc_disabled(f):
|
||||||
|
"""Skip a test if the server has tpc support disabled."""
|
||||||
|
def skip_if_tpc_disabled_(self):
|
||||||
|
cnn = self.connect()
|
||||||
|
cur = cnn.cursor()
|
||||||
|
try:
|
||||||
|
cur.execute("SHOW max_prepared_transactions;")
|
||||||
|
except psycopg2.ProgrammingError:
|
||||||
|
# Server version too old: let's die a different death
|
||||||
|
mtp = 1
|
||||||
|
else:
|
||||||
|
mtp = int(cur.fetchone()[0])
|
||||||
|
finally:
|
||||||
|
cnn.close()
|
||||||
|
|
||||||
|
if not mtp:
|
||||||
|
import warnings
|
||||||
|
warnings.warn(
|
||||||
|
"server not configured for two phase transactions. "
|
||||||
|
"set max_prepared_transactions to > 0 to run the test")
|
||||||
|
return
|
||||||
|
return f(self)
|
||||||
|
|
||||||
|
skip_if_tpc_disabled_.__name__ = f.__name__
|
||||||
|
return skip_if_tpc_disabled_
|
||||||
|
|
||||||
class ConnectionTwoPhaseTests(unittest.TestCase):
|
class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.make_test_table()
|
self.make_test_table()
|
||||||
|
@ -120,6 +146,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
def connect(self):
|
def connect(self):
|
||||||
return psycopg2.connect(tests.dsn)
|
return psycopg2.connect(tests.dsn)
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_tpc_commit(self):
|
def test_tpc_commit(self):
|
||||||
cnn = self.connect()
|
cnn = self.connect()
|
||||||
xid = cnn.xid(1, "gtrid", "bqual")
|
xid = cnn.xid(1, "gtrid", "bqual")
|
||||||
|
@ -161,6 +188,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
self.assertEqual(0, self.count_xacts())
|
self.assertEqual(0, self.count_xacts())
|
||||||
self.assertEqual(1, self.count_test_records())
|
self.assertEqual(1, self.count_test_records())
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_tpc_commit_recovered(self):
|
def test_tpc_commit_recovered(self):
|
||||||
cnn = self.connect()
|
cnn = self.connect()
|
||||||
xid = cnn.xid(1, "gtrid", "bqual")
|
xid = cnn.xid(1, "gtrid", "bqual")
|
||||||
|
@ -187,6 +215,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
self.assertEqual(0, self.count_xacts())
|
self.assertEqual(0, self.count_xacts())
|
||||||
self.assertEqual(1, self.count_test_records())
|
self.assertEqual(1, self.count_test_records())
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_tpc_rollback(self):
|
def test_tpc_rollback(self):
|
||||||
cnn = self.connect()
|
cnn = self.connect()
|
||||||
xid = cnn.xid(1, "gtrid", "bqual")
|
xid = cnn.xid(1, "gtrid", "bqual")
|
||||||
|
@ -228,6 +257,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
self.assertEqual(0, self.count_xacts())
|
self.assertEqual(0, self.count_xacts())
|
||||||
self.assertEqual(0, self.count_test_records())
|
self.assertEqual(0, self.count_test_records())
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_tpc_rollback_recovered(self):
|
def test_tpc_rollback_recovered(self):
|
||||||
cnn = self.connect()
|
cnn = self.connect()
|
||||||
xid = cnn.xid(1, "gtrid", "bqual")
|
xid = cnn.xid(1, "gtrid", "bqual")
|
||||||
|
@ -266,6 +296,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
xns = cnn.tpc_recover()
|
xns = cnn.tpc_recover()
|
||||||
self.assertEqual(psycopg2.extensions.STATUS_BEGIN, cnn.status)
|
self.assertEqual(psycopg2.extensions.STATUS_BEGIN, cnn.status)
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_recovered_xids(self):
|
def test_recovered_xids(self):
|
||||||
# insert a few test xns
|
# insert a few test xns
|
||||||
cnn = self.connect()
|
cnn = self.connect()
|
||||||
|
@ -296,6 +327,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
self.assertEqual(xid.owner, owner)
|
self.assertEqual(xid.owner, owner)
|
||||||
self.assertEqual(xid.database, database)
|
self.assertEqual(xid.database, database)
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_xid_encoding(self):
|
def test_xid_encoding(self):
|
||||||
cnn = self.connect()
|
cnn = self.connect()
|
||||||
xid = cnn.xid(42, "gtrid", "bqual")
|
xid = cnn.xid(42, "gtrid", "bqual")
|
||||||
|
@ -308,6 +340,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
(tests.dbname,))
|
(tests.dbname,))
|
||||||
self.assertEqual('42_Z3RyaWQ=_YnF1YWw=', cur.fetchone()[0])
|
self.assertEqual('42_Z3RyaWQ=_YnF1YWw=', cur.fetchone()[0])
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_xid_roundtrip(self):
|
def test_xid_roundtrip(self):
|
||||||
for fid, gtrid, bqual in [
|
for fid, gtrid, bqual in [
|
||||||
(0, "", ""),
|
(0, "", ""),
|
||||||
|
@ -331,6 +364,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
|
|
||||||
cnn.tpc_rollback(xid)
|
cnn.tpc_rollback(xid)
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_unparsed_roundtrip(self):
|
def test_unparsed_roundtrip(self):
|
||||||
for tid in [
|
for tid in [
|
||||||
'',
|
'',
|
||||||
|
@ -383,6 +417,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
x2 = Xid.from_string('99_xxx_yyy')
|
x2 = Xid.from_string('99_xxx_yyy')
|
||||||
self.assertEqual(str(x2), '99_xxx_yyy')
|
self.assertEqual(str(x2), '99_xxx_yyy')
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_xid_unicode(self):
|
def test_xid_unicode(self):
|
||||||
cnn = self.connect()
|
cnn = self.connect()
|
||||||
x1 = cnn.xid(10, u'uni', u'code')
|
x1 = cnn.xid(10, u'uni', u'code')
|
||||||
|
@ -395,6 +430,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
self.assertEqual('uni', xid.gtrid)
|
self.assertEqual('uni', xid.gtrid)
|
||||||
self.assertEqual('code', xid.bqual)
|
self.assertEqual('code', xid.bqual)
|
||||||
|
|
||||||
|
@skip_if_tpc_disabled
|
||||||
def test_xid_unicode_unparsed(self):
|
def test_xid_unicode_unparsed(self):
|
||||||
# We don't expect people shooting snowmen as transaction ids,
|
# We don't expect people shooting snowmen as transaction ids,
|
||||||
# so if something explodes in an encode error I don't mind.
|
# so if something explodes in an encode error I don't mind.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user