r23560: - Activate metze's schema modules (from metze's schema-loading-13 patch).
[kamenim/samba.git] / testprogs / ejs / ldap.js
index 67eb28f6e3015c485927fa7fb4f11c1e4b415b2b..7ea66a7998f3f40c024e415223094326905df094 100755 (executable)
@@ -25,7 +25,7 @@ if (options.ARGV.length != 1) {
 
 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");
 
@@ -198,9 +198,11 @@ objectClass: user
 
        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);
        }
 
@@ -209,15 +211,29 @@ objectClass: user
        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);
@@ -412,9 +428,26 @@ objectClass: user
        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);
@@ -440,6 +473,33 @@ objectClass: user
        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)
@@ -489,6 +549,15 @@ function find_configurationdn(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();
@@ -496,6 +565,7 @@ 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);
 
@@ -504,7 +574,7 @@ if (!ok) {
        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)