r25598: Add missing become_root/unbecome_root around calls of add_aliases.
[samba.git] / source / python / examples / tdbpack / test_tdbpack.py
index a141a505ab56b83f280c37f34b7a8c8a78090e84..af2ba2b296dadf5ae9d3036c7d26caf650900107 100755 (executable)
@@ -1,6 +1,6 @@
-#! /usr/bin/env python2.2
+#! /usr/bin/env python
 
-__doc__ = """test case for samba.tdbkpack functions
+__doc__ = """test case for samba.tdbpack functions
 
 tdbpack provides a means of pickling values into binary formats
 compatible with that used by the samba tdbpack()/tdbunpack()
@@ -22,33 +22,10 @@ import samba.tdbpack
 
 both_unpackers = (samba.tdbpack.unpack, oldtdbutil.unpack)
 both_packers = (samba.tdbpack.pack, oldtdbutil.pack)
-    
-class PackTests(unittest.TestCase):
-    symm_cases = [
-             ('w', [42], '\x2a\0'),
-             ('www', [42, 2, 69], '\x2a\0\x02\0\x45\0'),
-             ('wd', [42, 256], '\x2a\0\0\x01\0\0'),
-             ('w', [0], '\0\0'),
-             ('w', [255], '\xff\0'),
-             ('w', [256], '\0\x01'),
-#              ('w', [0xdead], '\xad\xde'),
-#              ('w', [0xffff], '\xff\xff'),
-#              ('p', [0], '\0\0\0\0'),
-#              ('p', [1], '\x01\0\0\0'),
-#              ('d', [0x01020304], '\x04\x03\x02\x01'),
-#              ('d', [0x7fffffff], '\xff\xff\xff\x7f'),
-#              ('d', [0x80000000], '\x00\x00\x00\x80'),
-#              ('d', [-1], '\xff\xff\xff\xff'),
-#              ('d', [-255], '\x01\xff\xff\xff'),
-#              ('d', [-256], '\x00\xff\xff\xff'),
-#              ('ddd', [1, 10, 50], '\x01\0\0\0\x0a\0\0\0\x32\0\0\0'),
-#              ('ff', ['hello', 'world'], 'hello\0world\0'),
-#              ('fP', ['hello', 'world'], 'hello\0world\0'),
-#              ('PP', ['hello', 'world'], 'hello\0world\0'),
-#              ('B', [0, ''], '\0\0\0\0'),
-#              ('B', [5, 'hello'], '\x05\0\0\0hello'),
+
+
+
 # #             ('B', [10, 'hello'], '\x0a\0\0\0hello'),
-# #             ('B', [2, 'hello'], '\x0a\0\0\0hello'),
 #              ('BB', [11, 'hello\0world', 3, 'now'],
 #               '\x0b\0\0\0hello\0world\x03\0\0\0now'),
 #              ('pd', [1, 10], '\x01\0\0\0\x0a\0\0\0'),
@@ -75,12 +52,40 @@ class PackTests(unittest.TestCase):
 #              ('BB', [(5 * 40000), 'hello' * 40000,
 #                      (5 * 50000), 'world' * 50000],
 #               '\x40\x0d\x03\0' + 'hello' * 40000 + '\x90\xd0\x03\x00' + 'world' * 50000),
+
+    
+class PackTests(unittest.TestCase):
+    symm_cases = [
+             ('w', [42], '\x2a\0'),
+             ('www', [42, 2, 69], '\x2a\0\x02\0\x45\0'),
+             ('wd', [42, 256], '\x2a\0\0\x01\0\0'),
+             ('w', [0], '\0\0'),
+             ('w', [255], '\xff\0'),
+             ('w', [256], '\0\x01'),
+             ('w', [0xdead], '\xad\xde'),
+             ('w', [0xffff], '\xff\xff'),
+             ('p', [0], '\0\0\0\0'),
+             ('p', [1], '\x01\0\0\0'),
+             ('d', [0x01020304], '\x04\x03\x02\x01'),
+             ('d', [0x7fffffff], '\xff\xff\xff\x7f'),
+             ('d', [0x80000000L], '\x00\x00\x00\x80'),
+             ('d', [0x80000069L], '\x69\x00\x00\x80'),
+             ('d', [0xffffffffL], '\xff\xff\xff\xff'),
+             ('d', [0xffffff00L], '\x00\xff\xff\xff'),
+             ('ddd', [1, 10, 50], '\x01\0\0\0\x0a\0\0\0\x32\0\0\0'),
+             ('ff', ['hello', 'world'], 'hello\0world\0'),
+             ('fP', ['hello', 'world'], 'hello\0world\0'),
+             ('PP', ['hello', 'world'], 'hello\0world\0'),
+             ('B', [0, ''], '\0\0\0\0'),
+# old implementation is wierd when string is not the right length             
+#             ('B', [2, 'hello'], '\x0a\0\0\0hello'),
+             ('B', [5, 'hello'], '\x05\0\0\0hello'),
              ]
 
     def test_symmetric(self):
         """Cookbook of symmetric pack/unpack tests
         """
-        for packer in both_packers:
+        for packer in [samba.tdbpack.pack]: # both_packers:
             for unpacker in both_unpackers:
                 for format, values, expected in self.symm_cases:
                     out_packed = packer(format, values)
@@ -108,8 +113,6 @@ class PackTests(unittest.TestCase):
         not "canonical".
         """
         cases = [('w', (42,), '\x2a\0'),
-                 ('p', [None], '\0\0\0\0'),
-                 ('p', ['true'], '\x01\0\0\0'),
                  ]
 
         for packer in both_packers:
@@ -234,6 +237,15 @@ class PackTests(unittest.TestCase):
                     raise AssertionError("didn't get exception: format %s, values %s, unpacker %s"
                                          % (`format`, `values`, `unpacker`))
 
+    def test_unpack_repeated(self):
+        cases = [(('df$',
+                  '\x00\x00\x00\x00HP C LaserJet 4500-PS\x00Windows 4.0\x00\\print$\\WIN40\\0\\PSCRIPT.DRV\x00\\print$\\WIN40\\0\\PSCRIPT.DRV\x00\\print$\\WIN40\\0\\PSCRIPT.DRV\x00\\print$\\WIN40\\0\\PSCRIPT.HLP\x00\x00RAW\x00\\print$\\WIN40\\0\\readme.wri\x00\\print$\\WIN40\\0\\pscript.drv\x00\\print$\\WIN40\\0\\pscript.hlp\x00'),
+                 ([0L, 'HP C LaserJet 4500-PS', 'Windows 4.0', '\\print$\\WIN40\\0\\PSCRIPT.DRV', '\\print$\\WIN40\\0\\PSCRIPT.DRV', '\\print$\\WIN40\\0\\PSCRIPT.DRV', '\\print$\\WIN40\\0\\PSCRIPT.HLP', '', 'RAW', '\\print$\\WIN40\\0\\readme.wri', '\\print$\\WIN40\\0\\pscript.drv', '\\print$\\WIN40\\0\\pscript.hlp'], ''))]
+        for unpacker in both_unpackers:
+            for input, expected in cases:
+                result = apply(unpacker, input)
+                if result != expected:
+                    raise AssertionError("%s:\n     input: %s\n    output: %s\n  expected: %s" % (`unpacker`, `input`, `result`, `expected`))
         
 
 if __name__ == '__main__':