]> granicus.if.org Git - python/commitdiff
add tests for mknod() and mkfifo() #9569
authorBenjamin Peterson <benjamin@python.org>
Tue, 17 Aug 2010 01:27:09 +0000 (01:27 +0000)
committerBenjamin Peterson <benjamin@python.org>
Tue, 17 Aug 2010 01:27:09 +0000 (01:27 +0000)
Lib/test/test_posix.py

index a22ebdf7c71c2d566748124fa0843925cf0ad9e3..b0d7fcea8e3b2a27577a22613dd6f2e884e40667 100644 (file)
@@ -11,6 +11,7 @@ import time
 import os
 import pwd
 import shutil
+import stat
 import unittest
 import warnings
 
@@ -199,6 +200,28 @@ class PosixTester(unittest.TestCase):
         if hasattr(posix, 'stat'):
             self.assertTrue(posix.stat(support.TESTFN))
 
+    @unittest.skipUnless(hasattr(posix, 'mkfifo'), "don't have mkfifo()")
+    def test_mkfifo(self):
+        support.unlink(support.TESTFN)
+        posix.mkfifo(support.TESTFN, stat.S_IRUSR | stat.S_IWUSR)
+        self.assertTrue(stat.S_ISFIFO(posix.stat(support.TESTFN).st_mode))
+
+    @unittest.skipUnless(hasattr(posix, 'mknod') and hasattr(stat, 'S_IFIFO'),
+                         "don't have mknod()/S_IFIFO")
+    def test_mknod(self):
+        # Test using mknod() to create a FIFO (the only use specified
+        # by POSIX).
+        support.unlink(support.TESTFN)
+        mode = stat.S_IFIFO | stat.S_IRUSR | stat.S_IWUSR
+        try:
+            posix.mknod(support.TESTFN, mode, 0)
+        except OSError as e:
+            # Some old systems don't allow unprivileged users to use
+            # mknod(), or only support creating device nodes.
+            self.assertIn(e.errno, (errno.EPERM, errno.EINVAL))
+        else:
+            self.assertTrue(stat.S_ISFIFO(posix.stat(support.TESTFN).st_mode))
+
     def _test_all_chown_common(self, chown_func, first_param):
         """Common code for chown, fchown and lchown tests."""
         if os.getuid() == 0: