unittests: add many checks for namespace ops
authorIustin Pop <iusty@k1024.org>
Sun, 29 Jun 2008 22:13:38 +0000 (00:13 +0200)
committerIustin Pop <iusty@k1024.org>
Sun, 29 Jun 2008 22:13:38 +0000 (00:13 +0200)
The patch adds in many places checks for result correctness when using
namespaces, and for the equality of non-ns versus ns usage.

test/test_xattr.py

index 49eff0764fb4a1f2202c87a18d047564894447c0..a5009b743baf60317695366cbd02c48a09630969 100644 (file)
@@ -7,12 +7,14 @@ import os
 import errno
 
 import xattr
+from xattr import NS_USER, XATTR_CREATE, XATTR_REPLACE
 
 TEST_DIR = os.environ.get("TESTDIR", ".")
 
 
 class xattrTest(unittest.TestCase):
-    USER_ATTR = "user.test"
+    USER_NN = "test"
+    USER_ATTR = "%s.%s" % (NS_USER, USER_NN)
     USER_VAL = "abc"
     MANYOPS_COUNT = 131072
 
@@ -53,7 +55,7 @@ class xattrTest(unittest.TestCase):
         self.failUnlessEqual(xattr.listxattr(item, symlink), [])
         self.failUnlessRaises(EnvironmentError, xattr.setxattr, item,
                               self.USER_ATTR, self.USER_VAL,
-                              xattr.XATTR_REPLACE)
+                              XATTR_REPLACE)
         try:
             xattr.setxattr(item, self.USER_ATTR, self.USER_VAL, 0, symlink)
         except IOError, err:
@@ -64,7 +66,7 @@ class xattrTest(unittest.TestCase):
             raise
         self.failUnlessRaises(EnvironmentError, xattr.setxattr, item,
                               self.USER_ATTR, self.USER_VAL,
-                              xattr.XATTR_CREATE)
+                              XATTR_CREATE)
         self.failUnlessEqual(xattr.listxattr(item, symlink), [self.USER_ATTR])
         self.failUnlessEqual(xattr.getxattr(item, self.USER_ATTR, symlink),
                              self.USER_VAL)
@@ -76,14 +78,24 @@ class xattrTest(unittest.TestCase):
         self.failUnlessRaises(EnvironmentError, xattr.removexattr,
                               item, self.USER_ATTR)
 
-    def _checkListSetGet(self, item, symlink=False):
+    def _checkListSetGet(self, item, symlink=False, use_ns=False):
         """check list, set, get operations against an item"""
         self.failUnlessEqual(xattr.list(item, symlink), [])
         self.failUnlessRaises(EnvironmentError, xattr.set, item,
                               self.USER_ATTR, self.USER_VAL,
-                              flags=xattr.XATTR_REPLACE)
+                              flags=XATTR_REPLACE)
+        self.failUnlessRaises(EnvironmentError, xattr.set, item,
+                              self.USER_NN, self.USER_VAL,
+                              flags=XATTR_REPLACE,
+                              namespace=NS_USER)
         try:
-            xattr.set(item, self.USER_ATTR, self.USER_VAL, nofollow=symlink)
+            if use_ns:
+                xattr.set(item, self.USER_NN, self.USER_VAL,
+                          namespace=NS_USER,
+                          nofollow=symlink)
+            else:
+                xattr.set(item, self.USER_ATTR, self.USER_VAL,
+                          nofollow=symlink)
         except IOError, err:
             if err.errno == errno.EPERM and symlink:
                 # symlinks may fail, in which case we abort the rest
@@ -92,17 +104,37 @@ class xattrTest(unittest.TestCase):
             raise
         self.failUnlessRaises(EnvironmentError, xattr.set, item,
                               self.USER_ATTR, self.USER_VAL,
-                              flags=xattr.XATTR_CREATE)
-        self.failUnlessEqual(xattr.list(item, symlink), [self.USER_ATTR])
+                              flags=XATTR_CREATE)
+        self.failUnlessRaises(EnvironmentError, xattr.set, item,
+                              self.USER_NN, self.USER_VAL,
+                              flags=XATTR_CREATE,
+                              namespace=NS_USER)
+        self.failUnlessEqual(xattr.list(item, nofollow=symlink),
+                             [self.USER_ATTR])
+        self.failUnlessEqual(xattr.list(item, namespace=NS_USER,
+                                        nofollow=symlink),
+                             [self.USER_NN])
         self.failUnlessEqual(xattr.get(item, self.USER_ATTR, nofollow=symlink),
                              self.USER_VAL)
