1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-21 20:23:50 +03:00

r17661: A patch from Martin Kuehl:

This commit extends the samba3sam test suite, which contains tests for
the samba3sam and ldb_map modules, with a lot of tests for inbound,
i.e. add, modify, rename and delete requests.

The tests each add a single record, modify it, rename it, and then
delete it, at each step checking that the operations were successful
and that the right data went into the right partitions.
They are run for an unmapped record, a mapped record with data only in
the remote partition, a mapped record with remote data that is later
modified to include local data, and a mapped record with data in both
the local and remote partitions.

It also adds a function to the backend objects that makes construction
of DNs for their respective partitions more comfortable.

Cheers,
Martin
This commit is contained in:
Andrew Bartlett
2006-08-21 10:45:58 +00:00
committed by Gerald (Jerry) Carter
parent 28238ad8f1
commit 1ddd06f24d

View File

@@ -227,7 +227,7 @@ function test_map_search(ldb, s3, s4)
/* Add a set of split records */
var ldif = "
dn: cn=X,sambaDomainName=TESTS,${BASEDN}
dn: " + s4.dn("cn=X") + "
objectClass: user
cn: X
codePage: x
@@ -239,7 +239,7 @@ description: x
objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
primaryGroupID: 1-5-21-4231626423-2410014848-2360679739-512
dn: cn=Y,sambaDomainName=TESTS,${BASEDN}
dn: " + s4.dn("cn=Y") + "
objectClass: top
cn: Y
codePage: x
@@ -249,7 +249,7 @@ nextRid: y
lastLogon: y
description: x
dn: cn=Z,sambaDomainName=TESTS,${BASEDN}
dn: " + s4.dn("cn=Z") + "
objectClass: top
cn: Z
codePage: x
@@ -266,7 +266,7 @@ description: y
/* Add a set of remote records */
var ldif = "
dn: cn=A,sambaDomainName=TESTS,${BASEDN}
dn: " + s3.dn("cn=A") + "
objectClass: posixAccount
cn: A
sambaNextRid: x
@@ -276,7 +276,7 @@ description: x
sambaSID: S-1-5-21-4231626423-2410014848-2360679739-552
sambaPrimaryGroupSID: S-1-5-21-4231626423-2410014848-2360679739-512
dn: cn=B,sambaDomainName=TESTS,${BASEDN}
dn: " + s3.dn("cn=B") + "
objectClass: top
cn:B
sambaNextRid: x
@@ -284,7 +284,7 @@ sambaBadPasswordCount: x
sambaLogonTime: y
description: x
dn: cn=C,sambaDomainName=TESTS,${BASEDN}
dn: " + s3.dn("cn=C") + "
objectClass: top
cn: C
sambaNextRid: x
@@ -300,7 +300,7 @@ description: y
println("Testing search by DN");
/* Search remote record by local DN */
dn = "cn=A,sambaDomainName=TESTS," + s4.BASEDN;
dn = s4.dn("cn=A");
attrs = new Array("objectCategory", "lastLogon");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
@@ -310,7 +310,7 @@ description: y
assert(res[0].lastLogon == "x");
/* Search remote record by remote DN */
dn = "cn=A,sambaDomainName=TESTS," + s3.BASEDN;
dn = s3.dn("cn=A");
attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime");
res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
@@ -321,7 +321,7 @@ description: y
assert(res[0].sambaLogonTime == "x");
/* Search split record by local DN */
dn = "cn=X,sambaDomainName=TESTS," + s4.BASEDN;
dn = s4.dn("cn=X");
attrs = new Array("objectCategory", "lastLogon");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
@@ -331,7 +331,7 @@ description: y
assert(res[0].lastLogon == "x");
/* Search split record by remote DN */
dn = "cn=X,sambaDomainName=TESTS," + s3.BASEDN;
dn = s3.dn("cn=X");
attrs = new Array("objectCategory", "lastLogon", "sambaLogonTime");
res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
@@ -348,10 +348,10 @@ description: y
res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Y"));
assert(res[0].objectCategory == "y");
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=X"));
assert(res[1].objectCategory == "x");
assert(res[1].lastLogon == "x");
@@ -360,10 +360,10 @@ description: y
res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Z"));
assert(res[0].objectCategory == "z");
assert(res[0].lastLogon == "z");
assert(res[1].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=C"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "z");
@@ -372,10 +372,10 @@ description: y
res = ldb.search("(badPwdCount=x)", NULL, ldb. SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=B"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=A"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "x");
@@ -389,11 +389,11 @@ description: y
res = ldb.search("(objectSid=*)", NULL, ldb. SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=X"));
assert(res[0].objectCategory == "x");
assert(res[0].lastLogon == "x");
assert(res[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552");
assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=A"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "x");
assert(res[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552");
@@ -405,7 +405,7 @@ description: y
res = ldb.search("(primaryGroupID=1-5-21-4231626423-2410014848-2360679739-512)", NULL, ldb. SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=A"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "x");
assert(res[0].primaryGroupID == "1-5-21-4231626423-2410014848-2360679739-512");
@@ -437,12 +437,12 @@ description: y
res = ldb.search("(objectClass=user)", NULL, ldb. SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=X"));
assert(res[0].objectCategory == "x");
assert(res[0].lastLogon == "x");
assert(res[0].objectClass != undefined);
assert(res[0].objectClass[3] == "user");
assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=A"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "x");
assert(res[1].objectClass != undefined);
@@ -452,19 +452,19 @@ description: y
res = ldb.search("(|(objectClass=user)(badPwdCount=x))", NULL, ldb. SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 3);
assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=B"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "y");
assert(res[0].objectClass != undefined);
for (i=0;i<res[0].objectClass.length;i++) {
assert(res[0].objectClass[i] != "user");
}
assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=X"));
assert(res[1].objectCategory == "x");
assert(res[1].lastLogon == "x");
assert(res[1].objectClass != undefined);
assert(res[1].objectClass[3] == "user");
assert(res[2].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=A"));
assert(res[2].objectCategory == undefined);
assert(res[2].lastLogon == "x");
assert(res[2].objectClass != undefined);
@@ -477,10 +477,10 @@ description: y
res = ldb.search("(&(codePage=x)(revision=x))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Y"));
assert(res[0].objectCategory == "y");
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=X"));
assert(res[1].objectCategory == "x");
assert(res[1].lastLogon == "x");
@@ -489,10 +489,10 @@ description: y
res = ldb.search("(&(lastLogon=x)(description=x))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=X"));
assert(res[0].objectCategory == "x");
assert(res[0].lastLogon == "x");
assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=A"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "x");
@@ -501,10 +501,10 @@ description: y
res = ldb.search("(&(codePage=x)(description=x))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Y"));
assert(res[0].objectCategory == "y");
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=X"));
assert(res[1].objectCategory == "x");
assert(res[1].lastLogon == "x");
@@ -522,10 +522,10 @@ description: y
res = ldb.search("(|(revision=x)(objectCategory=x))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Y"));
assert(res[0].objectCategory == "y");
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=X"));
assert(res[1].objectCategory == "x");
assert(res[1].lastLogon == "x");
@@ -534,13 +534,13 @@ description: y
res = ldb.search("(|(badPwdCount=x)(lastLogon=x))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 3);
assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=B"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=X"));
assert(res[1].objectCategory == "x");
assert(res[1].lastLogon == "x");
assert(res[2].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=A"));
assert(res[2].objectCategory == undefined);
assert(res[2].lastLogon == "x");
@@ -549,13 +549,13 @@ description: y
res = ldb.search("(|(revision=x)(lastLogon=y))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 3);
assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Y"));
assert(res[0].objectCategory == "y");
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=B"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "y");
assert(res[2].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=X"));
assert(res[2].objectCategory == "x");
assert(res[2].lastLogon == "x");
@@ -570,16 +570,16 @@ description: y
res = ldb.search("(!(revision=x))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 4);
assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=B"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=A"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "x");
assert(res[2].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=Z"));
assert(res[2].objectCategory == "z");
assert(res[2].lastLogon == "z");
assert(res[3].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[3].dn == s4.dn("cn=C"));
assert(res[3].objectCategory == undefined);
assert(res[3].lastLogon == "z");
@@ -588,10 +588,10 @@ description: y
res = ldb.search("(!(description=x))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 2);
assert(res[0].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Z"));
assert(res[0].objectCategory == "z");
assert(res[0].lastLogon == "z");
assert(res[1].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=C"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "z");
@@ -600,16 +600,16 @@ description: y
res = ldb.search("(!(&(codePage=x)(revision=x)))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 4);
assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=B"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=A"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "x");
assert(res[2].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=Z"));
assert(res[2].objectCategory == "z");
assert(res[2].lastLogon == "z");
assert(res[3].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[3].dn == s4.dn("cn=C"));
assert(res[3].objectCategory == undefined);
assert(res[3].lastLogon == "z");
@@ -618,16 +618,16 @@ description: y
res = ldb.search("(!(&(lastLogon=x)(description=x)))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 4);
assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Y"));
assert(res[0].objectCategory == "y");
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=B"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "y");
assert(res[2].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=Z"));
assert(res[2].objectCategory == "z");
assert(res[2].lastLogon == "z");
assert(res[3].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[3].dn == s4.dn("cn=C"));
assert(res[3].objectCategory == undefined);
assert(res[3].lastLogon == "z");
@@ -636,16 +636,16 @@ description: y
res = ldb.search("(!(&(codePage=x)(description=x)))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 4);
assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=B"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=A"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "x");
assert(res[2].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=Z"));
assert(res[2].objectCategory == "z");
assert(res[2].lastLogon == "z");
assert(res[3].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[3].dn == s4.dn("cn=C"));
assert(res[3].objectCategory == undefined);
assert(res[3].lastLogon == "z");
@@ -653,16 +653,16 @@ description: y
attrs = new Array("objectCategory", "lastLogon");
res = ldb.search("(!(|(revision=x)(objectCategory=x)))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=B"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=A"));
assert(res[1].objectCategory == undefined);
assert(res[1].lastLogon == "x");
assert(res[2].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=Z"));
assert(res[2].objectCategory == "z");
assert(res[2].lastLogon == "z");
assert(res[3].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[3].dn == s4.dn("cn=C"));
assert(res[3].objectCategory == undefined);
assert(res[3].lastLogon == "z");
@@ -671,13 +671,13 @@ description: y
res = ldb.search("(!(|(badPwdCount=x)(lastLogon=x)))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 3);
assert(res[0].dn == ("cn=Y,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=Y"));
assert(res[0].objectCategory == "y");
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=Z"));
assert(res[1].objectCategory == "z");
assert(res[1].lastLogon == "z");
assert(res[2].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=C"));
assert(res[2].objectCategory == undefined);
assert(res[2].lastLogon == "z");
@@ -686,13 +686,13 @@ description: y
res = ldb.search("(!(|(revision=x)(lastLogon=y)))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 3);
assert(res[0].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=A"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "x");
assert(res[1].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=Z"));
assert(res[1].objectCategory == "z");
assert(res[1].lastLogon == "z");
assert(res[2].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=C"));
assert(res[2].objectCategory == undefined);
assert(res[2].lastLogon == "z");
@@ -701,21 +701,411 @@ description: y
res = ldb.search("(|(&(revision=x)(objectCategory=x))(!(&(description=x)(nextRid=y)))(badPwdCount=y))", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 5);
assert(res[0].dn == ("cn=B,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[0].dn == s4.dn("cn=B"));
assert(res[0].objectCategory == undefined);
assert(res[0].lastLogon == "y");
assert(res[1].dn == ("cn=X,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[1].dn == s4.dn("cn=X"));
assert(res[1].objectCategory == "x");
assert(res[1].lastLogon == "x");
assert(res[2].dn == ("cn=A,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[2].dn == s4.dn("cn=A"));
assert(res[2].objectCategory == undefined);
assert(res[2].lastLogon == "x");
assert(res[3].dn == ("cn=Z,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[3].dn == s4.dn("cn=Z"));
assert(res[3].objectCategory == "z");
assert(res[3].lastLogon == "z");
assert(res[4].dn == ("cn=C,sambaDomainName=TESTS," + s4.BASEDN));
assert(res[4].dn == s4.dn("cn=C"));
assert(res[4].objectCategory == undefined);
assert(res[4].lastLogon == "z");
/* Clean up */
var dns = new Array();
dns[0] = s4.dn("cn=A");
dns[1] = s4.dn("cn=B");
dns[2] = s4.dn("cn=C");
dns[3] = s4.dn("cn=X");
dns[4] = s4.dn("cn=Y");
dns[5] = s4.dn("cn=Z");
for (i=0;i<dns.length;i++) {
var ok = ldb.del(dns[i]);
assert(ok);
}
}
function test_map_modify(ldb, s3, s4)
{
println("Running modification tests on mapped data");
var ldif;
var attrs;
var dn, dn2;
var res;
var ok;
println("Testing modification of local records");
/* Add local record */
dn = "cn=test,dc=idealx,dc=org";
ldif = "
dn: " + dn + "
cn: test
foo: bar
revision: 1
description: test
";
ok = ldb.add(ldif);
assert(ok);
/* Check it's there */
attrs = new Array("foo", "revision", "description");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].foo == "bar");
assert(res[0].revision == "1");
assert(res[0].description == "test");
/* Check it's not in the local db */
res = s4.db.search("(cn=test)", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 0);
/* Check it's not in the remote db */
res = s3.db.search("(cn=test)", NULL, ldb.SCOPE_DEFAULT, attrs);
assert(res != undefined);
assert(res.length == 0);
/* Modify local record */
ldif = "
dn: " + dn + "
replace: foo
foo: baz
replace: description
description: foo
";
ok = ldb.modify(ldif);
assert(ok);
/* Check in local db */
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].foo == "baz");
assert(res[0].revision == "1");
assert(res[0].description == "foo");
/* Rename local record */
dn2 = "cn=toast,dc=idealx,dc=org";
ok = ldb.rename(dn, dn2);
assert(ok);
/* Check in local db */
res = ldb.search("", dn2, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn2);
assert(res[0].foo == "baz");
assert(res[0].revision == "1");
assert(res[0].description == "foo");
/* Delete local record */
ok = ldb.del(dn2);
assert(ok);
/* Check it's gone */
res = ldb.search("", dn2, ldb.SCOPE_BASE);
assert(res != undefined);
assert(res.length == 0);
println("Testing modification of remote records");
/* Add remote record */
dn = s4.dn("cn=test");
dn2 = s3.dn("cn=test");
ldif = "
dn: " + dn2 + "
cn: test
description: foo
sambaBadPasswordCount: 3
sambaNextRid: 1001
";
ok = s3.db.add(ldif);
assert(ok);
/* Check it's there */
attrs = new Array("description", "sambaBadPasswordCount", "sambaNextRid");
res = s3.db.search("", dn2, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn2);
assert(res[0].description == "foo");
assert(res[0].sambaBadPasswordCount == "3");
assert(res[0].sambaNextRid == "1001");
/* Check in mapped db */
attrs = new Array("description", "badPwdCount", "nextRid");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == "foo");
assert(res[0].badPwdCount == "3");
assert(res[0].nextRid == "1001");
/* Check in local db */
res = s4.db.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 0);
/* Modify remote data of remote record */
ldif = "
dn: " + dn + "
replace: description
description: test
replace: badPwdCount
badPwdCount: 4
";
ok = ldb.modify(ldif);
/* Check in mapped db */
attrs = new Array("description", "badPwdCount", "nextRid");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == "test");
assert(res[0].badPwdCount == "4");
assert(res[0].nextRid == "1001");
/* Check in remote db */
attrs = new Array("description", "sambaBadPasswordCount", "sambaNextRid");
res = s3.db.search("", dn2, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn2);
assert(res[0].description == "test");
assert(res[0].sambaBadPasswordCount == "4");
assert(res[0].sambaNextRid == "1001");
/* Rename remote record */
dn2 = s4.dn("cn=toast");
ok = ldb.rename(dn, dn2);
assert(ok);
/* Check in mapped db */
dn = dn2;
attrs = new Array("description", "badPwdCount", "nextRid");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == "test");
assert(res[0].badPwdCount == "4");
assert(res[0].nextRid == "1001");
/* Check in remote db */
dn2 = s3.dn("cn=toast");
attrs = new Array("description", "sambaBadPasswordCount", "sambaNextRid");
res = s3.db.search("", dn2, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn2);
assert(res[0].description == "test");
assert(res[0].sambaBadPasswordCount == "4");
assert(res[0].sambaNextRid == "1001");
/* Delete remote record */
ok = ldb.del(dn);
assert(ok);
/* Check in mapped db */
res = ldb.search("", dn, ldb.SCOPE_BASE);
assert(res != undefined);
assert(res.length == 0);
/* Check in remote db */
res = s3.db.search("", dn2, ldb.SCOPE_BASE);
assert(res != undefined);
assert(res.length == 0);
/* Add remote record (same as before) */
dn = s4.dn("cn=test");
dn2 = s3.dn("cn=test");
ldif = "
dn: " + dn2 + "
cn: test
description: foo
sambaBadPasswordCount: 3
sambaNextRid: 1001
";
ok = s3.db.add(ldif);
assert(ok);
/* Modify local data of remote record */
ldif = "
dn: " + dn + "
add: revision
revision: 1
replace: description
description: test
";
ok = ldb.modify(ldif);
/* Check in mapped db */
attrs = new Array("revision", "description");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == "test");
assert(res[0].revision == "1");
/* Check in remote db */
res = s3.db.search("", dn2, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn2);
assert(res[0].description == "test");
assert(res[0].revision == undefined);
/* Check in local db */
res = s4.db.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == undefined);
assert(res[0].revision == "1");
/* Delete (newly) split record */
ok = ldb.del(dn);
assert(ok);
println("Testing modification of split records");
/* Add split record */
dn = s4.dn("cn=test");
dn2 = s3.dn("cn=test");
ldif = "
dn: " + dn + "
cn: test
description: foo
badPwdCount: 3
nextRid: 1001
revision: 1
";
ok = ldb.add(ldif);
assert(ok);
/* Check it's there */
attrs = new Array("description", "badPwdCount", "nextRid", "revision");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == "foo");
assert(res[0].badPwdCount == "3");
assert(res[0].nextRid == "1001");
assert(res[0].revision == "1");
/* Check in local db */
res = s4.db.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == undefined);
assert(res[0].badPwdCount == undefined);
assert(res[0].nextRid == undefined);
assert(res[0].revision == "1");
/* Check in remote db */
attrs = new Array("description", "sambaBadPasswordCount", "sambaNextRid", "revision");
res = s3.db.search("", dn2, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn2);
assert(res[0].description == "foo");
assert(res[0].sambaBadPasswordCount == "3");
assert(res[0].sambaNextRid == "1001");
assert(res[0].revision == undefined);
/* Modify of split record */
ldif = "
dn: " + dn + "
replace: description
description: test
replace: badPwdCount
badPwdCount: 4
replace: revision
revision: 2
";
ok = ldb.modify(ldif);
assert(ok);
/* Check in mapped db */
attrs = new Array("description", "badPwdCount", "nextRid", "revision");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == "test");
assert(res[0].badPwdCount == "4");
assert(res[0].nextRid == "1001");
assert(res[0].revision == "2");
/* Check in local db */
res = s4.db.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == undefined);
assert(res[0].badPwdCount == undefined);
assert(res[0].nextRid == undefined);
assert(res[0].revision == "2");
/* Check in remote db */
attrs = new Array("description", "sambaBadPasswordCount", "sambaNextRid", "revision");
res = s3.db.search("", dn2, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn2);
assert(res[0].description == "test");
assert(res[0].sambaBadPasswordCount == "4");
assert(res[0].sambaNextRid == "1001");
assert(res[0].revision == undefined);
/* Rename split record */
dn2 = s4.dn("cn=toast");
ok = ldb.rename(dn, dn2);
assert(ok);
/* Check in mapped db */
dn = dn2;
attrs = new Array("description", "badPwdCount", "nextRid", "revision");
res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == "test");
assert(res[0].badPwdCount == "4");
assert(res[0].nextRid == "1001");
assert(res[0].revision == "2");
/* Check in local db */
res = s4.db.search("", dn, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn);
assert(res[0].description == undefined);
assert(res[0].badPwdCount == undefined);
assert(res[0].nextRid == undefined);
assert(res[0].revision == "2");
/* Check in remote db */
dn2 = s3.dn("cn=toast");
attrs = new Array("description", "sambaBadPasswordCount", "sambaNextRid", "revision");
res = s3.db.search("", dn2, ldb.SCOPE_BASE, attrs);
assert(res != undefined);
assert(res.length == 1);
assert(res[0].dn == dn2);
assert(res[0].description == "test");
assert(res[0].sambaBadPasswordCount == "4");
assert(res[0].sambaNextRid == "1001");
assert(res[0].revision == undefined);
/* Delete split record */
ok = ldb.del(dn);
assert(ok);
/* Check in mapped db */
res = ldb.search("", dn, ldb.SCOPE_BASE);
assert(res != undefined);
assert(res.length == 0);
/* Check in local db */
res = s4.db.search("", dn, ldb.SCOPE_BASE);
assert(res != undefined);
assert(res.length == 0);
/* Check in remote db */
res = s3.db.search("", dn2, ldb.SCOPE_BASE);
assert(res != undefined);
assert(res.length == 0);
}
function make_dn(rdn)
{
return rdn + ",sambaDomainName=TESTS," + this.BASEDN;
}
sys = sys_init();
@@ -727,12 +1117,14 @@ samba4.file = prefix + "/" + "samba4.ldb";
samba4.url = "tdb://" + samba4.file;
samba4.BASEDN = "dc=vernstok,dc=nl";
samba4.db = ldb_init();
samba4.dn = make_dn;
var samba3 = new Object("samba3 partition info");
samba3.file = prefix + "/" + "samba3.ldb";
samba3.url = "tdb://" + samba3.file;
samba3.BASEDN = "cn=Samba3Sam," + samba4.BASEDN;
samba3.db = ldb_init();
samba3.dn = make_dn;
sys.unlink(ldbfile);
sys.unlink(samba3.file);
@@ -776,6 +1168,7 @@ var ok = ldb.connect(ldburl);
assert(ok);
test_map_search(ldb, samba3, samba4);
test_map_modify(ldb, samba3, samba4);
sys.unlink(ldbfile);
sys.unlink(samba3.file);