'callproc produced invalid results' ) finally: con.close() def test_setoutputsize(self): # psycopg2's setoutputsize() is a no-op pass def test_nextset(self): # psycopg2 does not implement nextset() pass class Psycopg2TPCTests(dbapi20_tpc.TwoPhaseCommitTests, unittest.TestCase): driver = psycopg2 def connect(self): return psycopg2.connect(dsn=dsn) decorate_all_tests(Psycopg2TPCTests, skip_if_tpc_disabled) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == '__main__': unittest.main()
def test_large_oid(self): # Test we don't overflow with an oid not fitting a signed int try: self.conn.lobject(0xFFFFFFFE) except psycopg2.OperationalError: pass def test_factory(self): class lobject_subclass(psycopg2.extensions.lobject): pass lo = self.conn.lobject(lobject_factory=lobject_subclass) self.assert_(isinstance(lo, lobject_subclass)) decorate_all_tests(LargeObjectTests, skip_if_no_lo, skip_lo_if_green) def skip_if_no_truncate(f): @wraps(f) def skip_if_no_truncate_(self): if self.conn.server_version < 80300: return self.skipTest( "the server doesn't support large object truncate") if not hasattr(psycopg2.extensions.lobject, 'truncate'): return self.skipTest("psycopg2 has been built against a libpq " "without large object truncate support.") return f(self)
# We don't expect people shooting snowmen as transaction ids, # so if something explodes in an encode error I don't mind. # Let's just check uniconde is accepted as type. cnn = self.connect() cnn.set_client_encoding('utf8') cnn.tpc_begin(u"transaction-id") cnn.tpc_prepare() cnn.reset() xid = [ xid for xid in cnn.tpc_recover() if xid.database == dbname ][0] self.assertEqual(None, xid.format_id) self.assertEqual('transaction-id', xid.gtrid) self.assertEqual(None, xid.bqual) def test_cancel_fails_prepared(self): cnn = self.connect() cnn.tpc_begin('cancel') cnn.tpc_prepare() self.assertRaises(psycopg2.ProgrammingError, cnn.cancel) from testutils import skip_if_tpc_disabled decorate_all_tests(ConnectionTwoPhaseTests, skip_if_tpc_disabled) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == "__main__": unittest.main()
curs = self.conn.cursor() # It seems we cannot do this, but now at least we propagate the error # self.assertRaises(ZeroDivisionError, # curs.copy_from, BrokenRead(), "tcopy") try: curs.copy_from(BrokenRead(), "tcopy") except Exception, e: self.assert_('ZeroDivisionError' in str(e)) def test_copy_to_propagate_error(self): class BrokenWrite(_base): def write(self, data): return 1 / 0 curs = self.conn.cursor() curs.execute("insert into tcopy values (10, 'hi')") self.assertRaises(ZeroDivisionError, curs.copy_to, BrokenWrite(), "tcopy") decorate_all_tests(CopyTests, skip_copy_if_green) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == "__main__": unittest.main()
rv = self.cast(b(buf)) if sys.version_info[0] < 3: tgt = ''.join(map(chr, range(32))) \ + string.ascii_letters * 2 + '\\' else: tgt = bytes(range(32)) + \ (string.ascii_letters * 2 + '\\').encode('ascii') self.assertEqual(rv, tgt) def skip_if_cant_cast(f): @wraps(f) def skip_if_cant_cast_(self, *args, **kwargs): if self._cast is None: return self.skipTest("can't test bytea parser: %s - %s" % (self._exc.__class__.__name__, self._exc)) return f(self, *args, **kwargs) return skip_if_cant_cast_ decorate_all_tests(ByteaParserTest, skip_if_cant_cast) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == "__main__": unittest.main()
buf += '\\\\' rv = self.cast(b(buf)) if sys.version_info[0] < 3: tgt = ''.join(map(chr, range(32))) \ + string.ascii_letters * 2 + '\\' else: tgt = bytes(range(32)) + \ (string.ascii_letters * 2 + '\\').encode('ascii') self.assertEqual(rv, tgt) def skip_if_cant_cast(f): def skip_if_cant_cast_(self, *args, **kwargs): if self._cast is None: return self.skipTest("can't test bytea parser: %s - %s" % (self._exc.__class__.__name__, self._exc)) return f(self, *args, **kwargs) return skip_if_cant_cast_ decorate_all_tests(ByteaParserTest, skip_if_cant_cast) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == "__main__": unittest.main()
self.assertRaises(TypeError, curs.copy_expert, 'COPY tcopy (data) FROM STDIN', f) def test_copy_no_column_limit(self): cols = [ "c%050d" % i for i in range(200) ] curs = self.conn.cursor() curs.execute('CREATE TEMPORARY TABLE manycols (%s)' % ',\n'.join( [ "%s int" % c for c in cols])) curs.execute("INSERT INTO manycols DEFAULT VALUES") f = StringIO() curs.copy_to(f, "manycols", columns = cols) f.seek(0) self.assertEqual(f.read().split(), ['\\N'] * len(cols)) f.seek(0) curs.copy_from(f, "manycols", columns = cols) curs.execute("select count(*) from manycols;") self.assertEqual(curs.fetchone()[0], 2) decorate_all_tests(CopyTests, skip_if_green) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == "__main__": unittest.main()
self.lo_oid = lo.oid self.conn.tpc_prepare() try: self.assertRaises(psycopg2.ProgrammingError, lo.read, 5) finally: self.conn.tpc_commit() def test_large_oid(self): # Test we don't overflow with an oid not fitting a signed int try: self.conn.lobject(0xFFFFFFFE) except psycopg2.OperationalError: pass decorate_all_tests(LargeObjectTests, skip_if_no_lo, skip_lo_if_green) def skip_if_no_truncate(f): @wraps(f) def skip_if_no_truncate_(self): if self.conn.server_version < 80300: return self.skipTest( "the server doesn't support large object truncate") if not hasattr(psycopg2.extensions.lobject, 'truncate'): return self.skipTest( "psycopg2 has been built against a libpq " "without large object truncate support.") return f(self)
self.assertRaises(ValueError, psycopg2.extras.execute_values, cur, "insert", []) self.assertRaises(ValueError, psycopg2.extras.execute_values, cur, "insert %s and %s", []) self.assertRaises(ValueError, psycopg2.extras.execute_values, cur, "insert %f", []) self.assertRaises(ValueError, psycopg2.extras.execute_values, cur, "insert %f %s", []) def test_percent_escape(self): cur = self.conn.cursor() psycopg2.extras.execute_values(cur, "insert into testfast (id, data) values %s -- a%%b", [(1, 'hi')]) self.assert_(b'a%%b' not in cur.query) self.assert_(b'a%b' in cur.query) cur.execute("select id, data from testfast") self.assertEqual(cur.fetchall(), [(1, 'hi')]) testutils.decorate_all_tests(TestExecuteValues, testutils.skip_before_postgres(8, 2)) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == "__main__": unittest.main()
) self.assertEqual(r[0][0],'foo', 'callproc produced invalid results' ) finally: con.close() def test_setoutputsize(self): # psycopg2's setoutputsize() is a no-op pass def test_nextset(self): # psycopg2 does not implement nextset() pass class Psycopg2TPCTests(dbapi20_tpc.TwoPhaseCommitTests, unittest.TestCase): driver = psycopg2 def connect(self): return psycopg2.connect(dsn=dsn) decorate_all_tests(Psycopg2TPCTests, skip_if_tpc_disabled) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == '__main__': unittest.main()
class QmarkpgTests(dbapi20.DatabaseAPI20Test, unittest.TestCase): driver = qmarkpg connect_args = () connect_kw_args = {'dsn': dsn} lower_func = 'lower' # For stored procedure test def test_setoutputsize(self): # psycopg2's setoutputsize() is a no-op pass def test_nextset(self): # psycopg2 does not implement nextset() pass class QmarkpgTPCTests(dbapi20_tpc.TwoPhaseCommitTests, unittest.TestCase): driver = qmarkpg def connect(self): return qmarkpg.connect(dsn=dsn) decorate_all_tests(QmarkpgTPCTests, skip_if_tpc_disabled) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == '__main__': unittest.main()
self.assertRaises(psycopg2.ProgrammingError, lo.read, 5) @skip_if_tpc_disabled def test_read_after_tpc_prepare(self): self.conn.tpc_begin('test_lobject') lo = self.conn.lobject() self.lo_oid = lo.oid self.conn.tpc_prepare() try: self.assertRaises(psycopg2.ProgrammingError, lo.read, 5) finally: self.conn.tpc_commit() decorate_all_tests(LargeObjectTests, skip_if_no_lo) decorate_all_tests(LargeObjectTests, skip_if_green) def skip_if_no_truncate(f): def skip_if_no_truncate_(self): if self.conn.server_version < 80300: return self.skipTest( "the server doesn't support large object truncate") if not hasattr(psycopg2.extensions.lobject, 'truncate'): return self.skipTest( "psycopg2 has been built against a libpq " "without large object truncate support.") return f(self)
psycopg2.extras.register_ipaddress(cur) cur.execute("select '{NULL,127.0.0.1,::ffff:102:300/128}'::cidr[]") l = cur.fetchone()[0] self.assert_(l[0] is None) self.assertEquals(l[1], ip.ip_network('127.0.0.1')) self.assertEquals(l[2], ip.ip_network('::ffff:102:300/128')) self.assert_(isinstance(l[1], ip.IPv4Network), l) self.assert_(isinstance(l[2], ip.IPv6Network), l) def test_cidr_adapt(self): import ipaddress as ip cur = self.conn.cursor() psycopg2.extras.register_ipaddress(cur) cur.execute("select %s", [ip.ip_network('127.0.0.0/24')]) self.assertEquals(cur.fetchone()[0], '127.0.0.0/24') cur.execute("select %s", [ip.ip_network('::ffff:102:300/128')]) self.assertEquals(cur.fetchone()[0], '::ffff:102:300/128') decorate_all_tests(NetworkingTestCase, skip_if_no_ipaddress) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == "__main__": unittest.main()
cur = self.conn.cursor() psycopg2.extras.register_ipaddress(cur) cur.execute("select '{NULL,127.0.0.1,::ffff:102:300/128}'::cidr[]") l = cur.fetchone()[0] self.assert_(l[0] is None) self.assertEquals(l[1], ip.ip_network('127.0.0.1')) self.assertEquals(l[2], ip.ip_network('::ffff:102:300/128')) self.assert_(isinstance(l[1], ip.IPv4Network), l) self.assert_(isinstance(l[2], ip.IPv6Network), l) def test_cidr_adapt(self): import ipaddress as ip cur = self.conn.cursor() psycopg2.extras.register_ipaddress(cur) cur.execute("select %s", [ip.ip_network('127.0.0.0/24')]) self.assertEquals(cur.fetchone()[0], '127.0.0.0/24') cur.execute("select %s", [ip.ip_network('::ffff:102:300/128')]) self.assertEquals(cur.fetchone()[0], '::ffff:102:300/128') decorate_all_tests(NetworkingTestCase, skip_if_no_ipaddress) def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) if __name__ == "__main__": unittest.main()