From: Douglas Bagnall Date: Fri, 12 Apr 2019 12:23:26 +0000 (+1200) Subject: dsdb pytests: test the effect of reordering modify requests X-Git-Tag: tdb-1.4.1~232 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c73888ff6f22de86f72ff254d332b44848cb9959;p=thirdparty%2Fsamba.git dsdb pytests: test the effect of reordering modify requests Do we interpret these the same way as Windows? In many cases, no. Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- diff --git a/selftest/knownfail.d/modify-order b/selftest/knownfail.d/modify-order new file mode 100644 index 00000000000..53822a68a92 --- /dev/null +++ b/selftest/knownfail.d/modify-order @@ -0,0 +1,5 @@ +samba4.ldap_modify_order.python.+ModifyOrderTests.test_modify_order_account_locality_device +samba4.ldap_modify_order.python.+ModifyOrderTests.test_modify_order_container_flags_multivalue +samba4.ldap_modify_order.python.+ModifyOrderTests.test_modify_order_objectclass +samba4.ldap_modify_order.python.+ModifyOrderTests.test_modify_order_objectclass2 +samba4.ldap_modify_order.python.+ModifyOrderTests.test_modify_order_singlevalue diff --git a/source4/dsdb/tests/python/ldap_modify_order.py b/source4/dsdb/tests/python/ldap_modify_order.py new file mode 100644 index 00000000000..46b064a1686 --- /dev/null +++ b/source4/dsdb/tests/python/ldap_modify_order.py @@ -0,0 +1,353 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Copyright (C) Jelmer Vernooij 2008-2011 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from __future__ import print_function +import optparse +import sys +import os +from itertools import permutations +import traceback + +sys.path.insert(0, "bin/python") +import samba +from samba.tests.subunitrun import SubunitOptions, TestProgram +import samba.getopt as options + +from samba.auth import system_session +from ldb import SCOPE_BASE, LdbError +from ldb import Message, MessageElement, Dn +from ldb import FLAG_MOD_ADD, FLAG_MOD_REPLACE, FLAG_MOD_DELETE +from samba.samdb import SamDB + +from samba.tests import delete_force + +TEST_DATA_DIR = os.path.join( + os.path.dirname(__file__), + 'testdata') + +LDB_STRERR = {} +def _build_ldb_strerr(): + import ldb + for k, v in vars(ldb).items(): + if k.startswith('ERR_') and isinstance(v, int): + LDB_STRERR[v] = k + +_build_ldb_strerr() + + +class ModifyOrderTests(samba.tests.TestCase): + + def setUp(self): + super().setUp() + self.dsdb = get_dsdb() + self.base_dn = self.dsdb.domain_dn() + + def delete_object(self, dn): + delete_force(self.dsdb, dn) + + def _test_modify_order(self, + start_attrs, + mod_attrs, + extra_search_attrs=(), + name=None): + # We are using Message objects here for add (rather than the + # more convenient dict) because we maybe care about the order + # in which attributes are added. + if name is None: + name = traceback.extract_stack()[-2][2][5:] + + sig = [] + op_lut = ['', 'add', 'replace', 'delete'] + + search_attrs = set(extra_search_attrs) + lines = [name, "initial attrs:"] + for k, v in start_attrs: + lines.append("%20s: %r" % (k, v)) + search_attrs.add(k) + + for k, v, op in mod_attrs: + search_attrs.add(k) + + search_attrs = sorted(search_attrs) + header = "\n".join(lines) + sig.append(header) + + clusters = {} + for i, attrs in enumerate(permutations(mod_attrs)): + # for each permuation we construct a string describing the + # requested operations, and a string describing the result + # (which may be an exception). The we cluster the + # attribute strings by their results. + dn = "cn=ldaptest_%s_%d,cn=users,%s" % (name, i, self.base_dn) + m = Message() + m.dn = Dn(self.dsdb, dn) + + for k, v in start_attrs: + m[k] = MessageElement(v, 0, k) + + self.dsdb.add(m) + self.addCleanup(self.delete_object, dn) + + m = Message() + m.dn = Dn(self.dsdb, dn) + + attr_lines = [] + for k, v, op in attrs: + if v is None: + v = dn + m[k] = MessageElement(v, op, k) + attr_lines.append("%16s %-8s %s" % (k, op_lut[op], v)) + + attr_str = '\n'.join(attr_lines) + + try: + self.dsdb.modify(m) + except LdbError as e: + err, _ = e.args + s = LDB_STRERR.get(err, "unknown error") + result_str = "%s (%d)" % (s, err) + else: + res = self.dsdb.search(base=dn, scope=SCOPE_BASE, + attrs=search_attrs) + + lines = [] + for k, v in sorted(dict(res[0]).items()): + if k != "dn" or k in extra_search_attrs: + lines.append("%20s: %r" % (k, sorted(v))) + + result_str = '\n'.join(lines) + + clusters.setdefault(result_str, []).append(attr_str) + + for s, attrs in sorted(clusters.items()): + sig.extend([ + "== result ===[%3d]=======================" % len(attrs), + s, + "-- operations ---------------------------"]) + for a in attrs: + sig.append(a) + sig.append("-" * 34) + + sig = '\n'.join(sig).replace(self.base_dn, "{base dn}") + + if opts.verbose: + print(sig) + + if opts.rewrite_ground_truth: + f = open(os.path.join(TEST_DATA_DIR, name + '.expected'), 'w') + f.write(sig) + f.close() + f = open(os.path.join(TEST_DATA_DIR, name + '.expected')) + expected = f.read() + f.close() + + self.assertStringsEqual(sig, expected) + + def test_modify_order_mixed(self): + start_attrs = [("objectclass", "user"), + ("carLicense", ["1", "2", "3"]), + ("otherTelephone", "123")] + + mod_attrs = [("carLicense", "3", FLAG_MOD_DELETE), + ("carLicense", "4", FLAG_MOD_ADD), + ("otherTelephone", "4", FLAG_MOD_REPLACE), + ("otherTelephone", "123", FLAG_MOD_DELETE)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_mixed2(self): + start_attrs = [("objectclass", "user"), + ("carLicense", ["1", "2", "3"]), + ("ipPhone", "123")] + + mod_attrs = [("carLicense", "3", FLAG_MOD_DELETE), + ("carLicense", "4", FLAG_MOD_ADD), + ("ipPhone", "4", FLAG_MOD_REPLACE), + ("ipPhone", "123", FLAG_MOD_DELETE)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_telephone(self): + start_attrs = [("objectclass", "user"), + ("otherTelephone", "123")] + + mod_attrs = [("carLicense", "3", FLAG_MOD_REPLACE), + ("carLicense", "4", FLAG_MOD_ADD), + ("otherTelephone", "4", FLAG_MOD_REPLACE), + ("otherTelephone", "4", FLAG_MOD_ADD), + ("otherTelephone", "123", FLAG_MOD_DELETE)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_telephone_delete_delete(self): + start_attrs = [("objectclass", "user"), + ("otherTelephone", "123")] + + mod_attrs = [("carLicense", "3", FLAG_MOD_REPLACE), + ("carLicense", "4", FLAG_MOD_DELETE), + ("otherTelephone", "4", FLAG_MOD_REPLACE), + ("otherTelephone", "4", FLAG_MOD_DELETE), + ("otherTelephone", "123", FLAG_MOD_DELETE)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_objectclass(self): + start_attrs = [("objectclass", "user"), + ("otherTelephone", "123")] + + mod_attrs = [("objectclass", "computer", FLAG_MOD_REPLACE), + ("objectclass", "user", FLAG_MOD_DELETE), + ("objectclass", "person", FLAG_MOD_DELETE)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_objectclass2(self): + start_attrs = [("objectclass", "user")] + + mod_attrs = [("objectclass", "computer", FLAG_MOD_REPLACE), + ("objectclass", "user", FLAG_MOD_ADD), + ("objectclass", "attributeSchema", FLAG_MOD_REPLACE), + ("objectclass", "inetOrgPerson", FLAG_MOD_ADD), + ("objectclass", "person", FLAG_MOD_DELETE)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_singlevalue(self): + start_attrs = [("objectclass", "user"), + ("givenName", "a")] + + mod_attrs = [("givenName", "a", FLAG_MOD_REPLACE), + ("givenName", ["b", "a"], FLAG_MOD_REPLACE), + ("givenName", "b", FLAG_MOD_DELETE), + ("givenName", "a", FLAG_MOD_DELETE), + ("givenName", "c", FLAG_MOD_ADD)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_inapplicable(self): + #attrbutes that don't go on a user + start_attrs = [("objectclass", "user"), + ("givenName", "a")] + + mod_attrs = [("dhcpSites", "b", FLAG_MOD_REPLACE), + ("dhcpSites", "b", FLAG_MOD_DELETE), + ("dhcpSites", "c", FLAG_MOD_ADD)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_sometimes_inapplicable(self): + # attributes that don't go on a user, but do on a computer, + # which we sometimes change into. + start_attrs = [("objectclass", "user"), + ("givenName", "a")] + + mod_attrs = [("objectclass", "computer", FLAG_MOD_REPLACE), + ("objectclass", "person", FLAG_MOD_DELETE), + ("dnsHostName", "b", FLAG_MOD_ADD), + ("dnsHostName", "c", FLAG_MOD_REPLACE)] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_account_locality_device(self): + # account, locality, and device all take l (locality name) but + # only device takes owner. We shouldn't be able to change + # objectclass at all. + start_attrs = [("objectclass", "account"), + ("l", "a")] + + mod_attrs = [("objectclass", ["device", "top"], FLAG_MOD_REPLACE), + ("l", "a", FLAG_MOD_DELETE), + ("owner", "c", FLAG_MOD_ADD) + ] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_container_flags_multivalue(self): + # account, locality, and device all take l (locality name) + # but only device takes owner + start_attrs = [("objectclass", "container"), + ("wWWHomePage", "a")] + + mod_attrs = [("flags", ["0", "1"], FLAG_MOD_ADD), + ("flags", "65355", FLAG_MOD_ADD), + ("flags", "65355", FLAG_MOD_DELETE), + ("flags", ["2", "101"], FLAG_MOD_REPLACE), + ] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_container_flags(self): + #flags should be an integer + start_attrs = [("objectclass", "container")] + + mod_attrs = [("flags", "0x6", FLAG_MOD_ADD), + ("flags", "5", FLAG_MOD_ADD), + ("flags", "101", FLAG_MOD_REPLACE), + ("flags", "c", FLAG_MOD_DELETE), + ] + self._test_modify_order(start_attrs, mod_attrs) + + def test_modify_order_member(self): + name = "modify_order_member_other_group" + + dn2 = "cn=%s,%s" % (name, self.base_dn) + m = Message() + m.dn = Dn(self.dsdb, dn2) + self.dsdb.add({"dn": dn2, "objectclass": "group"}) + self.addCleanup(self.delete_object, dn2) + + start_attrs = [("objectclass", "group"), + ("member", dn2)] + + mod_attrs = [("member", None, FLAG_MOD_DELETE), + ("member", None, FLAG_MOD_REPLACE), + ("member", dn2, FLAG_MOD_DELETE), + ("member", None, FLAG_MOD_ADD), + ] + self._test_modify_order(start_attrs, mod_attrs, ["memberOf"]) + + +def get_dsdb(): + dsdb = SamDB(host, + credentials=creds, + session_info=system_session(lp), + lp=lp) + return dsdb + + +parser = optparse.OptionParser("ldap_modify_order.py [options] ") +sambaopts = options.SambaOptions(parser) +parser.add_option_group(sambaopts) +parser.add_option_group(options.VersionOptions(parser)) +credopts = options.CredentialsOptions(parser) +parser.add_option_group(credopts) +subunitopts = SubunitOptions(parser) +parser.add_option_group(subunitopts) +parser.add_option("--rewrite-ground-truth", action="store_true", + help="write expected values") +parser.add_option("-v", "--verbose", action="store_true") + +opts, args = parser.parse_args() + +if len(args) < 1: + parser.print_usage() + sys.exit(1) + +host = args[0] + +lp = sambaopts.get_loadparm() +creds = credopts.get_credentials(lp) + + +if "://" not in host: + if os.path.isfile(host): + host = "tdb://%s" % host + else: + host = "ldap://%s" % host + + +TestProgram(module=__name__, opts=subunitopts) diff --git a/source4/dsdb/tests/python/testdata/modify_order_account_locality_device.expected b/source4/dsdb/tests/python/testdata/modify_order_account_locality_device.expected new file mode 100644 index 00000000000..dc5e16254d7 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_account_locality_device.expected @@ -0,0 +1,34 @@ +modify_order_account_locality_device +initial attrs: + objectclass: 'account' + l: 'a' +== result ===[ 3]======================= +ERR_CONSTRAINT_VIOLATION (19) +-- operations --------------------------- + l delete a + owner add c + objectclass replace ['device', 'top'] +---------------------------------- + owner add c + objectclass replace ['device', 'top'] + l delete a +---------------------------------- + owner add c + l delete a + objectclass replace ['device', 'top'] +---------------------------------- +== result ===[ 3]======================= +ERR_OBJECT_CLASS_VIOLATION (65) +-- operations --------------------------- + objectclass replace ['device', 'top'] + l delete a + owner add c +---------------------------------- + objectclass replace ['device', 'top'] + owner add c + l delete a +---------------------------------- + l delete a + objectclass replace ['device', 'top'] + owner add c +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_container_flags.expected b/source4/dsdb/tests/python/testdata/modify_order_container_flags.expected new file mode 100644 index 00000000000..eee3c528e3f --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_container_flags.expected @@ -0,0 +1,134 @@ +modify_order_container_flags +initial attrs: + objectclass: 'container' +== result ===[ 6]======================= + flags: [b'101'] + objectClass: [b'container', b'top'] +-- operations --------------------------- + flags add 0x6 + flags add 5 + flags delete c + flags replace 101 +---------------------------------- + flags add 0x6 + flags delete c + flags add 5 + flags replace 101 +---------------------------------- + flags add 5 + flags add 0x6 + flags delete c + flags replace 101 +---------------------------------- + flags add 5 + flags delete c + flags add 0x6 + flags replace 101 +---------------------------------- + flags delete c + flags add 0x6 + flags add 5 + flags replace 101 +---------------------------------- + flags delete c + flags add 5 + flags add 0x6 + flags replace 101 +---------------------------------- +== result ===[ 6]======================= + flags: [b'5'] + objectClass: [b'container', b'top'] +-- operations --------------------------- + flags add 0x6 + flags replace 101 + flags delete c + flags add 5 +---------------------------------- + flags add 0x6 + flags delete c + flags replace 101 + flags add 5 +---------------------------------- + flags replace 101 + flags add 0x6 + flags delete c + flags add 5 +---------------------------------- + flags replace 101 + flags delete c + flags add 0x6 + flags add 5 +---------------------------------- + flags delete c + flags add 0x6 + flags replace 101 + flags add 5 +---------------------------------- + flags delete c + flags replace 101 + flags add 0x6 + flags add 5 +---------------------------------- +== result ===[ 12]======================= +ERR_INVALID_ATTRIBUTE_SYNTAX (21) +-- operations --------------------------- + flags add 0x6 + flags add 5 + flags replace 101 + flags delete c +---------------------------------- + flags add 0x6 + flags replace 101 + flags add 5 + flags delete c +---------------------------------- + flags add 5 + flags add 0x6 + flags replace 101 + flags delete c +---------------------------------- + flags add 5 + flags replace 101 + flags add 0x6 + flags delete c +---------------------------------- + flags add 5 + flags replace 101 + flags delete c + flags add 0x6 +---------------------------------- + flags add 5 + flags delete c + flags replace 101 + flags add 0x6 +---------------------------------- + flags replace 101 + flags add 0x6 + flags add 5 + flags delete c +---------------------------------- + flags replace 101 + flags add 5 + flags add 0x6 + flags delete c +---------------------------------- + flags replace 101 + flags add 5 + flags delete c + flags add 0x6 +---------------------------------- + flags replace 101 + flags delete c + flags add 5 + flags add 0x6 +---------------------------------- + flags delete c + flags add 5 + flags replace 101 + flags add 0x6 +---------------------------------- + flags delete c + flags replace 101 + flags add 5 + flags add 0x6 +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_container_flags_multivalue.expected b/source4/dsdb/tests/python/testdata/modify_order_container_flags_multivalue.expected new file mode 100644 index 00000000000..99ee5a7632a --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_container_flags_multivalue.expected @@ -0,0 +1,138 @@ +modify_order_container_flags_multivalue +initial attrs: + objectclass: 'container' + wWWHomePage: 'a' +== result ===[ 6]======================= + flags: [b'65355'] + objectClass: [b'container', b'top'] + wWWHomePage: [b'a'] +-- operations --------------------------- + flags add ['0', '1'] + flags delete 65355 + flags replace ['2', '101'] + flags add 65355 +---------------------------------- + flags add ['0', '1'] + flags replace ['2', '101'] + flags delete 65355 + flags add 65355 +---------------------------------- + flags delete 65355 + flags add ['0', '1'] + flags replace ['2', '101'] + flags add 65355 +---------------------------------- + flags delete 65355 + flags replace ['2', '101'] + flags add ['0', '1'] + flags add 65355 +---------------------------------- + flags replace ['2', '101'] + flags add ['0', '1'] + flags delete 65355 + flags add 65355 +---------------------------------- + flags replace ['2', '101'] + flags delete 65355 + flags add ['0', '1'] + flags add 65355 +---------------------------------- +== result ===[ 6]======================= +ERR_ATTRIBUTE_OR_VALUE_EXISTS (20) +-- operations --------------------------- + flags add 65355 + flags delete 65355 + flags replace ['2', '101'] + flags add ['0', '1'] +---------------------------------- + flags add 65355 + flags replace ['2', '101'] + flags delete 65355 + flags add ['0', '1'] +---------------------------------- + flags delete 65355 + flags add 65355 + flags replace ['2', '101'] + flags add ['0', '1'] +---------------------------------- + flags delete 65355 + flags replace ['2', '101'] + flags add 65355 + flags add ['0', '1'] +---------------------------------- + flags replace ['2', '101'] + flags add 65355 + flags delete 65355 + flags add ['0', '1'] +---------------------------------- + flags replace ['2', '101'] + flags delete 65355 + flags add 65355 + flags add ['0', '1'] +---------------------------------- +== result ===[ 6]======================= +ERR_CONSTRAINT_VIOLATION (19) +-- operations --------------------------- + flags add ['0', '1'] + flags add 65355 + flags delete 65355 + flags replace ['2', '101'] +---------------------------------- + flags add ['0', '1'] + flags delete 65355 + flags add 65355 + flags replace ['2', '101'] +---------------------------------- + flags add 65355 + flags add ['0', '1'] + flags delete 65355 + flags replace ['2', '101'] +---------------------------------- + flags add 65355 + flags delete 65355 + flags add ['0', '1'] + flags replace ['2', '101'] +---------------------------------- + flags delete 65355 + flags add ['0', '1'] + flags add 65355 + flags replace ['2', '101'] +---------------------------------- + flags delete 65355 + flags add 65355 + flags add ['0', '1'] + flags replace ['2', '101'] +---------------------------------- +== result ===[ 6]======================= +ERR_NO_SUCH_ATTRIBUTE (16) +-- operations --------------------------- + flags add ['0', '1'] + flags add 65355 + flags replace ['2', '101'] + flags delete 65355 +---------------------------------- + flags add ['0', '1'] + flags replace ['2', '101'] + flags add 65355 + flags delete 65355 +---------------------------------- + flags add 65355 + flags add ['0', '1'] + flags replace ['2', '101'] + flags delete 65355 +---------------------------------- + flags add 65355 + flags replace ['2', '101'] + flags add ['0', '1'] + flags delete 65355 +---------------------------------- + flags replace ['2', '101'] + flags add ['0', '1'] + flags add 65355 + flags delete 65355 +---------------------------------- + flags replace ['2', '101'] + flags add 65355 + flags add ['0', '1'] + flags delete 65355 +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_inapplicable.expected b/source4/dsdb/tests/python/testdata/modify_order_inapplicable.expected new file mode 100644 index 00000000000..f16ef8cba51 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_inapplicable.expected @@ -0,0 +1,34 @@ +modify_order_inapplicable +initial attrs: + objectclass: 'user' + givenName: 'a' +== result ===[ 2]======================= +ERR_NO_SUCH_ATTRIBUTE (16) +-- operations --------------------------- + dhcpSites replace b + dhcpSites add c + dhcpSites delete b +---------------------------------- + dhcpSites add c + dhcpSites replace b + dhcpSites delete b +---------------------------------- +== result ===[ 4]======================= +ERR_OBJECT_CLASS_VIOLATION (65) +-- operations --------------------------- + dhcpSites replace b + dhcpSites delete b + dhcpSites add c +---------------------------------- + dhcpSites delete b + dhcpSites replace b + dhcpSites add c +---------------------------------- + dhcpSites delete b + dhcpSites add c + dhcpSites replace b +---------------------------------- + dhcpSites add c + dhcpSites delete b + dhcpSites replace b +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_member.expected b/source4/dsdb/tests/python/testdata/modify_order_member.expected new file mode 100644 index 00000000000..1882c344557 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_member.expected @@ -0,0 +1,190 @@ +modify_order_member +initial attrs: + objectclass: 'group' + member: 'cn=modify_order_member_other_group,{base dn}' +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_0,CN=Users,{base dn}', b'CN=modify_order_member_other_group,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_0,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=ldaptest_modify_order_member_0,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_0,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member add cn=ldaptest_modify_order_member_0,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_12,CN=Users,{base dn}', b'CN=modify_order_member_other_group,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_12,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=modify_order_member_other_group,{base dn} + member delete cn=ldaptest_modify_order_member_12,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_12,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_12,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_13,CN=Users,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_13,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=modify_order_member_other_group,{base dn} + member delete cn=ldaptest_modify_order_member_13,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_13,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_13,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_14,CN=Users,{base dn}', b'CN=modify_order_member_other_group,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_14,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=modify_order_member_other_group,{base dn} + member replace cn=ldaptest_modify_order_member_14,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_14,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_14,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_16,CN=Users,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_16,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=modify_order_member_other_group,{base dn} + member add cn=ldaptest_modify_order_member_16,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_16,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_16,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_19,CN=Users,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_19,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member add cn=ldaptest_modify_order_member_19,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_19,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member replace cn=ldaptest_modify_order_member_19,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_2,CN=Users,{base dn}', b'CN=modify_order_member_other_group,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_2,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=ldaptest_modify_order_member_2,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member replace cn=ldaptest_modify_order_member_2,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_2,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_22,CN=Users,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_22,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member add cn=ldaptest_modify_order_member_22,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member delete cn=ldaptest_modify_order_member_22,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_22,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_3,CN=Users,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_3,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=ldaptest_modify_order_member_3,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member add cn=ldaptest_modify_order_member_3,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_3,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_5,CN=Users,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_5,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=ldaptest_modify_order_member_5,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_5,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member replace cn=ldaptest_modify_order_member_5,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_6,CN=Users,{base dn}', b'CN=modify_order_member_other_group,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_6,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member replace cn=ldaptest_modify_order_member_6,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_6,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member add cn=ldaptest_modify_order_member_6,cn=users,{base dn} +---------------------------------- +== result ===[ 1]======================= + member: [b'CN=ldaptest_modify_order_member_8,CN=Users,{base dn}', b'CN=modify_order_member_other_group,{base dn}'] + memberOf: [b'CN=ldaptest_modify_order_member_8,CN=Users,{base dn}'] + objectClass: [b'group', b'top'] +-- operations --------------------------- + member replace cn=ldaptest_modify_order_member_8,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member delete cn=ldaptest_modify_order_member_8,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_8,cn=users,{base dn} +---------------------------------- +== result ===[ 6]======================= + objectClass: [b'group', b'top'] +-- operations --------------------------- + member delete cn=ldaptest_modify_order_member_1,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_1,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_1,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} +---------------------------------- + member delete cn=ldaptest_modify_order_member_4,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_4,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_4,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} +---------------------------------- + member replace cn=ldaptest_modify_order_member_7,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_7,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_7,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} +---------------------------------- + member replace cn=ldaptest_modify_order_member_10,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_10,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_10,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} +---------------------------------- + member add cn=ldaptest_modify_order_member_18,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_18,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_18,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} +---------------------------------- + member add cn=ldaptest_modify_order_member_20,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_20,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_20,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} +---------------------------------- +== result ===[ 6]======================= +ERR_UNWILLING_TO_PERFORM (53) +-- operations --------------------------- + member replace cn=ldaptest_modify_order_member_9,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member add cn=ldaptest_modify_order_member_9,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_9,cn=users,{base dn} +---------------------------------- + member replace cn=ldaptest_modify_order_member_11,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_11,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member delete cn=ldaptest_modify_order_member_11,cn=users,{base dn} +---------------------------------- + member delete cn=modify_order_member_other_group,{base dn} + member replace cn=ldaptest_modify_order_member_15,cn=users,{base dn} + member add cn=ldaptest_modify_order_member_15,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_15,cn=users,{base dn} +---------------------------------- + member delete cn=modify_order_member_other_group,{base dn} + member add cn=ldaptest_modify_order_member_17,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_17,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_17,cn=users,{base dn} +---------------------------------- + member add cn=ldaptest_modify_order_member_21,cn=users,{base dn} + member replace cn=ldaptest_modify_order_member_21,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member delete cn=ldaptest_modify_order_member_21,cn=users,{base dn} +---------------------------------- + member add cn=ldaptest_modify_order_member_23,cn=users,{base dn} + member delete cn=modify_order_member_other_group,{base dn} + member replace cn=ldaptest_modify_order_member_23,cn=users,{base dn} + member delete cn=ldaptest_modify_order_member_23,cn=users,{base dn} +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_mixed.expected b/source4/dsdb/tests/python/testdata/modify_order_mixed.expected new file mode 100644 index 00000000000..d80f5721241 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_mixed.expected @@ -0,0 +1,143 @@ +modify_order_mixed +initial attrs: + objectclass: 'user' + carLicense: ['1', '2', '3'] + otherTelephone: '123' +== result ===[ 6]======================= + carLicense: [b'1', b'2', b'3', b'4'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense delete 3 + carLicense add 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense delete 3 + otherTelephone replace 4 + carLicense add 4 + otherTelephone delete 123 +---------------------------------- + carLicense delete 3 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense add 4 +---------------------------------- + otherTelephone replace 4 + carLicense delete 3 + carLicense add 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense delete 3 + otherTelephone delete 123 + carLicense add 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense delete 3 + carLicense add 4 +---------------------------------- +== result ===[ 6]======================= + carLicense: [b'1', b'2', b'3', b'4'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] + otherTelephone: [b'4'] +-- operations --------------------------- + carLicense delete 3 + carLicense add 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense delete 3 + otherTelephone delete 123 + carLicense add 4 + otherTelephone replace 4 +---------------------------------- + carLicense delete 3 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense add 4 +---------------------------------- + otherTelephone delete 123 + carLicense delete 3 + carLicense add 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense delete 3 + otherTelephone replace 4 + carLicense add 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense delete 3 + carLicense add 4 +---------------------------------- +== result ===[ 6]======================= + carLicense: [b'1', b'2'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense add 4 + carLicense delete 3 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense add 4 + otherTelephone replace 4 + carLicense delete 3 + otherTelephone delete 123 +---------------------------------- + carLicense add 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense delete 3 +---------------------------------- + otherTelephone replace 4 + carLicense add 4 + carLicense delete 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense add 4 + otherTelephone delete 123 + carLicense delete 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense add 4 + carLicense delete 3 +---------------------------------- +== result ===[ 6]======================= + carLicense: [b'1', b'2'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] + otherTelephone: [b'4'] +-- operations --------------------------- + carLicense add 4 + carLicense delete 3 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense add 4 + otherTelephone delete 123 + carLicense delete 3 + otherTelephone replace 4 +---------------------------------- + carLicense add 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense delete 3 +---------------------------------- + otherTelephone delete 123 + carLicense add 4 + carLicense delete 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense add 4 + otherTelephone replace 4 + carLicense delete 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense add 4 + carLicense delete 3 +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_mixed2.expected b/source4/dsdb/tests/python/testdata/modify_order_mixed2.expected new file mode 100644 index 00000000000..3500a8c5c73 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_mixed2.expected @@ -0,0 +1,143 @@ +modify_order_mixed2 +initial attrs: + objectclass: 'user' + carLicense: ['1', '2', '3'] + ipPhone: '123' +== result ===[ 6]======================= + carLicense: [b'1', b'2', b'3', b'4'] + ipPhone: [b'4'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense delete 3 + carLicense add 4 + ipPhone delete 123 + ipPhone replace 4 +---------------------------------- + carLicense delete 3 + ipPhone delete 123 + carLicense add 4 + ipPhone replace 4 +---------------------------------- + carLicense delete 3 + ipPhone delete 123 + ipPhone replace 4 + carLicense add 4 +---------------------------------- + ipPhone delete 123 + carLicense delete 3 + carLicense add 4 + ipPhone replace 4 +---------------------------------- + ipPhone delete 123 + carLicense delete 3 + ipPhone replace 4 + carLicense add 4 +---------------------------------- + ipPhone delete 123 + ipPhone replace 4 + carLicense delete 3 + carLicense add 4 +---------------------------------- +== result ===[ 6]======================= + carLicense: [b'1', b'2', b'3', b'4'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense delete 3 + carLicense add 4 + ipPhone replace 4 + ipPhone delete 123 +---------------------------------- + carLicense delete 3 + ipPhone replace 4 + carLicense add 4 + ipPhone delete 123 +---------------------------------- + carLicense delete 3 + ipPhone replace 4 + ipPhone delete 123 + carLicense add 4 +---------------------------------- + ipPhone replace 4 + carLicense delete 3 + carLicense add 4 + ipPhone delete 123 +---------------------------------- + ipPhone replace 4 + carLicense delete 3 + ipPhone delete 123 + carLicense add 4 +---------------------------------- + ipPhone replace 4 + ipPhone delete 123 + carLicense delete 3 + carLicense add 4 +---------------------------------- +== result ===[ 6]======================= + carLicense: [b'1', b'2'] + ipPhone: [b'4'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense add 4 + carLicense delete 3 + ipPhone delete 123 + ipPhone replace 4 +---------------------------------- + carLicense add 4 + ipPhone delete 123 + carLicense delete 3 + ipPhone replace 4 +---------------------------------- + carLicense add 4 + ipPhone delete 123 + ipPhone replace 4 + carLicense delete 3 +---------------------------------- + ipPhone delete 123 + carLicense add 4 + carLicense delete 3 + ipPhone replace 4 +---------------------------------- + ipPhone delete 123 + carLicense add 4 + ipPhone replace 4 + carLicense delete 3 +---------------------------------- + ipPhone delete 123 + ipPhone replace 4 + carLicense add 4 + carLicense delete 3 +---------------------------------- +== result ===[ 6]======================= + carLicense: [b'1', b'2'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense add 4 + carLicense delete 3 + ipPhone replace 4 + ipPhone delete 123 +---------------------------------- + carLicense add 4 + ipPhone replace 4 + carLicense delete 3 + ipPhone delete 123 +---------------------------------- + carLicense add 4 + ipPhone replace 4 + ipPhone delete 123 + carLicense delete 3 +---------------------------------- + ipPhone replace 4 + carLicense add 4 + carLicense delete 3 + ipPhone delete 123 +---------------------------------- + ipPhone replace 4 + carLicense add 4 + ipPhone delete 123 + carLicense delete 3 +---------------------------------- + ipPhone replace 4 + ipPhone delete 123 + carLicense add 4 + carLicense delete 3 +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_objectclass.expected b/source4/dsdb/tests/python/testdata/modify_order_objectclass.expected new file mode 100644 index 00000000000..0ec6d4a02ee --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_objectclass.expected @@ -0,0 +1,35 @@ +modify_order_objectclass +initial attrs: + objectclass: 'user' + otherTelephone: '123' +== result ===[ 2]======================= + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] + otherTelephone: [b'123'] +-- operations --------------------------- + objectclass replace computer + objectclass delete user + objectclass delete person +---------------------------------- + objectclass delete user + objectclass replace computer + objectclass delete person +---------------------------------- +== result ===[ 4]======================= +ERR_OBJECT_CLASS_VIOLATION (65) +-- operations --------------------------- + objectclass replace computer + objectclass delete person + objectclass delete user +---------------------------------- + objectclass delete user + objectclass delete person + objectclass replace computer +---------------------------------- + objectclass delete person + objectclass replace computer + objectclass delete user +---------------------------------- + objectclass delete person + objectclass delete user + objectclass replace computer +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_objectclass2.expected b/source4/dsdb/tests/python/testdata/modify_order_objectclass2.expected new file mode 100644 index 00000000000..4f51708f89b --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_objectclass2.expected @@ -0,0 +1,735 @@ +modify_order_objectclass2 +initial attrs: + objectclass: 'user' +== result ===[ 24]======================= + objectClass: [b'inetOrgPerson', b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + objectclass replace computer + objectclass add user + objectclass replace attributeSchema + objectclass delete person + objectclass add inetOrgPerson +---------------------------------- + objectclass replace computer + objectclass add user + objectclass delete person + objectclass replace attributeSchema + objectclass add inetOrgPerson +---------------------------------- + objectclass replace computer + objectclass replace attributeSchema + objectclass add user + objectclass delete person + objectclass add inetOrgPerson +---------------------------------- + objectclass replace computer + objectclass replace attributeSchema + objectclass delete person + objectclass add user + objectclass add inetOrgPerson +---------------------------------- + objectclass replace computer + objectclass delete person + objectclass add user + objectclass replace attributeSchema + objectclass add inetOrgPerson +---------------------------------- + objectclass replace computer + objectclass delete person + objectclass replace attributeSchema + objectclass add user + objectclass add inetOrgPerson +---------------------------------- + objectclass add user + objectclass replace computer + objectclass replace attributeSchema + objectclass delete person + objectclass add inetOrgPerson +---------------------------------- + objectclass add user + objectclass replace computer + objectclass delete person + objectclass replace attributeSchema + objectclass add inetOrgPerson +---------------------------------- + objectclass add user + objectclass replace attributeSchema + objectclass replace computer + objectclass delete person + objectclass add inetOrgPerson +---------------------------------- + objectclass add user + objectclass replace attributeSchema + objectclass delete person + objectclass replace computer + objectclass add inetOrgPerson +---------------------------------- + objectclass add user + objectclass delete person + objectclass replace computer + objectclass replace attributeSchema + objectclass add inetOrgPerson +---------------------------------- + objectclass add user + objectclass delete person + objectclass replace attributeSchema + objectclass replace computer + objectclass add inetOrgPerson +---------------------------------- + objectclass replace attributeSchema + objectclass replace computer + objectclass add user + objectclass delete person + objectclass add inetOrgPerson +---------------------------------- + objectclass replace attributeSchema + objectclass replace computer + objectclass delete person + objectclass add user + objectclass add inetOrgPerson +---------------------------------- + objectclass replace attributeSchema + objectclass add user + objectclass replace computer + objectclass delete person + objectclass add inetOrgPerson +---------------------------------- + objectclass replace attributeSchema + objectclass add user + objectclass delete person + objectclass replace computer + objectclass add inetOrgPerson +---------------------------------- + objectclass replace attributeSchema + objectclass delete person + objectclass replace computer + objectclass add user + objectclass add inetOrgPerson +---------------------------------- + objectclass replace attributeSchema + objectclass delete person + objectclass add user + objectclass replace computer + objectclass add inetOrgPerson +---------------------------------- + objectclass delete person + objectclass replace computer + objectclass add user + objectclass replace attributeSchema + objectclass add inetOrgPerson +---------------------------------- + objectclass delete person + objectclass replace computer + objectclass replace attributeSchema + objectclass add user + objectclass add inetOrgPerson +---------------------------------- + objectclass delete person + objectclass add user + objectclass replace computer + objectclass replace attributeSchema + objectclass add inetOrgPerson +---------------------------------- + objectclass delete person + objectclass add user + objectclass replace attributeSchema + objectclass replace computer + objectclass add inetOrgPerson +---------------------------------- + objectclass delete person + objectclass replace attributeSchema + objectclass replace computer + objectclass add user + objectclass add inetOrgPerson +---------------------------------- + objectclass delete person + objectclass replace attributeSchema + objectclass add user + objectclass replace computer + objectclass add inetOrgPerson +---------------------------------- +== result ===[ 24]======================= + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + objectclass replace computer + objectclass add user + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass delete person +---------------------------------- + objectclass replace computer + objectclass add user + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass delete person +---------------------------------- + objectclass replace computer + objectclass replace attributeSchema + objectclass add user + objectclass add inetOrgPerson + objectclass delete person +---------------------------------- + objectclass replace computer + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass add user + objectclass delete person +---------------------------------- + objectclass replace computer + objectclass add inetOrgPerson + objectclass add user + objectclass replace attributeSchema + objectclass delete person +---------------------------------- + objectclass replace computer + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass add user + objectclass delete person +---------------------------------- + objectclass add user + objectclass replace computer + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass delete person +---------------------------------- + objectclass add user + objectclass replace computer + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass delete person +---------------------------------- + objectclass add user + objectclass replace attributeSchema + objectclass replace computer + objectclass add inetOrgPerson + objectclass delete person +---------------------------------- + objectclass add user + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass replace computer + objectclass delete person +---------------------------------- + objectclass add user + objectclass add inetOrgPerson + objectclass replace computer + objectclass replace attributeSchema + objectclass delete person +---------------------------------- + objectclass add user + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass replace computer + objectclass delete person +---------------------------------- + objectclass replace attributeSchema + objectclass replace computer + objectclass add user + objectclass add inetOrgPerson + objectclass delete person +---------------------------------- + objectclass replace attributeSchema + objectclass replace computer + objectclass add inetOrgPerson + objectclass add user + objectclass delete person +---------------------------------- + objectclass replace attributeSchema + objectclass add user + objectclass replace computer + objectclass add inetOrgPerson + objectclass delete person +---------------------------------- + objectclass replace attributeSchema + objectclass add user + objectclass add inetOrgPerson + objectclass replace computer + objectclass delete person +---------------------------------- + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass replace computer + objectclass add user + objectclass delete person +---------------------------------- + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass add user + objectclass replace computer + objectclass delete person +---------------------------------- + objectclass add inetOrgPerson + objectclass replace computer + objectclass add user + objectclass replace attributeSchema + objectclass delete person +---------------------------------- + objectclass add inetOrgPerson + objectclass replace computer + objectclass replace attributeSchema + objectclass add user + objectclass delete person +---------------------------------- + objectclass add inetOrgPerson + objectclass add user + objectclass replace computer + objectclass replace attributeSchema + objectclass delete person +---------------------------------- + objectclass add inetOrgPerson + objectclass add user + objectclass replace attributeSchema + objectclass replace computer + objectclass delete person +---------------------------------- + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass replace computer + objectclass add user + objectclass delete person +---------------------------------- + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass add user + objectclass replace computer + objectclass delete person +---------------------------------- +== result ===[ 24]======================= +ERR_ATTRIBUTE_OR_VALUE_EXISTS (20) +-- operations --------------------------- + objectclass replace computer + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass delete person + objectclass add user +---------------------------------- + objectclass replace computer + objectclass replace attributeSchema + objectclass delete person + objectclass add inetOrgPerson + objectclass add user +---------------------------------- + objectclass replace computer + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass delete person + objectclass add user +---------------------------------- + objectclass replace computer + objectclass add inetOrgPerson + objectclass delete person + objectclass replace attributeSchema + objectclass add user +---------------------------------- + objectclass replace computer + objectclass delete person + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass add user +---------------------------------- + objectclass replace computer + objectclass delete person + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass add user +---------------------------------- + objectclass replace attributeSchema + objectclass replace computer + objectclass add inetOrgPerson + objectclass delete person + objectclass add user +---------------------------------- + objectclass replace attributeSchema + objectclass replace computer + objectclass delete person + objectclass add inetOrgPerson + objectclass add user +---------------------------------- + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass replace computer + objectclass delete person + objectclass add user +---------------------------------- + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass delete person + objectclass replace computer + objectclass add user +---------------------------------- + objectclass replace attributeSchema + objectclass delete person + objectclass replace computer + objectclass add inetOrgPerson + objectclass add user +---------------------------------- + objectclass replace attributeSchema + objectclass delete person + objectclass add inetOrgPerson + objectclass replace computer + objectclass add user +---------------------------------- + objectclass add inetOrgPerson + objectclass replace computer + objectclass replace attributeSchema + objectclass delete person + objectclass add user +---------------------------------- + objectclass add inetOrgPerson + objectclass replace computer + objectclass delete person + objectclass replace attributeSchema + objectclass add user +---------------------------------- + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass replace computer + objectclass delete person + objectclass add user +---------------------------------- + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass delete person + objectclass replace computer + objectclass add user +---------------------------------- + objectclass add inetOrgPerson + objectclass delete person + objectclass replace computer + objectclass replace attributeSchema + objectclass add user +---------------------------------- + objectclass add inetOrgPerson + objectclass delete person + objectclass replace attributeSchema + objectclass replace computer + objectclass add user +---------------------------------- + objectclass delete person + objectclass replace computer + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass add user +---------------------------------- + objectclass delete person + objectclass replace computer + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass add user +---------------------------------- + objectclass delete person + objectclass replace attributeSchema + objectclass replace computer + objectclass add inetOrgPerson + objectclass add user +---------------------------------- + objectclass delete person + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass replace computer + objectclass add user +---------------------------------- + objectclass delete person + objectclass add inetOrgPerson + objectclass replace computer + objectclass replace attributeSchema + objectclass add user +---------------------------------- + objectclass delete person + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass replace computer + objectclass add user +---------------------------------- +== result ===[ 48]======================= +ERR_OBJECT_CLASS_VIOLATION (65) +-- operations --------------------------- + objectclass replace computer + objectclass add user + objectclass add inetOrgPerson + objectclass delete person + objectclass replace attributeSchema +---------------------------------- + objectclass replace computer + objectclass add user + objectclass delete person + objectclass add inetOrgPerson + objectclass replace attributeSchema +---------------------------------- + objectclass replace computer + objectclass add inetOrgPerson + objectclass add user + objectclass delete person + objectclass replace attributeSchema +---------------------------------- + objectclass replace computer + objectclass add inetOrgPerson + objectclass delete person + objectclass add user + objectclass replace attributeSchema +---------------------------------- + objectclass replace computer + objectclass delete person + objectclass add user + objectclass add inetOrgPerson + objectclass replace attributeSchema +---------------------------------- + objectclass replace computer + objectclass delete person + objectclass add inetOrgPerson + objectclass add user + objectclass replace attributeSchema +---------------------------------- + objectclass add user + objectclass replace computer + objectclass add inetOrgPerson + objectclass delete person + objectclass replace attributeSchema +---------------------------------- + objectclass add user + objectclass replace computer + objectclass delete person + objectclass add inetOrgPerson + objectclass replace attributeSchema +---------------------------------- + objectclass add user + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass delete person + objectclass replace computer +---------------------------------- + objectclass add user + objectclass replace attributeSchema + objectclass delete person + objectclass add inetOrgPerson + objectclass replace computer +---------------------------------- + objectclass add user + objectclass add inetOrgPerson + objectclass replace computer + objectclass delete person + objectclass replace attributeSchema +---------------------------------- + objectclass add user + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass delete person + objectclass replace computer +---------------------------------- + objectclass add user + objectclass add inetOrgPerson + objectclass delete person + objectclass replace computer + objectclass replace attributeSchema +---------------------------------- + objectclass add user + objectclass add inetOrgPerson + objectclass delete person + objectclass replace attributeSchema + objectclass replace computer +---------------------------------- + objectclass add user + objectclass delete person + objectclass replace computer + objectclass add inetOrgPerson + objectclass replace attributeSchema +---------------------------------- + objectclass add user + objectclass delete person + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass replace computer +---------------------------------- + objectclass add user + objectclass delete person + objectclass add inetOrgPerson + objectclass replace computer + objectclass replace attributeSchema +---------------------------------- + objectclass add user + objectclass delete person + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass replace computer +---------------------------------- + objectclass replace attributeSchema + objectclass add user + objectclass add inetOrgPerson + objectclass delete person + objectclass replace computer +---------------------------------- + objectclass replace attributeSchema + objectclass add user + objectclass delete person + objectclass add inetOrgPerson + objectclass replace computer +---------------------------------- + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass add user + objectclass delete person + objectclass replace computer +---------------------------------- + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass delete person + objectclass add user + objectclass replace computer +---------------------------------- + objectclass replace attributeSchema + objectclass delete person + objectclass add user + objectclass add inetOrgPerson + objectclass replace computer +---------------------------------- + objectclass replace attributeSchema + objectclass delete person + objectclass add inetOrgPerson + objectclass add user + objectclass replace computer +---------------------------------- + objectclass add inetOrgPerson + objectclass replace computer + objectclass add user + objectclass delete person + objectclass replace attributeSchema +---------------------------------- + objectclass add inetOrgPerson + objectclass replace computer + objectclass delete person + objectclass add user + objectclass replace attributeSchema +---------------------------------- + objectclass add inetOrgPerson + objectclass add user + objectclass replace computer + objectclass delete person + objectclass replace attributeSchema +---------------------------------- + objectclass add inetOrgPerson + objectclass add user + objectclass replace attributeSchema + objectclass delete person + objectclass replace computer +---------------------------------- + objectclass add inetOrgPerson + objectclass add user + objectclass delete person + objectclass replace computer + objectclass replace attributeSchema +---------------------------------- + objectclass add inetOrgPerson + objectclass add user + objectclass delete person + objectclass replace attributeSchema + objectclass replace computer +---------------------------------- + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass add user + objectclass delete person + objectclass replace computer +---------------------------------- + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass delete person + objectclass add user + objectclass replace computer +---------------------------------- + objectclass add inetOrgPerson + objectclass delete person + objectclass replace computer + objectclass add user + objectclass replace attributeSchema +---------------------------------- + objectclass add inetOrgPerson + objectclass delete person + objectclass add user + objectclass replace computer + objectclass replace attributeSchema +---------------------------------- + objectclass add inetOrgPerson + objectclass delete person + objectclass add user + objectclass replace attributeSchema + objectclass replace computer +---------------------------------- + objectclass add inetOrgPerson + objectclass delete person + objectclass replace attributeSchema + objectclass add user + objectclass replace computer +---------------------------------- + objectclass delete person + objectclass replace computer + objectclass add user + objectclass add inetOrgPerson + objectclass replace attributeSchema +---------------------------------- + objectclass delete person + objectclass replace computer + objectclass add inetOrgPerson + objectclass add user + objectclass replace attributeSchema +---------------------------------- + objectclass delete person + objectclass add user + objectclass replace computer + objectclass add inetOrgPerson + objectclass replace attributeSchema +---------------------------------- + objectclass delete person + objectclass add user + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass replace computer +---------------------------------- + objectclass delete person + objectclass add user + objectclass add inetOrgPerson + objectclass replace computer + objectclass replace attributeSchema +---------------------------------- + objectclass delete person + objectclass add user + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass replace computer +---------------------------------- + objectclass delete person + objectclass replace attributeSchema + objectclass add user + objectclass add inetOrgPerson + objectclass replace computer +---------------------------------- + objectclass delete person + objectclass replace attributeSchema + objectclass add inetOrgPerson + objectclass add user + objectclass replace computer +---------------------------------- + objectclass delete person + objectclass add inetOrgPerson + objectclass replace computer + objectclass add user + objectclass replace attributeSchema +---------------------------------- + objectclass delete person + objectclass add inetOrgPerson + objectclass add user + objectclass replace computer + objectclass replace attributeSchema +---------------------------------- + objectclass delete person + objectclass add inetOrgPerson + objectclass add user + objectclass replace attributeSchema + objectclass replace computer +---------------------------------- + objectclass delete person + objectclass add inetOrgPerson + objectclass replace attributeSchema + objectclass add user + objectclass replace computer +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_singlevalue.expected b/source4/dsdb/tests/python/testdata/modify_order_singlevalue.expected new file mode 100644 index 00000000000..99461656b20 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_singlevalue.expected @@ -0,0 +1,740 @@ +modify_order_singlevalue +initial attrs: + objectclass: 'user' + givenName: 'a' +== result ===[ 24]======================= + givenName: [b'a'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + givenName replace ['b', 'a'] + givenName delete b + givenName delete a + givenName add c + givenName replace a +---------------------------------- + givenName replace ['b', 'a'] + givenName delete b + givenName add c + givenName delete a + givenName replace a +---------------------------------- + givenName replace ['b', 'a'] + givenName delete a + givenName delete b + givenName add c + givenName replace a +---------------------------------- + givenName replace ['b', 'a'] + givenName delete a + givenName add c + givenName delete b + givenName replace a +---------------------------------- + givenName replace ['b', 'a'] + givenName add c + givenName delete b + givenName delete a + givenName replace a +---------------------------------- + givenName replace ['b', 'a'] + givenName add c + givenName delete a + givenName delete b + givenName replace a +---------------------------------- + givenName delete b + givenName replace ['b', 'a'] + givenName delete a + givenName add c + givenName replace a +---------------------------------- + givenName delete b + givenName replace ['b', 'a'] + givenName add c + givenName delete a + givenName replace a +---------------------------------- + givenName delete b + givenName delete a + givenName replace ['b', 'a'] + givenName add c + givenName replace a +---------------------------------- + givenName delete b + givenName delete a + givenName add c + givenName replace ['b', 'a'] + givenName replace a +---------------------------------- + givenName delete b + givenName add c + givenName replace ['b', 'a'] + givenName delete a + givenName replace a +---------------------------------- + givenName delete b + givenName add c + givenName delete a + givenName replace ['b', 'a'] + givenName replace a +---------------------------------- + givenName delete a + givenName replace ['b', 'a'] + givenName delete b + givenName add c + givenName replace a +---------------------------------- + givenName delete a + givenName replace ['b', 'a'] + givenName add c + givenName delete b + givenName replace a +---------------------------------- + givenName delete a + givenName delete b + givenName replace ['b', 'a'] + givenName add c + givenName replace a +---------------------------------- + givenName delete a + givenName delete b + givenName add c + givenName replace ['b', 'a'] + givenName replace a +---------------------------------- + givenName delete a + givenName add c + givenName replace ['b', 'a'] + givenName delete b + givenName replace a +---------------------------------- + givenName delete a + givenName add c + givenName delete b + givenName replace ['b', 'a'] + givenName replace a +---------------------------------- + givenName add c + givenName replace ['b', 'a'] + givenName delete b + givenName delete a + givenName replace a +---------------------------------- + givenName add c + givenName replace ['b', 'a'] + givenName delete a + givenName delete b + givenName replace a +---------------------------------- + givenName add c + givenName delete b + givenName replace ['b', 'a'] + givenName delete a + givenName replace a +---------------------------------- + givenName add c + givenName delete b + givenName delete a + givenName replace ['b', 'a'] + givenName replace a +---------------------------------- + givenName add c + givenName delete a + givenName replace ['b', 'a'] + givenName delete b + givenName replace a +---------------------------------- + givenName add c + givenName delete a + givenName delete b + givenName replace ['b', 'a'] + givenName replace a +---------------------------------- +== result ===[ 24]======================= + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + givenName replace a + givenName replace ['b', 'a'] + givenName delete b + givenName add c + givenName delete a +---------------------------------- + givenName replace a + givenName replace ['b', 'a'] + givenName add c + givenName delete b + givenName delete a +---------------------------------- + givenName replace a + givenName delete b + givenName replace ['b', 'a'] + givenName add c + givenName delete a +---------------------------------- + givenName replace a + givenName delete b + givenName add c + givenName replace ['b', 'a'] + givenName delete a +---------------------------------- + givenName replace a + givenName add c + givenName replace ['b', 'a'] + givenName delete b + givenName delete a +---------------------------------- + givenName replace a + givenName add c + givenName delete b + givenName replace ['b', 'a'] + givenName delete a +---------------------------------- + givenName replace ['b', 'a'] + givenName replace a + givenName delete b + givenName add c + givenName delete a +---------------------------------- + givenName replace ['b', 'a'] + givenName replace a + givenName add c + givenName delete b + givenName delete a +---------------------------------- + givenName replace ['b', 'a'] + givenName delete b + givenName replace a + givenName add c + givenName delete a +---------------------------------- + givenName replace ['b', 'a'] + givenName delete b + givenName add c + givenName replace a + givenName delete a +---------------------------------- + givenName replace ['b', 'a'] + givenName add c + givenName replace a + givenName delete b + givenName delete a +---------------------------------- + givenName replace ['b', 'a'] + givenName add c + givenName delete b + givenName replace a + givenName delete a +---------------------------------- + givenName delete b + givenName replace a + givenName replace ['b', 'a'] + givenName add c + givenName delete a +---------------------------------- + givenName delete b + givenName replace a + givenName add c + givenName replace ['b', 'a'] + givenName delete a +---------------------------------- + givenName delete b + givenName replace ['b', 'a'] + givenName replace a + givenName add c + givenName delete a +---------------------------------- + givenName delete b + givenName replace ['b', 'a'] + givenName add c + givenName replace a + givenName delete a +---------------------------------- + givenName delete b + givenName add c + givenName replace a + givenName replace ['b', 'a'] + givenName delete a +---------------------------------- + givenName delete b + givenName add c + givenName replace ['b', 'a'] + givenName replace a + givenName delete a +---------------------------------- + givenName add c + givenName replace a + givenName replace ['b', 'a'] + givenName delete b + givenName delete a +---------------------------------- + givenName add c + givenName replace a + givenName delete b + givenName replace ['b', 'a'] + givenName delete a +---------------------------------- + givenName add c + givenName replace ['b', 'a'] + givenName replace a + givenName delete b + givenName delete a +---------------------------------- + givenName add c + givenName replace ['b', 'a'] + givenName delete b + givenName replace a + givenName delete a +---------------------------------- + givenName add c + givenName delete b + givenName replace a + givenName replace ['b', 'a'] + givenName delete a +---------------------------------- + givenName add c + givenName delete b + givenName replace ['b', 'a'] + givenName replace a + givenName delete a +---------------------------------- +== result ===[ 24]======================= +ERR_ATTRIBUTE_OR_VALUE_EXISTS (20) +-- operations --------------------------- + givenName replace a + givenName replace ['b', 'a'] + givenName delete b + givenName delete a + givenName add c +---------------------------------- + givenName replace a + givenName replace ['b', 'a'] + givenName delete a + givenName delete b + givenName add c +---------------------------------- + givenName replace a + givenName delete b + givenName replace ['b', 'a'] + givenName delete a + givenName add c +---------------------------------- + givenName replace a + givenName delete b + givenName delete a + givenName replace ['b', 'a'] + givenName add c +---------------------------------- + givenName replace a + givenName delete a + givenName replace ['b', 'a'] + givenName delete b + givenName add c +---------------------------------- + givenName replace a + givenName delete a + givenName delete b + givenName replace ['b', 'a'] + givenName add c +---------------------------------- + givenName replace ['b', 'a'] + givenName replace a + givenName delete b + givenName delete a + givenName add c +---------------------------------- + givenName replace ['b', 'a'] + givenName replace a + givenName delete a + givenName delete b + givenName add c +---------------------------------- + givenName replace ['b', 'a'] + givenName delete b + givenName replace a + givenName delete a + givenName add c +---------------------------------- + givenName replace ['b', 'a'] + givenName delete b + givenName delete a + givenName replace a + givenName add c +---------------------------------- + givenName replace ['b', 'a'] + givenName delete a + givenName replace a + givenName delete b + givenName add c +---------------------------------- + givenName replace ['b', 'a'] + givenName delete a + givenName delete b + givenName replace a + givenName add c +---------------------------------- + givenName delete b + givenName replace a + givenName replace ['b', 'a'] + givenName delete a + givenName add c +---------------------------------- + givenName delete b + givenName replace a + givenName delete a + givenName replace ['b', 'a'] + givenName add c +---------------------------------- + givenName delete b + givenName replace ['b', 'a'] + givenName replace a + givenName delete a + givenName add c +---------------------------------- + givenName delete b + givenName replace ['b', 'a'] + givenName delete a + givenName replace a + givenName add c +---------------------------------- + givenName delete b + givenName delete a + givenName replace a + givenName replace ['b', 'a'] + givenName add c +---------------------------------- + givenName delete b + givenName delete a + givenName replace ['b', 'a'] + givenName replace a + givenName add c +---------------------------------- + givenName delete a + givenName replace a + givenName replace ['b', 'a'] + givenName delete b + givenName add c +---------------------------------- + givenName delete a + givenName replace a + givenName delete b + givenName replace ['b', 'a'] + givenName add c +---------------------------------- + givenName delete a + givenName replace ['b', 'a'] + givenName replace a + givenName delete b + givenName add c +---------------------------------- + givenName delete a + givenName replace ['b', 'a'] + givenName delete b + givenName replace a + givenName add c +---------------------------------- + givenName delete a + givenName delete b + givenName replace a + givenName replace ['b', 'a'] + givenName add c +---------------------------------- + givenName delete a + givenName delete b + givenName replace ['b', 'a'] + givenName replace a + givenName add c +---------------------------------- +== result ===[ 24]======================= +ERR_CONSTRAINT_VIOLATION (19) +-- operations --------------------------- + givenName replace a + givenName delete b + givenName delete a + givenName add c + givenName replace ['b', 'a'] +---------------------------------- + givenName replace a + givenName delete b + givenName add c + givenName delete a + givenName replace ['b', 'a'] +---------------------------------- + givenName replace a + givenName delete a + givenName delete b + givenName add c + givenName replace ['b', 'a'] +---------------------------------- + givenName replace a + givenName delete a + givenName add c + givenName delete b + givenName replace ['b', 'a'] +---------------------------------- + givenName replace a + givenName add c + givenName delete b + givenName delete a + givenName replace ['b', 'a'] +---------------------------------- + givenName replace a + givenName add c + givenName delete a + givenName delete b + givenName replace ['b', 'a'] +---------------------------------- + givenName delete b + givenName replace a + givenName delete a + givenName add c + givenName replace ['b', 'a'] +---------------------------------- + givenName delete b + givenName replace a + givenName add c + givenName delete a + givenName replace ['b', 'a'] +---------------------------------- + givenName delete b + givenName delete a + givenName replace a + givenName add c + givenName replace ['b', 'a'] +---------------------------------- + givenName delete b + givenName delete a + givenName add c + givenName replace a + givenName replace ['b', 'a'] +---------------------------------- + givenName delete b + givenName add c + givenName replace a + givenName delete a + givenName replace ['b', 'a'] +---------------------------------- + givenName delete b + givenName add c + givenName delete a + givenName replace a + givenName replace ['b', 'a'] +---------------------------------- + givenName delete a + givenName replace a + givenName delete b + givenName add c + givenName replace ['b', 'a'] +---------------------------------- + givenName delete a + givenName replace a + givenName add c + givenName delete b + givenName replace ['b', 'a'] +---------------------------------- + givenName delete a + givenName delete b + givenName replace a + givenName add c + givenName replace ['b', 'a'] +---------------------------------- + givenName delete a + givenName delete b + givenName add c + givenName replace a + givenName replace ['b', 'a'] +---------------------------------- + givenName delete a + givenName add c + givenName replace a + givenName delete b + givenName replace ['b', 'a'] +---------------------------------- + givenName delete a + givenName add c + givenName delete b + givenName replace a + givenName replace ['b', 'a'] +---------------------------------- + givenName add c + givenName replace a + givenName delete b + givenName delete a + givenName replace ['b', 'a'] +---------------------------------- + givenName add c + givenName replace a + givenName delete a + givenName delete b + givenName replace ['b', 'a'] +---------------------------------- + givenName add c + givenName delete b + givenName replace a + givenName delete a + givenName replace ['b', 'a'] +---------------------------------- + givenName add c + givenName delete b + givenName delete a + givenName replace a + givenName replace ['b', 'a'] +---------------------------------- + givenName add c + givenName delete a + givenName replace a + givenName delete b + givenName replace ['b', 'a'] +---------------------------------- + givenName add c + givenName delete a + givenName delete b + givenName replace a + givenName replace ['b', 'a'] +---------------------------------- +== result ===[ 24]======================= +ERR_NO_SUCH_ATTRIBUTE (16) +-- operations --------------------------- + givenName replace a + givenName replace ['b', 'a'] + givenName delete a + givenName add c + givenName delete b +---------------------------------- + givenName replace a + givenName replace ['b', 'a'] + givenName add c + givenName delete a + givenName delete b +---------------------------------- + givenName replace a + givenName delete a + givenName replace ['b', 'a'] + givenName add c + givenName delete b +---------------------------------- + givenName replace a + givenName delete a + givenName add c + givenName replace ['b', 'a'] + givenName delete b +---------------------------------- + givenName replace a + givenName add c + givenName replace ['b', 'a'] + givenName delete a + givenName delete b +---------------------------------- + givenName replace a + givenName add c + givenName delete a + givenName replace ['b', 'a'] + givenName delete b +---------------------------------- + givenName replace ['b', 'a'] + givenName replace a + givenName delete a + givenName add c + givenName delete b +---------------------------------- + givenName replace ['b', 'a'] + givenName replace a + givenName add c + givenName delete a + givenName delete b +---------------------------------- + givenName replace ['b', 'a'] + givenName delete a + givenName replace a + givenName add c + givenName delete b +---------------------------------- + givenName replace ['b', 'a'] + givenName delete a + givenName add c + givenName replace a + givenName delete b +---------------------------------- + givenName replace ['b', 'a'] + givenName add c + givenName replace a + givenName delete a + givenName delete b +---------------------------------- + givenName replace ['b', 'a'] + givenName add c + givenName delete a + givenName replace a + givenName delete b +---------------------------------- + givenName delete a + givenName replace a + givenName replace ['b', 'a'] + givenName add c + givenName delete b +---------------------------------- + givenName delete a + givenName replace a + givenName add c + givenName replace ['b', 'a'] + givenName delete b +---------------------------------- + givenName delete a + givenName replace ['b', 'a'] + givenName replace a + givenName add c + givenName delete b +---------------------------------- + givenName delete a + givenName replace ['b', 'a'] + givenName add c + givenName replace a + givenName delete b +---------------------------------- + givenName delete a + givenName add c + givenName replace a + givenName replace ['b', 'a'] + givenName delete b +---------------------------------- + givenName delete a + givenName add c + givenName replace ['b', 'a'] + givenName replace a + givenName delete b +---------------------------------- + givenName add c + givenName replace a + givenName replace ['b', 'a'] + givenName delete a + givenName delete b +---------------------------------- + givenName add c + givenName replace a + givenName delete a + givenName replace ['b', 'a'] + givenName delete b +---------------------------------- + givenName add c + givenName replace ['b', 'a'] + givenName replace a + givenName delete a + givenName delete b +---------------------------------- + givenName add c + givenName replace ['b', 'a'] + givenName delete a + givenName replace a + givenName delete b +---------------------------------- + givenName add c + givenName delete a + givenName replace a + givenName replace ['b', 'a'] + givenName delete b +---------------------------------- + givenName add c + givenName delete a + givenName replace ['b', 'a'] + givenName replace a + givenName delete b +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_sometimes_inapplicable.expected b/source4/dsdb/tests/python/testdata/modify_order_sometimes_inapplicable.expected new file mode 100644 index 00000000000..a8af7f0a020 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_sometimes_inapplicable.expected @@ -0,0 +1,127 @@ +modify_order_sometimes_inapplicable +initial attrs: + objectclass: 'user' + givenName: 'a' +== result ===[ 24]======================= +ERR_OBJECT_CLASS_VIOLATION (65) +-- operations --------------------------- + objectclass replace computer + objectclass delete person + dnsHostName add b + dnsHostName replace c +---------------------------------- + objectclass replace computer + objectclass delete person + dnsHostName replace c + dnsHostName add b +---------------------------------- + objectclass replace computer + dnsHostName add b + objectclass delete person + dnsHostName replace c +---------------------------------- + objectclass replace computer + dnsHostName add b + dnsHostName replace c + objectclass delete person +---------------------------------- + objectclass replace computer + dnsHostName replace c + objectclass delete person + dnsHostName add b +---------------------------------- + objectclass replace computer + dnsHostName replace c + dnsHostName add b + objectclass delete person +---------------------------------- + objectclass delete person + objectclass replace computer + dnsHostName add b + dnsHostName replace c +---------------------------------- + objectclass delete person + objectclass replace computer + dnsHostName replace c + dnsHostName add b +---------------------------------- + objectclass delete person + dnsHostName add b + objectclass replace computer + dnsHostName replace c +---------------------------------- + objectclass delete person + dnsHostName add b + dnsHostName replace c + objectclass replace computer +---------------------------------- + objectclass delete person + dnsHostName replace c + objectclass replace computer + dnsHostName add b +---------------------------------- + objectclass delete person + dnsHostName replace c + dnsHostName add b + objectclass replace computer +---------------------------------- + dnsHostName add b + objectclass replace computer + objectclass delete person + dnsHostName replace c +---------------------------------- + dnsHostName add b + objectclass replace computer + dnsHostName replace c + objectclass delete person +---------------------------------- + dnsHostName add b + objectclass delete person + objectclass replace computer + dnsHostName replace c +---------------------------------- + dnsHostName add b + objectclass delete person + dnsHostName replace c + objectclass replace computer +---------------------------------- + dnsHostName add b + dnsHostName replace c + objectclass replace computer + objectclass delete person +---------------------------------- + dnsHostName add b + dnsHostName replace c + objectclass delete person + objectclass replace computer +---------------------------------- + dnsHostName replace c + objectclass replace computer + objectclass delete person + dnsHostName add b +---------------------------------- + dnsHostName replace c + objectclass replace computer + dnsHostName add b + objectclass delete person +---------------------------------- + dnsHostName replace c + objectclass delete person + objectclass replace computer + dnsHostName add b +---------------------------------- + dnsHostName replace c + objectclass delete person + dnsHostName add b + objectclass replace computer +---------------------------------- + dnsHostName replace c + dnsHostName add b + objectclass replace computer + objectclass delete person +---------------------------------- + dnsHostName replace c + dnsHostName add b + objectclass delete person + objectclass replace computer +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_telephone.expected b/source4/dsdb/tests/python/testdata/modify_order_telephone.expected new file mode 100644 index 00000000000..d17de031534 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_telephone.expected @@ -0,0 +1,752 @@ +modify_order_telephone +initial attrs: + objectclass: 'user' + otherTelephone: '123' +== result ===[ 20]======================= + carLicense: [b'3'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense add 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone add 4 + otherTelephone delete 123 +---------------------------------- + carLicense add 4 + carLicense replace 3 + otherTelephone add 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense add 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone add 4 + otherTelephone delete 123 +---------------------------------- + carLicense add 4 + otherTelephone replace 4 + otherTelephone add 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + carLicense add 4 + otherTelephone replace 4 + otherTelephone add 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + carLicense add 4 + otherTelephone add 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense add 4 + otherTelephone add 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + carLicense add 4 + otherTelephone add 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + carLicense add 4 + carLicense replace 3 + otherTelephone add 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense add 4 + otherTelephone add 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense add 4 + otherTelephone add 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone add 4 + carLicense add 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + otherTelephone add 4 + carLicense add 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone add 4 + otherTelephone delete 123 + carLicense add 4 + carLicense replace 3 +---------------------------------- + otherTelephone add 4 + carLicense add 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone add 4 + carLicense add 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone add 4 + carLicense add 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone add 4 + otherTelephone replace 4 + carLicense add 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone add 4 + otherTelephone replace 4 + carLicense add 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone add 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense add 4 + carLicense replace 3 +---------------------------------- +== result ===[ 20]======================= + carLicense: [b'3'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] + otherTelephone: [b'123', b'4'] +-- operations --------------------------- + carLicense add 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone add 4 +---------------------------------- + carLicense add 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone add 4 +---------------------------------- + carLicense add 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone add 4 +---------------------------------- + carLicense add 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone add 4 +---------------------------------- + carLicense add 4 + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone add 4 + carLicense replace 3 +---------------------------------- + carLicense add 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone add 4 +---------------------------------- + carLicense add 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone add 4 +---------------------------------- + carLicense add 4 + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone add 4 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + carLicense add 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone add 4 +---------------------------------- + otherTelephone replace 4 + carLicense add 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone add 4 +---------------------------------- + otherTelephone replace 4 + carLicense add 4 + otherTelephone delete 123 + otherTelephone add 4 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense add 4 + carLicense replace 3 + otherTelephone add 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense add 4 + otherTelephone add 4 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone add 4 + carLicense add 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + carLicense add 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone add 4 +---------------------------------- + otherTelephone delete 123 + carLicense add 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone add 4 +---------------------------------- + otherTelephone delete 123 + carLicense add 4 + otherTelephone replace 4 + otherTelephone add 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense add 4 + carLicense replace 3 + otherTelephone add 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense add 4 + otherTelephone add 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone add 4 + carLicense add 4 + carLicense replace 3 +---------------------------------- +== result ===[ 20]======================= + carLicense: [b'3'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] + otherTelephone: [b'4'] +-- operations --------------------------- + carLicense add 4 + carLicense replace 3 + otherTelephone add 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense add 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone add 4 + otherTelephone replace 4 +---------------------------------- + carLicense add 4 + otherTelephone add 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense add 4 + otherTelephone add 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + carLicense add 4 + otherTelephone add 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + carLicense add 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone add 4 + otherTelephone replace 4 +---------------------------------- + carLicense add 4 + otherTelephone delete 123 + otherTelephone add 4 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + carLicense add 4 + otherTelephone delete 123 + otherTelephone add 4 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone add 4 + carLicense add 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + otherTelephone add 4 + carLicense add 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone add 4 + carLicense add 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone add 4 + otherTelephone delete 123 + carLicense add 4 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone add 4 + otherTelephone delete 123 + carLicense add 4 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone add 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense add 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + carLicense add 4 + carLicense replace 3 + otherTelephone add 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense add 4 + otherTelephone add 4 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense add 4 + otherTelephone add 4 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone add 4 + carLicense add 4 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone add 4 + carLicense add 4 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone add 4 + otherTelephone replace 4 + carLicense add 4 + carLicense replace 3 +---------------------------------- +== result ===[ 20]======================= + carLicense: [b'4'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense replace 3 + carLicense add 4 + otherTelephone replace 4 + otherTelephone add 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + carLicense add 4 + otherTelephone add 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + carLicense add 4 + otherTelephone add 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + otherTelephone add 4 + carLicense add 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + otherTelephone add 4 + otherTelephone delete 123 + carLicense add 4 +---------------------------------- + carLicense replace 3 + otherTelephone add 4 + carLicense add 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone add 4 + otherTelephone replace 4 + carLicense add 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone add 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense add 4 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + carLicense add 4 + otherTelephone add 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + otherTelephone add 4 + carLicense add 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + otherTelephone add 4 + otherTelephone delete 123 + carLicense add 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone add 4 + carLicense replace 3 + carLicense add 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + otherTelephone add 4 + carLicense replace 3 + otherTelephone delete 123 + carLicense add 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone add 4 + otherTelephone delete 123 + carLicense replace 3 + carLicense add 4 +---------------------------------- + otherTelephone add 4 + carLicense replace 3 + carLicense add 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone add 4 + carLicense replace 3 + otherTelephone replace 4 + carLicense add 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone add 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense add 4 +---------------------------------- + otherTelephone add 4 + otherTelephone replace 4 + carLicense replace 3 + carLicense add 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone add 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 + carLicense add 4 +---------------------------------- + otherTelephone add 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 + carLicense add 4 +---------------------------------- +== result ===[ 20]======================= + carLicense: [b'4'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] + otherTelephone: [b'123', b'4'] +-- operations --------------------------- + carLicense replace 3 + carLicense add 4 + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone add 4 +---------------------------------- + carLicense replace 3 + carLicense add 4 + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone add 4 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + carLicense add 4 + otherTelephone delete 123 + otherTelephone add 4 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense add 4 + otherTelephone add 4 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone add 4 + carLicense add 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + carLicense add 4 + otherTelephone replace 4 + otherTelephone add 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense add 4 + otherTelephone add 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone add 4 + carLicense add 4 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + carLicense add 4 + otherTelephone delete 123 + otherTelephone add 4 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 + carLicense add 4 + otherTelephone add 4 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone add 4 + carLicense add 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 + carLicense add 4 + otherTelephone add 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone add 4 + carLicense add 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone add 4 + carLicense replace 3 + carLicense add 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + carLicense add 4 + otherTelephone replace 4 + otherTelephone add 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 + carLicense add 4 + otherTelephone add 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone add 4 + carLicense add 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 + carLicense add 4 + otherTelephone add 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone add 4 + carLicense add 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone add 4 + carLicense replace 3 + carLicense add 4 +---------------------------------- +== result ===[ 20]======================= + carLicense: [b'4'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] + otherTelephone: [b'4'] +-- operations --------------------------- + carLicense replace 3 + carLicense add 4 + otherTelephone add 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + carLicense add 4 + otherTelephone delete 123 + otherTelephone add 4 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone add 4 + carLicense add 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone add 4 + otherTelephone delete 123 + carLicense add 4 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone add 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense add 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + carLicense add 4 + otherTelephone add 4 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + otherTelephone add 4 + carLicense add 4 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + otherTelephone add 4 + otherTelephone replace 4 + carLicense add 4 +---------------------------------- + otherTelephone add 4 + carLicense replace 3 + carLicense add 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + otherTelephone add 4 + carLicense replace 3 + otherTelephone delete 123 + carLicense add 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone add 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense add 4 +---------------------------------- + otherTelephone add 4 + otherTelephone delete 123 + carLicense replace 3 + carLicense add 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone add 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 + carLicense add 4 +---------------------------------- + otherTelephone add 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 + carLicense add 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + carLicense add 4 + otherTelephone add 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + otherTelephone add 4 + carLicense add 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + otherTelephone add 4 + otherTelephone replace 4 + carLicense add 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone add 4 + carLicense replace 3 + carLicense add 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone add 4 + carLicense replace 3 + otherTelephone replace 4 + carLicense add 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone add 4 + otherTelephone replace 4 + carLicense replace 3 + carLicense add 4 +---------------------------------- \ No newline at end of file diff --git a/source4/dsdb/tests/python/testdata/modify_order_telephone_delete_delete.expected b/source4/dsdb/tests/python/testdata/modify_order_telephone_delete_delete.expected new file mode 100644 index 00000000000..14983bafe82 --- /dev/null +++ b/source4/dsdb/tests/python/testdata/modify_order_telephone_delete_delete.expected @@ -0,0 +1,736 @@ +modify_order_telephone_delete_delete +initial attrs: + objectclass: 'user' + otherTelephone: '123' +== result ===[ 20]======================= + carLicense: [b'3'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] +-- operations --------------------------- + carLicense delete 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 4 + otherTelephone delete 123 +---------------------------------- + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense delete 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 4 + otherTelephone delete 123 +---------------------------------- + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + carLicense delete 4 + otherTelephone delete 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense delete 4 + otherTelephone delete 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + carLicense delete 4 + otherTelephone delete 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 4 + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 4 + carLicense delete 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 4 + otherTelephone delete 123 + carLicense delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 4 + carLicense delete 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone delete 4 + carLicense delete 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone delete 4 + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone delete 4 + otherTelephone replace 4 + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 123 +---------------------------------- + otherTelephone delete 4 + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 123 + carLicense replace 3 +---------------------------------- + otherTelephone delete 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense delete 4 + carLicense replace 3 +---------------------------------- +== result ===[ 20]======================= + carLicense: [b'3'] + objectClass: [b'organizationalPerson', b'person', b'top', b'user'] + otherTelephone: [b'4'] +-- operations --------------------------- + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone delete 4 + otherTelephone replace 4 +---------------------------------- + carLicense delete 4 + otherTelephone delete 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense delete 4 + otherTelephone delete 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + carLicense delete 4 + otherTelephone delete 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + carLicense delete 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone delete 4 + otherTelephone replace 4 +---------------------------------- + carLicense delete 4 + otherTelephone delete 123 + otherTelephone delete 4 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + carLicense delete 4 + otherTelephone delete 123 + otherTelephone delete 4 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 4 + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 4 + carLicense delete 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 4 + carLicense delete 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 4 + otherTelephone delete 123 + carLicense delete 4 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 4 + otherTelephone delete 123 + carLicense delete 4 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense delete 4 + otherTelephone delete 4 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense delete 4 + otherTelephone delete 4 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone delete 4 + carLicense delete 4 + carLicense replace 3 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone delete 4 + carLicense delete 4 + otherTelephone replace 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone delete 4 + otherTelephone replace 4 + carLicense delete 4 + carLicense replace 3 +---------------------------------- +== result ===[ 80]======================= +ERR_NO_SUCH_ATTRIBUTE (16) +-- operations --------------------------- + carLicense replace 3 + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone delete 4 +---------------------------------- + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone delete 4 +---------------------------------- + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 123 + otherTelephone delete 4 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 123 + otherTelephone delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 4 + carLicense delete 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 4 + otherTelephone delete 123 + carLicense delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense delete 4 + otherTelephone delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone delete 4 + carLicense delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 4 + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone delete 4 + carLicense delete 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 4 + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 123 +---------------------------------- + carLicense replace 3 + otherTelephone delete 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 4 + otherTelephone delete 123 + carLicense delete 4 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + carLicense delete 4 + otherTelephone delete 4 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone delete 4 + carLicense delete 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + otherTelephone delete 4 + carLicense delete 4 + otherTelephone replace 4 +---------------------------------- + carLicense replace 3 + otherTelephone delete 123 + otherTelephone delete 4 + otherTelephone replace 4 + carLicense delete 4 +---------------------------------- + carLicense delete 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone delete 4 +---------------------------------- + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone delete 4 +---------------------------------- + carLicense delete 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone delete 4 +---------------------------------- + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone delete 4 +---------------------------------- + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone delete 4 + carLicense replace 3 +---------------------------------- + carLicense delete 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 4 +---------------------------------- + carLicense delete 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 4 +---------------------------------- + carLicense delete 4 + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 123 + otherTelephone delete 4 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 4 + carLicense delete 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 4 + otherTelephone delete 123 + carLicense delete 4 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 + carLicense delete 4 + otherTelephone delete 4 +---------------------------------- + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone delete 4 + carLicense delete 4 +---------------------------------- + otherTelephone replace 4 + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone delete 4 +---------------------------------- + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone delete 4 +---------------------------------- + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 123 + otherTelephone delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 4 + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 4 + carLicense replace 3 + otherTelephone delete 123 + carLicense delete 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 4 + otherTelephone delete 123 + carLicense replace 3 + carLicense delete 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone delete 4 + carLicense delete 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + carLicense delete 4 + otherTelephone delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone delete 4 + carLicense replace 3 + carLicense delete 4 +---------------------------------- + otherTelephone replace 4 + otherTelephone delete 123 + otherTelephone delete 4 + carLicense delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 4 + carLicense replace 3 + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone delete 4 + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 123 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 4 + carLicense replace 3 + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone delete 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense delete 4 +---------------------------------- + otherTelephone delete 4 + carLicense replace 3 + otherTelephone delete 123 + carLicense delete 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 4 + carLicense replace 3 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense delete 4 +---------------------------------- + otherTelephone delete 4 + otherTelephone replace 4 + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 123 +---------------------------------- + otherTelephone delete 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 123 + carLicense delete 4 +---------------------------------- + otherTelephone delete 4 + otherTelephone replace 4 + otherTelephone delete 123 + carLicense replace 3 + carLicense delete 4 +---------------------------------- + otherTelephone delete 4 + otherTelephone delete 123 + carLicense replace 3 + carLicense delete 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 4 + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 + carLicense delete 4 +---------------------------------- + otherTelephone delete 4 + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 + carLicense delete 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 4 + carLicense delete 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + otherTelephone delete 4 + carLicense delete 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + carLicense replace 3 + otherTelephone delete 4 + otherTelephone replace 4 + carLicense delete 4 +---------------------------------- + otherTelephone delete 123 + carLicense delete 4 + carLicense replace 3 + otherTelephone replace 4 + otherTelephone delete 4 +---------------------------------- + otherTelephone delete 123 + carLicense delete 4 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 4 +---------------------------------- + otherTelephone delete 123 + carLicense delete 4 + otherTelephone replace 4 + otherTelephone delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 + carLicense delete 4 + otherTelephone delete 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense replace 3 + otherTelephone delete 4 + carLicense delete 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense delete 4 + carLicense replace 3 + otherTelephone delete 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + carLicense delete 4 + otherTelephone delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone delete 4 + carLicense replace 3 + carLicense delete 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone replace 4 + otherTelephone delete 4 + carLicense delete 4 + carLicense replace 3 +---------------------------------- + otherTelephone delete 123 + otherTelephone delete 4 + carLicense replace 3 + carLicense delete 4 + otherTelephone replace 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone delete 4 + carLicense replace 3 + otherTelephone replace 4 + carLicense delete 4 +---------------------------------- + otherTelephone delete 123 + otherTelephone delete 4 + otherTelephone replace 4 + carLicense replace 3 + carLicense delete 4 +---------------------------------- \ No newline at end of file diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 1d7c1a114b6..7d879ff1baf 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -835,6 +835,18 @@ for env in ["ad_dc_ntvfs:local", "ad_dc:local", planoldpythontestsuite(env, "samba.tests.blackbox.smbcontrol") plantestsuite_loadlist("samba4.ldap.python(ad_dc_default)", "ad_dc_default", [python, os.path.join(DSDB_PYTEST_DIR, "ldap.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN', '$LOADLIST', '$LISTOPT']) + +plantestsuite_loadlist("samba4.ldap_modify_order.python(ad_dc_default)", + "ad_dc_default", + [python, os.path.join(samba4srcdir, + "dsdb/tests/python/" + "ldap_modify_order.py"), + '$SERVER', + '-U"$USERNAME%$PASSWORD"', + '--workgroup=$DOMAIN', + '$LOADLIST', + '$LISTOPT']) + plantestsuite_loadlist("samba4.tokengroups.krb5.python(ad_dc_default)", "ad_dc_default:local", [python, os.path.join(DSDB_PYTEST_DIR, "token_group.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN', '-k', 'yes', '$LOADLIST', '$LISTOPT']) plantestsuite_loadlist("samba4.tokengroups.ntlm.python(ad_dc_default)", "ad_dc_default:local", [python, os.path.join(DSDB_PYTEST_DIR, "token_group.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN', '-k', 'no', '$LOADLIST', '$LISTOPT']) plantestsuite("samba4.sam.python(fl2008r2dc)", "fl2008r2dc", [python, os.path.join(DSDB_PYTEST_DIR, "sam.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])