Skip to content

Commit 73d9e24

Browse files
committed
Test: add read-only directory and file tests for dbm.sqlite3
1 parent 759f218 commit 73d9e24

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

Lib/test/test_dbm_sqlite3.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
import stat
23
import sys
34
import unittest
45
from contextlib import closing
@@ -115,6 +116,40 @@ def test_readonly_open_without_wal_shm(self):
115116
self.assertEqual(self.db[b"key"], b"value")
116117

117118

119+
class ReadOnlyFilesystem(unittest.TestCase):
120+
121+
def setUp(self):
122+
self.test_dir = os_helper.TESTFN
123+
os.mkdir(self.test_dir)
124+
self.db_path = os.path.join(self.test_dir, "test.db")
125+
126+
db = dbm_sqlite3.open(self.db_path, "c")
127+
db[b"key"] = b"value"
128+
db.close()
129+
130+
def tearDown(self):
131+
os.chmod(self.db_path, stat.S_IWRITE)
132+
os.chmod(self.test_dir, stat.S_IWRITE | stat.S_IEXEC | stat.S_IREAD)
133+
os_helper.rmtree(self.test_dir)
134+
135+
def test_open_readonly_dir_success_ro(self):
136+
os.chmod(self.test_dir, stat.S_IREAD | stat.S_IEXEC)
137+
with dbm_sqlite3.open(self.db_path, "r") as db:
138+
self.assertEqual(db[b"key"], b"value")
139+
140+
def test_open_readonly_file_success(self):
141+
os.chmod(self.db_path, stat.S_IREAD)
142+
with dbm_sqlite3.open(self.db_path, "r") as db:
143+
self.assertEqual(db[b"key"], b"value")
144+
145+
def test_open_readonly_file_fail_rw(self):
146+
os.chmod(self.db_path, stat.S_IREAD)
147+
with dbm_sqlite3.open(self.db_path, "w") as db:
148+
with self.assertRaises(OSError):
149+
db[b"newkey"] = b"newvalue"
150+
151+
152+
118153
class ReadWrite(_SQLiteDbmTests):
119154

120155
def setUp(self):

0 commit comments

Comments
 (0)