summaryrefslogtreecommitdiff
path: root/source4/dsdb/tests/python/testdata
diff options
context:
space:
mode:
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>2019-04-13 00:23:26 +1200
committerAndrew Bartlett <abartlet@samba.org>2019-05-01 05:32:25 +0000
commitc73888ff6f22de86f72ff254d332b44848cb9959 (patch)
tree41fb9cb03ec33345c325e6fecac7412a80345687 /source4/dsdb/tests/python/testdata
parent865e464d5e5ab7d2aae297cce7a20674162a5e06 (diff)
downloadsamba-c73888ff6f22de86f72ff254d332b44848cb9959.tar.gz
samba-c73888ff6f22de86f72ff254d332b44848cb9959.tar.bz2
samba-c73888ff6f22de86f72ff254d332b44848cb9959.zip
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 <douglas.bagnall@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'source4/dsdb/tests/python/testdata')
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_account_locality_device.expected34
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_container_flags.expected134
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_container_flags_multivalue.expected138
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_inapplicable.expected34
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_member.expected190
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_mixed.expected143
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_mixed2.expected143
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_objectclass.expected35
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_objectclass2.expected735
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_singlevalue.expected740
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_sometimes_inapplicable.expected127
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_telephone.expected752
-rw-r--r--source4/dsdb/tests/python/testdata/modify_order_telephone_delete_delete.expected736
13 files changed, 3941 insertions, 0 deletions
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'