diff options
author | Erlend Egeberg Aasland <erlend.aasland@innova.no> | 2021-09-21 13:15:54 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-21 13:15:54 (GMT) |
commit | 3e3ff09058a71b92c32d1d7dc32470c0cf49300c (patch) | |
tree | 10016af6d95732c5ed9799513dfd909ea13fe9ee | |
parent | 050d1035957379d70e8601e6f5636637716a264b (diff) | |
download | cpython-3e3ff09058a71b92c32d1d7dc32470c0cf49300c.zip cpython-3e3ff09058a71b92c32d1d7dc32470c0cf49300c.tar.gz cpython-3e3ff09058a71b92c32d1d7dc32470c0cf49300c.tar.bz2 |
bpo-44958: Fix ref. leak introduced in GH-27844 (GH-28490)
Modify managed_connect() helper to support in-memory databases. Use it
for the regression tests added in GH-27844.
Automerge-Triggered-By: GH:pablogsal
-rw-r--r-- | Lib/sqlite3/test/test_dbapi.py | 5 | ||||
-rw-r--r-- | Lib/sqlite3/test/test_regression.py | 61 |
2 files changed, 36 insertions, 30 deletions
diff --git a/Lib/sqlite3/test/test_dbapi.py b/Lib/sqlite3/test/test_dbapi.py index 34cadee..732e21d 100644 --- a/Lib/sqlite3/test/test_dbapi.py +++ b/Lib/sqlite3/test/test_dbapi.py @@ -38,13 +38,14 @@ from test.support.os_helper import TESTFN, unlink, temp_dir # Helper for tests using TESTFN @contextlib.contextmanager -def managed_connect(*args, **kwargs): +def managed_connect(*args, in_mem=False, **kwargs): cx = sqlite.connect(*args, **kwargs) try: yield cx finally: cx.close() - unlink(TESTFN) + if not in_mem: + unlink(TESTFN) class ModuleTests(unittest.TestCase): diff --git a/Lib/sqlite3/test/test_regression.py b/Lib/sqlite3/test/test_regression.py index d41f118..ff35673 100644 --- a/Lib/sqlite3/test/test_regression.py +++ b/Lib/sqlite3/test/test_regression.py @@ -28,6 +28,8 @@ import weakref import functools from test import support +from .test_dbapi import managed_connect + class RegressionTests(unittest.TestCase): def setUp(self): self.con = sqlite.connect(":memory:") @@ -437,38 +439,41 @@ class RegressionTests(unittest.TestCase): self.assertEqual(val, b'') def test_table_lock_cursor_replace_stmt(self): - con = sqlite.connect(":memory:") - cur = con.cursor() - cur.execute("create table t(t)") - cur.executemany("insert into t values(?)", ((v,) for v in range(5))) - con.commit() - cur.execute("select t from t") - cur.execute("drop table t") - con.commit() + with managed_connect(":memory:", in_mem=True) as con: + cur = con.cursor() + cur.execute("create table t(t)") + cur.executemany("insert into t values(?)", + ((v,) for v in range(5))) + con.commit() + cur.execute("select t from t") + cur.execute("drop table t") + con.commit() def test_table_lock_cursor_dealloc(self): - con = sqlite.connect(":memory:") - con.execute("create table t(t)") - con.executemany("insert into t values(?)", ((v,) for v in range(5))) - con.commit() - cur = con.execute("select t from t") - del cur - con.execute("drop table t") - con.commit() + with managed_connect(":memory:", in_mem=True) as con: + con.execute("create table t(t)") + con.executemany("insert into t values(?)", + ((v,) for v in range(5))) + con.commit() + cur = con.execute("select t from t") + del cur + con.execute("drop table t") + con.commit() def test_table_lock_cursor_non_readonly_select(self): - con = sqlite.connect(":memory:") - con.execute("create table t(t)") - con.executemany("insert into t values(?)", ((v,) for v in range(5))) - con.commit() - def dup(v): - con.execute("insert into t values(?)", (v,)) - return - con.create_function("dup", 1, dup) - cur = con.execute("select dup(t) from t") - del cur - con.execute("drop table t") - con.commit() + with managed_connect(":memory:", in_mem=True) as con: + con.execute("create table t(t)") + con.executemany("insert into t values(?)", + ((v,) for v in range(5))) + con.commit() + def dup(v): + con.execute("insert into t values(?)", (v,)) + return + con.create_function("dup", 1, dup) + cur = con.execute("select dup(t) from t") + del cur + con.execute("drop table t") + con.commit() if __name__ == "__main__": |