summaryrefslogtreecommitdiff
path: root/test/base/test_except.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2009-06-10 21:18:24 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2009-06-10 21:18:24 +0000
commit45cec095b4904ba71425d2fe18c143982dd08f43 (patch)
treeaf5e540fdcbf1cb2a3337157d69d4b40be010fa8 /test/base/test_except.py
parent698a3c1ac665e7cd2ef8d5ad3ebf51b7fe6661f4 (diff)
downloadsqlalchemy-45cec095b4904ba71425d2fe18c143982dd08f43.tar.gz
- unit tests have been migrated from unittest to nose.
See README.unittests for information on how to run the tests. [ticket:970]
Diffstat (limited to 'test/base/test_except.py')
-rw-r--r--test/base/test_except.py119
1 files changed, 119 insertions, 0 deletions
diff --git a/test/base/test_except.py b/test/base/test_except.py
new file mode 100644
index 000000000..efb18a153
--- /dev/null
+++ b/test/base/test_except.py
@@ -0,0 +1,119 @@
+"""Tests exceptions and DB-API exception wrapping."""
+import exceptions as stdlib_exceptions
+from sqlalchemy import exc as sa_exceptions
+from sqlalchemy.test import TestBase
+
+
+class Error(stdlib_exceptions.StandardError):
+ """This class will be old-style on <= 2.4 and new-style on >= 2.5."""
+class DatabaseError(Error):
+ pass
+class OperationalError(DatabaseError):
+ pass
+class ProgrammingError(DatabaseError):
+ def __str__(self):
+ return "<%s>" % self.bogus
+class OutOfSpec(DatabaseError):
+ pass
+
+
+class WrapTest(TestBase):
+ def test_db_error_normal(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ '', [], OperationalError())
+ except sa_exceptions.DBAPIError:
+ self.assert_(True)
+
+ def test_tostring(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ 'this is a message', None, OperationalError())
+ except sa_exceptions.DBAPIError, exc:
+ assert str(exc) == "(OperationalError) 'this is a message' None"
+
+ def test_tostring_large_dict(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ 'this is a message', {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'h':8, 'i':9, 'j':10, 'k':11}, OperationalError())
+ except sa_exceptions.DBAPIError, exc:
+ assert str(exc).startswith("(OperationalError) 'this is a message' {")
+
+ def test_tostring_large_list(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ 'this is a message', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], OperationalError())
+ except sa_exceptions.DBAPIError, exc:
+ assert str(exc).startswith("(OperationalError) 'this is a message' [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]")
+
+ def test_tostring_large_executemany(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ 'this is a message', [{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},], OperationalError())
+ except sa_exceptions.DBAPIError, exc:
+ assert str(exc) == "(OperationalError) 'this is a message' [{1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}]", str(exc)
+
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ 'this is a message', [{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},], OperationalError())
+ except sa_exceptions.DBAPIError, exc:
+ assert str(exc) == "(OperationalError) 'this is a message' [{1: 1}, {1: 1}] ... and a total of 11 bound parameter sets"
+
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ 'this is a message', [(1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,)], OperationalError())
+ except sa_exceptions.DBAPIError, exc:
+ assert str(exc) == "(OperationalError) 'this is a message' [(1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,)]"
+
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ 'this is a message', [(1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), ], OperationalError())
+ except sa_exceptions.DBAPIError, exc:
+ assert str(exc) == "(OperationalError) 'this is a message' [(1,), (1,)] ... and a total of 11 bound parameter sets"
+
+ def test_db_error_busted_dbapi(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ '', [], ProgrammingError())
+ except sa_exceptions.DBAPIError, e:
+ self.assert_(True)
+ self.assert_('Error in str() of DB-API' in e.args[0])
+
+ def test_db_error_noncompliant_dbapi(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ '', [], OutOfSpec())
+ except sa_exceptions.DBAPIError, e:
+ self.assert_(e.__class__ is sa_exceptions.DBAPIError)
+ except OutOfSpec:
+ self.assert_(False)
+
+ # Make sure the DatabaseError recognition logic is limited to
+ # subclasses of sqlalchemy.exceptions.DBAPIError
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ '', [], sa_exceptions.ArgumentError())
+ except sa_exceptions.DBAPIError, e:
+ self.assert_(e.__class__ is sa_exceptions.DBAPIError)
+ except sa_exceptions.ArgumentError:
+ self.assert_(False)
+
+ def test_db_error_keyboard_interrupt(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ '', [], stdlib_exceptions.KeyboardInterrupt())
+ except sa_exceptions.DBAPIError:
+ self.assert_(False)
+ except stdlib_exceptions.KeyboardInterrupt:
+ self.assert_(True)
+
+ def test_db_error_system_exit(self):
+ try:
+ raise sa_exceptions.DBAPIError.instance(
+ '', [], stdlib_exceptions.SystemExit())
+ except sa_exceptions.DBAPIError:
+ self.assert_(False)
+ except stdlib_exceptions.SystemExit:
+ self.assert_(True)
+
+