+        self.failUnlessEqual(xattr.get(item, self.USER_NN, nofollow=symlink,
+                                       namespace=NS_USER),
+                             self.USER_VAL)
         self.failUnlessEqual(xattr.get_all(item, nofollow=symlink),
                              [(self.USER_ATTR, self.USER_VAL)])
-        xattr.remove(item, self.USER_ATTR)
+        self.failUnlessEqual(xattr.get_all(item, nofollow=symlink,
+                                           namespace=NS_USER),
+                             [(self.USER_NN, self.USER_VAL)])
+        if use_ns:
+            xattr.remove(item, self.USER_NN, namespace=NS_USER)
+        else:
+            xattr.remove(item, self.USER_ATTR)
         self.failUnlessEqual(xattr.list(item, symlink), [])
         self.failUnlessEqual(xattr.get_all(item, nofollow=symlink), [])
         self.failUnlessRaises(EnvironmentError, xattr.remove,
-                              item, self.USER_ATTR)
+                              item, self.USER_ATTR, nofollow=symlink)
+        self.failUnlessRaises(EnvironmentError, xattr.remove,
+                              item, self.USER_NN, namespace=NS_USER,
+                              nofollow=symlink)
 
     def testNoXattrDeprecated(self):
         """test no attributes (deprecated functions)"""
@@ -120,13 +152,21 @@ class xattrTest(unittest.TestCase):
         """test no attributes"""
         fh, fname = self._getfile()
         self.failUnlessEqual(xattr.list(fname), [])
+        self.failUnlessEqual(xattr.list(fname, namespace=NS_USER), [])
         self.failUnlessEqual(xattr.get_all(fname), [])
+        self.failUnlessEqual(xattr.get_all(fname, namespace=NS_USER), [])
         dname = self._getdir()
         self.failUnlessEqual(xattr.list(dname), [])
+        self.failUnlessEqual(xattr.list(dname, namespace=NS_USER), [])
         self.failUnlessEqual(xattr.get_all(dname), [])
+        self.failUnlessEqual(xattr.get_all(dname, namespace=NS_USER), [])
         sname = self._getsymlink()
         self.failUnlessEqual(xattr.list(sname, nofollow=True), [])
+        self.failUnlessEqual(xattr.list(sname, nofollow=True,
+                                        namespace=NS_USER), [])
         self.failUnlessEqual(xattr.get_all(sname, nofollow=True), [])
+        self.failUnlessEqual(xattr.get_all(sname, nofollow=True,
+                                           namespace=NS_USER), [])
 
     def testFileByNameDeprecated(self):
         """test set and retrieve one attribute by file name (deprecated)"""
@@ -138,6 +178,7 @@ class xattrTest(unittest.TestCase):
         """test set and retrieve one attribute by file name"""
         fh, fname = self._getfile()
         self._checkListSetGet(fname)
+        self._checkListSetGet(fname, use_ns=True)
         os.close(fh)
 
     def testFileByDescriptorDeprecated(self):
@@ -150,6 +191,7 @@ class xattrTest(unittest.TestCase):
         """test file descriptor operations"""
         fh, fname = self._getfile()
         self._checkListSetGet(fh)
+        self._checkListSetGet(fh, use_ns=True)
         os.close(fh)
 
     def testFileByObjectDeprecated(self):
@@ -164,6 +206,7 @@ class xattrTest(unittest.TestCase):
         fh, fname = self._getfile()
         fo = os.fdopen(fh)
         self._checkListSetGet(fo)
+        self._checkListSetGet(fo, use_ns=True)
         fo.close()
 
     def testMixedAccessDeprecated(self):
