diff 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
line wrap: on
line diff
--- a/tests/test_walk.py	Tue Feb 18 19:30:40 2025 +0100
+++ b/tests/test_walk.py	Wed Feb 19 09:12:30 2025 +0100
@@ -6,10 +6,11 @@
 from __future__ import absolute_import, print_function
 
 import os
+import shutil
 import sys
 import unittest
 
-from _test_setup import DATADIR
+from _test_setup import (DATADIR, TMPDIR)
 
 from cutils.util import walk
 
@@ -206,6 +207,7 @@
         entry = walk.WalkDirEntry.from_path_name(
             DATADIR, "tree-1-s")
         self.assertTrue(entry.is_symlink)
+        self.assertFalse(entry.is_reg)
         self.assertTrue(entry.is_dir)
         self.assertIsNotNone(entry.stat)
 
@@ -213,6 +215,7 @@
         entry = walk.WalkDirEntry.from_path_name(
             DATADIR, "tree-nn-s")
         self.assertTrue(entry.is_symlink)
+        self.assertFalse(entry.is_reg)
         self.assertFalse(entry.is_dir)
         self.assertIsNone(entry.stat)
 
@@ -220,6 +223,7 @@
         entry = walk.WalkDirEntry.from_path_name(
             DATADIR, "tree-1")
         self.assertFalse(entry.is_symlink)
+        self.assertFalse(entry.is_reg)
         self.assertTrue(entry.is_dir)
         self.assertIsNotNone(entry.stat)
 
@@ -227,6 +231,7 @@
         entry = walk.WalkDirEntry.from_path_name(
             os.path.join(DATADIR, "tree-1"), "file-1-1-s.txt")
         self.assertTrue(entry.is_symlink)
+        self.assertTrue(entry.is_reg)
         self.assertFalse(entry.is_dir)
         self.assertIsNotNone(entry.stat)
 
@@ -234,6 +239,7 @@
         entry = walk.WalkDirEntry.from_path_name(
             os.path.join(DATADIR, "tree-1"), "file-1-nn-s.txt")
         self.assertTrue(entry.is_symlink)
+        self.assertFalse(entry.is_reg)
         self.assertFalse(entry.is_dir)
         self.assertIsNone(entry.stat)
 
@@ -241,6 +247,7 @@
         entry = walk.WalkDirEntry.from_path_name(
             os.path.join(DATADIR, "tree-1"), "file-1-1.txt")
         self.assertFalse(entry.is_symlink)
+        self.assertTrue(entry.is_reg)
         self.assertFalse(entry.is_dir)
         self.assertIsNotNone(entry.stat)
 
@@ -248,9 +255,54 @@
         entry = walk.WalkDirEntry.from_path_name(
             os.path.join(DATADIR, "tree-1-s"), "file-1-1.txt")
         self.assertFalse(entry.is_symlink)
+        self.assertTrue(entry.is_reg)
         self.assertFalse(entry.is_dir)
         self.assertIsNotNone(entry.stat)
 
 
+@unittest.skipIf(not hasattr(os, "mkfifo"), "Needs os.mkfifo()")
+class FIFOTests(unittest.TestCase):
+
+    def setUp(self):
+        if not os.path.isdir(TMPDIR):
+            os.mkdir(TMPDIR)
+
+    def tearDown(self):
+        if os.path.isdir(TMPDIR):
+            shutil.rmtree(TMPDIR)
+
+    def test_real_mkfifo(self):
+        fifopath = os.path.join(TMPDIR, "test.fifo")
+        os.mkfifo(fifopath)
+        entry = walk.WalkDirEntry.from_path_name(TMPDIR, "test.fifo")
+        self.assertFalse(entry.is_symlink)
+        self.assertFalse(entry.is_reg)
+        self.assertFalse(entry.is_dir)
+        self.assertIsNotNone(entry.stat)
+
+    def test_symlink_to_mkfifo(self):
+        fifopath = os.path.join(TMPDIR, "test.fifo")
+        fifo_s_path = os.path.join(TMPDIR, "test-s.fifo")
+        os.mkfifo(fifopath)
+        os.symlink(fifopath, fifo_s_path)
+        entry = walk.WalkDirEntry.from_path_name(TMPDIR, "test-s.fifo")
+        self.assertTrue(entry.is_symlink)
+        self.assertFalse(entry.is_reg)
+        self.assertFalse(entry.is_dir)
+        self.assertIsNotNone(entry.stat)
+
+    def test_broken_symlink_to_mkfifo(self):
+        fifopath = os.path.join(TMPDIR, "test.fifo")
+        fifo_s_path = os.path.join(TMPDIR, "test-s.fifo")
+        os.mkfifo(fifopath)
+        os.symlink(fifopath, fifo_s_path)
+        os.unlink(fifopath)
+        entry = walk.WalkDirEntry.from_path_name(TMPDIR, "test-s.fifo")
+        self.assertTrue(entry.is_symlink)
+        self.assertFalse(entry.is_reg)
+        self.assertFalse(entry.is_dir)
+        self.assertIsNone(entry.stat)
+
+
 if __name__ == "__main__":
     sys.exit(unittest.main())