bpo-45512: Raise exception if sqlite3.Connection.__init__ is called with bad isolation level (#29561)

* bpo-45512: Raise sqlite3.Connection.__init__ is called with bad isolation level

* Also explicitly test allowed isolation levels

* Use subTest for better error messages if something goes wrong

* Update Lib/test/test_sqlite3/test_dbapi.py

Co-authored-by: Dong-hee Na <donghee.na92@gmail.com>

Co-authored-by: Dong-hee Na <donghee.na92@gmail.com>
This commit is contained in:
Erlend Egeberg Aasland 2021-11-15 13:55:38 +01:00 committed by GitHub
parent b567b9d74b
commit 822c3dcce3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 5 deletions

View file

@ -48,8 +48,8 @@ def managed_connect(*args, in_mem=False, **kwargs):
# Helper for temporary memory databases
def memory_database():
cx = sqlite.connect(":memory:")
def memory_database(*args, **kwargs):
cx = sqlite.connect(":memory:", *args, **kwargs)
return contextlib.closing(cx)
@ -509,6 +509,20 @@ def test_connection_bad_limit_category(self):
self.assertRaisesRegex(sqlite.ProgrammingError, msg,
self.cx.setlimit, cat, 0)
def test_connection_init_bad_isolation_level(self):
msg = (
"isolation_level string must be '', 'DEFERRED', 'IMMEDIATE', or "
"'EXCLUSIVE'"
)
with self.assertRaisesRegex(ValueError, msg):
memory_database(isolation_level="BOGUS")
def test_connection_init_good_isolation_levels(self):
for level in ("", "DEFERRED", "IMMEDIATE", "EXCLUSIVE", None):
with self.subTest(level=level):
with memory_database(isolation_level=level) as cx:
cx.execute("select 'ok'")
class UninitialisedConnectionTests(unittest.TestCase):
def setUp(self):