@@ -187,12 +230,20 @@ class xattrTest(unittest.TestCase):
         self.failUnlessEqual(xattr.list(fname), [])
         xattr.set(fname, self.USER_ATTR, self.USER_VAL)
         self.failUnlessEqual(xattr.list(fh), [self.USER_ATTR])
+        self.failUnlessEqual(xattr.list(fh, namespace=NS_USER),
+                             [self.USER_NN])
         self.failUnlessEqual(xattr.get(fo, self.USER_ATTR),
                              self.USER_VAL)
+        self.failUnlessEqual(xattr.get(fo, self.USER_NN, namespace=NS_USER),
+                             self.USER_VAL)
         self.failUnlessEqual(xattr.get_all(fo),
                              [(self.USER_ATTR, self.USER_VAL)])
+        self.failUnlessEqual(xattr.get_all(fo, namespace=NS_USER),
+                             [(self.USER_NN, self.USER_VAL)])
         self.failUnlessEqual(xattr.get_all(fname),
                              [(self.USER_ATTR, self.USER_VAL)])
+        self.failUnlessEqual(xattr.get_all(fname, namespace=NS_USER),
+                             [(self.USER_NN, self.USER_VAL)])
 
     def testDirOpsDeprecated(self):
         """test attribute setting on directories (deprecated functions)"""
@@ -203,6 +254,7 @@ class xattrTest(unittest.TestCase):
         """test attribute setting on directories"""
         dname = self._getdir()
         self._checkListSetGet(dname)
+        self._checkListSetGet(dname, use_ns=True)
 
     def testSymlinkOpsDeprecated(self):
         """test symlink operations (deprecated functions)"""
@@ -215,6 +267,7 @@ class xattrTest(unittest.TestCase):
         sname = self._getsymlink()
         self.failUnlessRaises(EnvironmentError, xattr.list, sname)
         self._checkListSetGet(sname, symlink=True)
+        self._checkListSetGet(sname, symlink=True, use_ns=True)
 
     def testBinaryPayloadDeprecated(self):
         """test binary values (deprecated functions)"""
@@ -234,8 +287,14 @@ class xattrTest(unittest.TestCase):
         BINVAL = "abc" + '\0' + "def"
         xattr.set(fname, self.USER_ATTR, BINVAL)
         self.failUnlessEqual(xattr.list(fname), [self.USER_ATTR])
+        self.failUnlessEqual(xattr.list(fname, namespace=NS_USER),
+                             [self.USER_NN])
         self.failUnlessEqual(xattr.get(fname, self.USER_ATTR), BINVAL)
+        self.failUnlessEqual(xattr.get(fname, self.USER_NN,
+                                       namespace=NS_USER), BINVAL)
         self.failUnlessEqual(xattr.get_all(fname), [(self.USER_ATTR, BINVAL)])
+        self.failUnlessEqual(xattr.get_all(fname, namespace=NS_USER),
+                             [(self.USER_NN, BINVAL)])
         xattr.remove(fname, self.USER_ATTR)
 
     def testManyOpsDeprecated(self):
@@ -257,11 +316,18 @@ class xattrTest(unittest.TestCase):
         fh, fname = self._getfile()
         xattr.set(fh, self.USER_ATTR, self.USER_VAL)
         VL = [self.USER_ATTR]
+        VN = [self.USER_NN]
         for i in range(self.MANYOPS_COUNT):
             self.failUnlessEqual(xattr.list(fh), VL)
+            self.failUnlessEqual(xattr.list(fh, namespace=NS_USER), VN)
         for i in range(self.MANYOPS_COUNT):
             self.failUnlessEqual(xattr.get(fh, self.USER_ATTR),
                                  self.USER_VAL)
+            self.failUnlessEqual(xattr.get(fh, self.USER_NN,
+                                           namespace=NS_USER),
+                                 self.USER_VAL)
         for i in range(self.MANYOPS_COUNT):
             self.failUnlessEqual(xattr.get_all(fh),
                                  [(self.USER_ATTR, self.USER_VAL)])
+            self.failUnlessEqual(xattr.get_all(fh, namespace=NS_USER),
+                                 [(self.USER_NN, self.USER_VAL)])