diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2022-05-21 08:05:13 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-21 08:05:13 -0700 |
commit | 76b6ed17eab5f0c9d893b8a141269cbfb0de2294 (patch) | |
tree | 585b8d7d3d141c0595eb47f9a1bc4bc3ca4594bf | |
parent | [3.11] GH-92898: Make _Py_Cast C++ version compatible with cast operator (gh-... (diff) | |
download | cpython-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.py | 47 |
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 |