diff options
10 files changed, 235 insertions, 0 deletions
diff --git a/selftest/tests.py b/selftest/tests.py index 5a3d72209a1..9f65f403405 100644 --- a/selftest/tests.py +++ b/selftest/tests.py @@ -105,6 +105,11 @@ plantestsuite( ["PYTHON=%s" % python, os.path.join(bbdir, "upgradeprovision-oldrelease.sh"), '$PREFIX_ABS/provision', 'release-4-0-0', configuration]) +plantestsuite( + "samba4.blackbox.tombstones-expunge.release-4-5-0-pre1", "none", + ["PYTHON=%s" % python, + os.path.join(bbdir, "tombstones-expunge.sh"), + '$PREFIX_ABS/provision', 'release-4-5-0-pre1', configuration]) planpythontestsuite("none", "samba.tests.upgradeprovision") planpythontestsuite("none", "samba.tests.xattr") planpythontestsuite("none", "samba.tests.ntacls") diff --git a/source4/selftest/provisions/release-4-5-0-pre1/add-four-more-links.ldif b/source4/selftest/provisions/release-4-5-0-pre1/add-four-more-links.ldif new file mode 100644 index 00000000000..6039f0d2f97 --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/add-four-more-links.ldif @@ -0,0 +1,15 @@ +dn: cn=swimmers,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +changetype: modify +add: member +member: cn=user1,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +member: cn=user2,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp + +dn: cn=helpers,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +changetype: modify +add: member +member: cn=user1,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp + +dn: cn=leaders,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +changetype: modify +add: member +member: cn=user2,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp diff --git a/source4/selftest/provisions/release-4-5-0-pre1/add-two-more-users.ldif b/source4/selftest/provisions/release-4-5-0-pre1/add-two-more-users.ldif new file mode 100644 index 00000000000..ca1c3ca039a --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/add-two-more-users.ldif @@ -0,0 +1,15 @@ +dn: CN=user1,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +objectclass: user +samaccountname: user1 + +dn: CN=user2,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +objectclass: user +samaccountname: user2 + +dn: CN=helpers,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +objectclass: group +samaccountname: helpers + +dn: CN=leaders,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +objectclass: group +samaccountname: leaders diff --git a/source4/selftest/provisions/release-4-5-0-pre1/expected-deleted-links-after-expunge.ldif b/source4/selftest/provisions/release-4-5-0-pre1/expected-deleted-links-after-expunge.ldif new file mode 100644 index 00000000000..c8163a6ac22 --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/expected-deleted-links-after-expunge.ldif @@ -0,0 +1,23 @@ +# record 1 +dn: CN=helpers,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp +member: CN=user1,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# record 2 +dn: CN=leaders,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# record 3 +dn: CN=swimmers,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp +member: CN=user1,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# Referral +ref: ldap:///CN=Configuration,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# Referral +ref: ldap:///DC=DomainDnsZones,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# Referral +ref: ldap:///DC=ForestDnsZones,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# returned 6 records +# 3 entries +# 3 referrals diff --git a/source4/selftest/provisions/release-4-5-0-pre1/expected-expunge-output.txt b/source4/selftest/provisions/release-4-5-0-pre1/expected-expunge-output.txt new file mode 100644 index 00000000000..bcc59553afc --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/expected-expunge-output.txt @@ -0,0 +1 @@ +Removed 7 objects and 1 links successfully diff --git a/source4/selftest/provisions/release-4-5-0-pre1/expected-links-after-expunge.ldif b/source4/selftest/provisions/release-4-5-0-pre1/expected-links-after-expunge.ldif new file mode 100644 index 00000000000..c69501b9c4c --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/expected-links-after-expunge.ldif @@ -0,0 +1,22 @@ +# record 1 +dn: CN=helpers,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# record 2 +dn: CN=leaders,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# record 3 +dn: CN=swimmers,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp +member: CN=user1,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# Referral +ref: ldap:///CN=Configuration,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# Referral +ref: ldap:///DC=DomainDnsZones,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# Referral +ref: ldap:///DC=ForestDnsZones,DC=release-4-5-0-pre1,DC=samba,DC=corp + +# returned 6 records +# 3 entries +# 3 referrals diff --git a/source4/selftest/provisions/release-4-5-0-pre1/expected-objects-after-expunge.ldif b/source4/selftest/provisions/release-4-5-0-pre1/expected-objects-after-expunge.ldif new file mode 100644 index 00000000000..2668ac44701 --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/expected-objects-after-expunge.ldif @@ -0,0 +1,2 @@ +sAMAccountName: user1 +sAMAccountName: user2 diff --git a/source4/selftest/provisions/release-4-5-0-pre1/remove-one-more-link.ldif b/source4/selftest/provisions/release-4-5-0-pre1/remove-one-more-link.ldif new file mode 100644 index 00000000000..9c4edb2c35a --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/remove-one-more-link.ldif @@ -0,0 +1,5 @@ +dn: cn=helpers,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +changetype: modify +delete: member +member: cn=user1,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +- diff --git a/source4/selftest/provisions/release-4-5-0-pre1/remove-one-more-user.ldif b/source4/selftest/provisions/release-4-5-0-pre1/remove-one-more-user.ldif new file mode 100644 index 00000000000..e44f2217c6f --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/remove-one-more-user.ldif @@ -0,0 +1,3 @@ +dn: cn=user2,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +changetype: delete +- diff --git a/testprogs/blackbox/tombstones-expunge.sh b/testprogs/blackbox/tombstones-expunge.sh new file mode 100755 index 00000000000..2c88f958092 --- /dev/null +++ b/testprogs/blackbox/tombstones-expunge.sh @@ -0,0 +1,144 @@ +#!/bin/sh + +if [ $# -lt 1 ]; then +cat <<EOF +Usage: tombstones-expunge.sh PREFIX RELEASE +EOF +exit 1; +fi + +PREFIX_ABS="$1" +RELEASE="$2" +shift 2 + +. `dirname $0`/subunit.sh + +release_dir=`dirname $0`/../../source4/selftest/provisions/$RELEASE + +ldbadd="ldbadd" +if [ -x "$BINDIR/ldbadd" ]; then + ldbadd="$BINDIR/ldbadd" +fi + +ldbmodify="ldbmodify" +if [ -x "$BINDIR/ldbmodify" ]; then + ldbmodify="$BINDIR/ldbmodify" +fi + +ldbdel="ldbdel" +if [ -x "$BINDIR/ldbdel" ]; then + ldbdel="$BINDIR/ldbdel" +fi + +ldbsearch="ldbsearch" +if [ -x "$BINDIR/ldbsearch" ]; then + ldbsearch="$BINDIR/ldbsearch" +fi + +undump() { + if test -x $BINDIR/tdbrestore; + then + `dirname $0`/../../source4/selftest/provisions/undump.sh $release_dir $PREFIX_ABS/$RELEASE $BINDIR/tdbrestore + else + `dirname $0`/../../source4/selftest/provisions/undump.sh $release_dir $PREFIX_ABS/$RELEASE + fi +} + +tombstones_expunge() { + tmpfile=$PREFIX_ABS/$RELEASE/expected-expunge-output.txt + $PYTHON $BINDIR/samba-tool domain tombstones expunge -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --current-time=2016-07-30 --tombstone-lifetime=4 > $tmpfile + if [ "$?" != "0" ]; then + return $? + fi + diff $tmpfile $release_dir/expected-expunge-output.txt + if [ "$?" != "0" ]; then + return 1 + fi +} + +add_two_more_users() { + ldif=$release_dir/add-two-more-users.ldif + TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif + if [ "$?" != "0" ]; then + return 1 + fi +} + +add_four_more_links() { + ldif=$release_dir/add-four-more-links.ldif + TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif + if [ "$?" != "0" ]; then + return 1 + fi +} + +remove_one_link() { + ldif=$release_dir/remove-one-more-link.ldif + TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif + if [ "$?" != "0" ]; then + return 1 + fi +} + +remove_one_user() { + ldif=$release_dir/remove-one-more-user.ldif + TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif + if [ "$?" != "0" ]; then + return 1 + fi +} + +check_expected_after_links() { + tmpldif=$PREFIX_ABS/$RELEASE/expected-links-after-expunge.ldif.tmp + TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(cn=swimmers)(cn=leaders)(cn=helpers))' -s sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --sorted member > $tmpldif + diff $tmpldif $release_dir/expected-links-after-expunge.ldif + if [ "$?" != "0" ]; then + return 1 + fi +} + +check_expected_after_deleted_links() { + tmpldif=$PREFIX_ABS/$RELEASE/expected-deleted-links-after-expunge.ldif.tmp + TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(cn=swimmers)(cn=leaders)(cn=helpers))' -s sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted member > $tmpldif + diff $tmpldif $release_dir/expected-deleted-links-after-expunge.ldif + if [ "$?" != "0" ]; then + return 1 + fi +} + +check_expected_after_objects() { + tmpldif=$PREFIX_ABS/$RELEASE/expected-objects-after-expunge.ldif.tmp + TZ=UTC $ldbsearch -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb '(|(samaccountname=fred)(samaccountname=ddg)(samaccountname=usg)(samaccountname=user1)(samaccountname=user2))' -s sub -b DC=release-4-5-0-pre1,DC=samba,DC=corp --show-deleted --reveal --sorted samAccountName | grep sAMAccountName > $tmpldif + diff $tmpldif $release_dir/expected-objects-after-expunge.ldif + if [ "$?" != "0" ]; then + return 1 + fi +} + +if [ -d $release_dir ]; then + testit $RELEASE undump + testit "add_two_more_users" add_two_more_users + testit "add_four_more_links" add_four_more_links + testit "remove_one_link" remove_one_link + testit "remove_one_user" remove_one_user + testit "tombstones_expunge" tombstones_expunge + testit "check_expected_after_deleted_links" check_expected_after_deleted_links + testit "check_expected_after_links" check_expected_after_links + testit "check_expected_after_objects" check_expected_after_objects +else + subunit_start_test $RELEASE + subunit_skip_test $RELEASE <<EOF +no test provision +EOF + + subunit_start_test "tombstones_expunge" + subunit_skip_test "tombstones_expunge" <<EOF +no test provision +EOF +fi + +if [ -d $PREFIX_ABS/${RELEASE} ]; then + rm -fr $PREFIX_ABS/${RELEASE} +fi + +exit $failed |