s4-pyrpc: added a test for talloc behaviour in pidl python code
authorAndrew Tridgell <tridge@samba.org>
Wed, 25 Aug 2010 05:21:36 +0000 (15:21 +1000)
committerAndrew Tridgell <tridge@samba.org>
Wed, 25 Aug 2010 13:05:05 +0000 (23:05 +1000)
source4/scripting/python/samba/tests/dcerpc/rpc_talloc.py [new file with mode: 0755]
source4/selftest/tests.sh

diff --git a/source4/scripting/python/samba/tests/dcerpc/rpc_talloc.py b/source4/scripting/python/samba/tests/dcerpc/rpc_talloc.py
new file mode 100755 (executable)
index 0000000..7a1ddb5
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# test generated python code from pidl
+
+import sys
+
+sys.path.insert(0, "bin/python")
+
+import samba
+from samba.dcerpc import drsuapi
+
+samba.talloc_enable_null_tracking()
+initial_blocks = samba.talloc_total_blocks(None)
+
+def check_blocks(object, num_expected):
+    nblocks = samba.talloc_total_blocks(object)
+    if object is None:
+        nblocks -= initial_blocks
+    if nblocks != num_expected:
+        raise Exception("Expected %u blocks in %s - got %u" % (num_expected, str(object), nblocks))
+
+check_blocks(None, 0)
+
+def get_rodc_partial_attribute_set():
+    '''get a list of attributes for RODC replication'''
+    partial_attribute_set = drsuapi.DsPartialAttributeSet()
+
+    # we expect one block for the object, and one for the structure
+    check_blocks(partial_attribute_set, 2)
+
+    attids = [ 1, 2, 3]
+    partial_attribute_set.version = 1
+    partial_attribute_set.attids     = attids
+    partial_attribute_set.num_attids = len(attids)
+
+    # we expect one block object, a structure, an ARRAY, and a reference to the array
+    check_blocks(partial_attribute_set, 4)
+
+    return partial_attribute_set
+
+def test_fun():
+    pas = get_rodc_partial_attribute_set()
+    check_blocks(pas, 4)
+    req8 = drsuapi.DsGetNCChangesRequest8()
+    check_blocks(req8, 2)
+    check_blocks(None, 6)
+    req8.partial_attribute_set = pas
+    if req8.partial_attribute_set.attids[1] != 2:
+        raise Exception("Wrong value in attids[2]")
+    # we now get an additional reference
+    samba.talloc_report_full(None)
+    check_blocks(None, 7)
+
+test_fun()
+check_blocks(None, 0)
+print "All OK"
+sys.exit(0)
index a649b5409e9eac9d576e160b5eed9692f9ebd527..917f572036a915f6056b3b9d0dac7a9626213717 100755 (executable)
@@ -523,6 +523,7 @@ plantestsuite "blackbox.setpassword.py" none PYTHON="$PYTHON" $samba4srcdir/setu
 plantestsuite "blackbox.newuser.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_newuser.sh "$PREFIX/provision"
 plantestsuite "blackbox.group.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_group.sh "$PREFIX/provision"
 plantestsuite "blackbox.spn.py" dc:local PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_spn.sh "$PREFIX/dc"
+plantestsuite "blackbox.rpc_talloc.py" dc:local $PYTHON $samba4srcdir/scripting/python/samba/tests/dcerpc/rpc_talloc.py
 
 # DRS python tests
 plantestsuite "drs_delete_object.python" vampire_dc PYTHONPATH="$PYTHONPATH:$samba4srcdir/torture/drs/python" DC1=\$DC_SERVER DC2=\$VAMPIRE_DC_SERVER $SUBUNITRUN delete_object -U"\$DOMAIN/\$DC_USERNAME"%"\$DC_PASSWORD"