comparison tests/test_walk.py @ 273:c02a57df2a29

treesum: - WalkDirEntry tests with a FIFO special file - WalkDirEntry.is_reg Also all to be handled special files in the notes document.
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 19 Feb 2025 09:12:30 +0100
parents b4137ebd8e79
children 224725fd9f2f
comparison
equal deleted inserted replaced
272:b4137ebd8e79 273:c02a57df2a29
4 """ 4 """
5 5
6 from __future__ import absolute_import, print_function 6 from __future__ import absolute_import, print_function
7 7
8 import os 8 import os
9 import shutil
9 import sys 10 import sys
10 import unittest 11 import unittest
11 12
12 from _test_setup import DATADIR 13 from _test_setup import (DATADIR, TMPDIR)
13 14
14 from cutils.util import walk 15 from cutils.util import walk
15 16
16 17
17 class SurrogateEscapeTests(unittest.TestCase): 18 class SurrogateEscapeTests(unittest.TestCase):
204 205
205 def test_symlink_to_directory(self): 206 def test_symlink_to_directory(self):
206 entry = walk.WalkDirEntry.from_path_name( 207 entry = walk.WalkDirEntry.from_path_name(
207 DATADIR, "tree-1-s") 208 DATADIR, "tree-1-s")
208 self.assertTrue(entry.is_symlink) 209 self.assertTrue(entry.is_symlink)
210 self.assertFalse(entry.is_reg)
209 self.assertTrue(entry.is_dir) 211 self.assertTrue(entry.is_dir)
210 self.assertIsNotNone(entry.stat) 212 self.assertIsNotNone(entry.stat)
211 213
212 def test_broken_symlink_to_directory(self): 214 def test_broken_symlink_to_directory(self):
213 entry = walk.WalkDirEntry.from_path_name( 215 entry = walk.WalkDirEntry.from_path_name(
214 DATADIR, "tree-nn-s") 216 DATADIR, "tree-nn-s")
215 self.assertTrue(entry.is_symlink) 217 self.assertTrue(entry.is_symlink)
218 self.assertFalse(entry.is_reg)
216 self.assertFalse(entry.is_dir) 219 self.assertFalse(entry.is_dir)
217 self.assertIsNone(entry.stat) 220 self.assertIsNone(entry.stat)
218 221
219 def test_real_directory(self): 222 def test_real_directory(self):
220 entry = walk.WalkDirEntry.from_path_name( 223 entry = walk.WalkDirEntry.from_path_name(
221 DATADIR, "tree-1") 224 DATADIR, "tree-1")
222 self.assertFalse(entry.is_symlink) 225 self.assertFalse(entry.is_symlink)
226 self.assertFalse(entry.is_reg)
223 self.assertTrue(entry.is_dir) 227 self.assertTrue(entry.is_dir)
224 self.assertIsNotNone(entry.stat) 228 self.assertIsNotNone(entry.stat)
225 229
226 def test_symlink_to_file(self): 230 def test_symlink_to_file(self):
227 entry = walk.WalkDirEntry.from_path_name( 231 entry = walk.WalkDirEntry.from_path_name(
228 os.path.join(DATADIR, "tree-1"), "file-1-1-s.txt") 232 os.path.join(DATADIR, "tree-1"), "file-1-1-s.txt")
229 self.assertTrue(entry.is_symlink) 233 self.assertTrue(entry.is_symlink)
234 self.assertTrue(entry.is_reg)
230 self.assertFalse(entry.is_dir) 235 self.assertFalse(entry.is_dir)
231 self.assertIsNotNone(entry.stat) 236 self.assertIsNotNone(entry.stat)
232 237
233 def test_broken_symlink_to_file(self): 238 def test_broken_symlink_to_file(self):
234 entry = walk.WalkDirEntry.from_path_name( 239 entry = walk.WalkDirEntry.from_path_name(
235 os.path.join(DATADIR, "tree-1"), "file-1-nn-s.txt") 240 os.path.join(DATADIR, "tree-1"), "file-1-nn-s.txt")
236 self.assertTrue(entry.is_symlink) 241 self.assertTrue(entry.is_symlink)
242 self.assertFalse(entry.is_reg)
237 self.assertFalse(entry.is_dir) 243 self.assertFalse(entry.is_dir)
238 self.assertIsNone(entry.stat) 244 self.assertIsNone(entry.stat)
239 245
240 def test_real_file(self): 246 def test_real_file(self):
241 entry = walk.WalkDirEntry.from_path_name( 247 entry = walk.WalkDirEntry.from_path_name(
242 os.path.join(DATADIR, "tree-1"), "file-1-1.txt") 248 os.path.join(DATADIR, "tree-1"), "file-1-1.txt")
243 self.assertFalse(entry.is_symlink) 249 self.assertFalse(entry.is_symlink)
250 self.assertTrue(entry.is_reg)
244 self.assertFalse(entry.is_dir) 251 self.assertFalse(entry.is_dir)
245 self.assertIsNotNone(entry.stat) 252 self.assertIsNotNone(entry.stat)
246 253
247 def test_real_file_via_dir_symlink(self): 254 def test_real_file_via_dir_symlink(self):
248 entry = walk.WalkDirEntry.from_path_name( 255 entry = walk.WalkDirEntry.from_path_name(
249 os.path.join(DATADIR, "tree-1-s"), "file-1-1.txt") 256 os.path.join(DATADIR, "tree-1-s"), "file-1-1.txt")
250 self.assertFalse(entry.is_symlink) 257 self.assertFalse(entry.is_symlink)
251 self.assertFalse(entry.is_dir) 258 self.assertTrue(entry.is_reg)
252 self.assertIsNotNone(entry.stat) 259 self.assertFalse(entry.is_dir)
260 self.assertIsNotNone(entry.stat)
261
262
263 @unittest.skipIf(not hasattr(os, "mkfifo"), "Needs os.mkfifo()")
264 class FIFOTests(unittest.TestCase):
265
266 def setUp(self):
267 if not os.path.isdir(TMPDIR):
268 os.mkdir(TMPDIR)
269
270 def tearDown(self):
271 if os.path.isdir(TMPDIR):
272 shutil.rmtree(TMPDIR)
273
274 def test_real_mkfifo(self):
275 fifopath = os.path.join(TMPDIR, "test.fifo")
276 os.mkfifo(fifopath)
277 entry = walk.WalkDirEntry.from_path_name(TMPDIR, "test.fifo")
278 self.assertFalse(entry.is_symlink)
279 self.assertFalse(entry.is_reg)
280 self.assertFalse(entry.is_dir)
281 self.assertIsNotNone(entry.stat)
282
283 def test_symlink_to_mkfifo(self):
284 fifopath = os.path.join(TMPDIR, "test.fifo")
285 fifo_s_path = os.path.join(TMPDIR, "test-s.fifo")
286 os.mkfifo(fifopath)
287 os.symlink(fifopath, fifo_s_path)
288 entry = walk.WalkDirEntry.from_path_name(TMPDIR, "test-s.fifo")
289 self.assertTrue(entry.is_symlink)
290 self.assertFalse(entry.is_reg)
291 self.assertFalse(entry.is_dir)
292 self.assertIsNotNone(entry.stat)
293
294 def test_broken_symlink_to_mkfifo(self):
295 fifopath = os.path.join(TMPDIR, "test.fifo")
296 fifo_s_path = os.path.join(TMPDIR, "test-s.fifo")
297 os.mkfifo(fifopath)
298 os.symlink(fifopath, fifo_s_path)
299 os.unlink(fifopath)
300 entry = walk.WalkDirEntry.from_path_name(TMPDIR, "test-s.fifo")
301 self.assertTrue(entry.is_symlink)
302 self.assertFalse(entry.is_reg)
303 self.assertFalse(entry.is_dir)
304 self.assertIsNone(entry.stat)
253 305
254 306
255 if __name__ == "__main__": 307 if __name__ == "__main__":
256 sys.exit(unittest.main()) 308 sys.exit(unittest.main())