aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-05-21 08:05:13 -0700
committerGitHub <noreply@github.com>2022-05-21 08:05:13 -0700
commit76b6ed17eab5f0c9d893b8a141269cbfb0de2294 (patch)
tree585b8d7d3d141c0595eb47f9a1bc4bc3ca4594bf
parent[3.11] GH-92898: Make _Py_Cast C++ version compatible with cast operator (gh-... (diff)
downloadcpython-76b6ed17eab5f0c9d893b8a141269cbfb0de2294.tar.gz
cpython-76b6ed17eab5f0c9d893b8a141269cbfb0de2294.tar.bz2
cpython-76b6ed17eab5f0c9d893b8a141269cbfb0de2294.zip
Improve tests for opening Sqlite by URI (GH-93047)
* Test with with escaped non-ascii characters * Test read-only open of existing DB. (cherry picked from commit 4e2b66489289cfd4db2a02edf173ac03cbb2fffe) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
-rw-r--r--Lib/test/test_sqlite3/test_dbapi.py47
1 files changed, 42 insertions, 5 deletions
diff --git a/Lib/test/test_sqlite3/test_dbapi.py b/Lib/test/test_sqlite3/test_dbapi.py
index 2949e13e356..07adbc878a8 100644
--- a/Lib/test/test_sqlite3/test_dbapi.py
+++ b/Lib/test/test_sqlite3/test_dbapi.py
@@ -670,21 +670,58 @@ class OpenTests(unittest.TestCase):
@unittest.skipIf(sys.platform == "darwin", "skipped on macOS")
@unittest.skipUnless(TESTFN_UNDECODABLE, "only works if there are undecodable paths")
def test_open_with_undecodable_path(self):
- self.addCleanup(unlink, TESTFN_UNDECODABLE)
path = TESTFN_UNDECODABLE
- with managed_connect(path) as cx:
+ self.addCleanup(unlink, path)
+ with managed_connect(path, in_mem=True) as cx:
self.assertTrue(os.path.exists(path))
cx.execute(self._sql)
def test_open_uri(self):
- with managed_connect(TESTFN) as cx:
+ path = TESTFN
+ uri = "file:" + urllib.parse.quote(os.fsencode(path))
+ self.assertFalse(os.path.exists(path))
+ with managed_connect(uri, uri=True) as cx:
+ self.assertTrue(os.path.exists(path))
cx.execute(self._sql)
- with managed_connect(f"file:{TESTFN}", uri=True) as cx:
+
+ def test_open_unquoted_uri(self):
+ path = TESTFN
+ uri = "file:" + path
+ self.assertFalse(os.path.exists(path))
+ with managed_connect(uri, uri=True) as cx:
+ self.assertTrue(os.path.exists(path))
cx.execute(self._sql)
+
+ def test_open_uri_readonly(self):
+ path = TESTFN
+ self.addCleanup(unlink, path)
+ uri = "file:" + urllib.parse.quote(os.fsencode(path)) + "?mode=ro"
+ self.assertFalse(os.path.exists(path))
+ # Cannot create new DB
with self.assertRaises(sqlite.OperationalError):
- with managed_connect(f"file:{TESTFN}?mode=ro", uri=True) as cx:
+ sqlite.connect(uri, uri=True)
+ self.assertFalse(os.path.exists(path))
+ sqlite.connect(path).close()
+ self.assertTrue(os.path.exists(path))
+ # Cannot modify new DB
+ with managed_connect(uri, uri=True) as cx:
+ with self.assertRaises(sqlite.OperationalError):
cx.execute(self._sql)
+ @unittest.skipIf(sys.platform == "win32", "skipped on Windows")
+ @unittest.skipIf(sys.platform == "darwin", "skipped on macOS")
+ @unittest.skipUnless(TESTFN_UNDECODABLE, "only works if there are undecodable paths")
+ def test_open_undecodable_uri(self):
+ path = TESTFN_UNDECODABLE
+ uri = "file:" + urllib.parse.quote(path)
+ self.assertFalse(os.path.exists(path))
+ try:
+ with managed_connect(uri, uri=True, in_mem=True) as cx:
+ self.assertTrue(os.path.exists(path))
+ cx.execute(self._sql)
+ finally:
+ unlink(path)
+
def test_factory_database_arg(self):
def factory(database, *args, **kwargs):
nonlocal database_arg