var host = options.ARGV[0];
-function basic_tests(ldb, gc_ldb, base_dn, configuration_dn)
+function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn)
{
println("Running basic tests");
println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))");
var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))");
- if (res3.error != 0 || res3.msgs.length != 1) {
- println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon))");
+ if (res3.error != 0) {
+ println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): " + res3.errstr);
assert(res3.error == 0);
+ } else if (res3.msgs.length != 1) {
+ println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): matched " + res3.msgs.length);
assert(res3.msgs.length == 1);
}
if (gc_ldb != undefined) {
println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog");
var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))");
- if (res3gc.error != 0 || res3gc.msgs.length != 1) {
- println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog");
+ if (res3gc.error != 0) {
+ println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: " + res3gc.errstr);
assert(res3gc.error == 0);
+ } else if (res3gc.msgs.length != 1) {
+ println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: matched " + res3gc.msgs.length);
assert(res3gc.msgs.length == 1);
}
assert(res.msgs[0].dn == res3gc.msgs[0].dn);
}
+ println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in with 'phantom root' control");
+ var attrs = new Array("cn");
+ var controls = new Array("search_options:1:2");
+ var res3control = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
+ if (res3control.error != 0 || res3control.msgs.length != 1) {
+ println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog");
+ assert(res3control.error == 0);
+ assert(res3control.msgs.length == 1);
+ }
+
+ assert(res.msgs[0].dn == res3control.msgs[0].dn);
+
ok = ldb.del(res.msgs[0].dn);
if (ok.error != 0) {
println(ok.errstr);
var attrs = new Array("cn");
var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs);
assert(res.error == 0);
+ if (res.msgs.length != 0) {
+ println("Got configuration DN " + res.msgs[0].dn + " which should not be able to be seen from main search base");
+ }
assert(res.msgs.length == 0);
+ println("Testing that we can get at the configuration DN from the main search base on the LDAP port with the 'phantom root' search_options control");
+ var attrs = new Array("cn");
+ var controls = new Array("search_options:1:2");
+ var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
+ assert(res.error == 0);
+ assert(res.msgs.length > 0);
+
if (gc_ldb != undefined) {
+ println("Testing that we can get at the configuration DN from the main search base on the GC port with the search_options control == 0");
+ var attrs = new Array("cn");
+ var controls = new Array("search_options:1:0");
+ var res = gc_ldb.search("objectClass=crossRef", base_dn, gc_ldb.SCOPE_SUBTREE, attrs, controls);
+ assert(res.error == 0);
+ assert(res.msgs.length > 0);
+
println("Testing that we do find configuration elements in the global catlog");
var attrs = new Array("cn");
var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs);
assert(res.error == 0);
assert (res.msgs.length > 0);
+ println("Testing objectCategory canonacolisation");
+ var attrs = new Array("cn");
+ var res = ldb.search("objectCategory=ntDsDSA", configuration_dn, ldb.SCOPE_SUBTREE, attrs);
+ assert(res.error == 0);
+ if (res.msgs.length == 0) {
+ println("Didn't find any records with objectCategory=ntDsDSA");
+ }
+ assert(res.msgs.length != 0);
+
+ var attrs = new Array("cn");
+ var res = ldb.search("objectCategory=CN=ntDs-DSA," + schema_dn, configuration_dn, ldb.SCOPE_SUBTREE, attrs);
+ assert(res.error == 0);
+ if (res.msgs.length == 0) {
+ println("Didn't find any records with objectCategory=CN=ntDs-DSA," + schema_dn);
+ }
+ assert(res.msgs.length != 0);
+
+ println("Testing objectClass attribute order on "+ base_dn);
+ var attrs = new Array("objectclass");
+ var res = ldb.search("objectClass=domain", base_dn, ldb.SCOPE_BASE, attrs);
+ assert(res.error == 0);
+ assert(res.msgs.length == 1);
+
+ assert(res.msgs[0].objectClass[0] == "top");
+ assert(res.msgs[0].objectClass[1] == "domain");
+ assert(res.msgs[0].objectClass[2] == "domainDNS");
+
}
function basedn_tests(ldb, gc_ldb)
return res.msgs[0].configurationNamingContext;
}
+function find_schemadn(ldb)
+{
+ var attrs = new Array("schemaNamingContext");
+ var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
+ assert(res.error == 0);
+ assert(res.msgs.length == 1);
+ return res.msgs[0].schemaNamingContext;
+}
+
/* use command line creds if available */
ldb.credentials = options.get_credentials();
gc_ldb.credentials = options.get_credentials();
var ok = ldb.connect("ldap://" + host);
var base_dn = find_basedn(ldb);
var configuration_dn = find_configurationdn(ldb);
+var schema_dn = find_schemadn(ldb);
printf("baseDN: %s\n", base_dn);
gc_ldb = undefined;
}
-basic_tests(ldb, gc_ldb, base_dn, configuration_dn)
+basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn)
basedn_tests(ldb, gc_ldb)