Add a blackbox test for the provision-backend script.
[metze/samba/wip.git] / testprogs / ejs / ldap.js
index 836b726ad97aaffffbceac77bb6eccb85d8602b0..a5e6ab37c4cc187508030727df5e79a52f83e724 100755 (executable)
@@ -29,14 +29,19 @@ function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn)
 {
        println("Running basic tests");
 
+       ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn);
+       ldb.del("cn=ldaptestcomputer3,cn=computers," + base_dn);
+       ldb.del("cn=ldaptest2computer,cn=computers," + base_dn);
        ldb.del("cn=ldaptestuser,cn=users," + base_dn);
        ldb.del("cn=ldaptestuser2,cn=users," + base_dn);
        ldb.del("cn=ldaptestuser3,cn=users," + base_dn);
        ldb.del("cn=ldaptestuser4,cn=users," + base_dn);
        ldb.del("cn=ldaptestuser5,cn=users," + base_dn);
        ldb.del("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn);
+       ldb.del("cn=ldaptestuser7,cn=users," + base_dn);
        ldb.del("CN=ldaptestcontainer2," + base_dn);
        ldb.del("cn=ldaptestgroup,cn=users," + base_dn);
+       ldb.del("cn=ldaptestgroup2,cn=users," + base_dn);
 
        println("Testing group add with invalid member");
        var ok = ldb.add("
@@ -127,7 +132,7 @@ displayname: ldap testy
                ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn);
                if (ok.error != 0) {
                        println(ok.errstr);
-                       assert(ok.error == 0);
+               //      assert(ok.error == 0);
                }
                ok = ldb.add("
 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
@@ -142,6 +147,113 @@ displayname: ldap testy
                }
        }
 
+       var ok = ldb.add("
+dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "
+objectClass: computer
+cn: LDAPtest2COMPUTER
+");
+       if (ok.error != 34) {
+               println("Did not reject invalid RDN compared with DN: " + ok.errstr);
+               assert(ok.error == 34);
+       }
+
+       var ok = ldb.add("
+dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "
+objectClass: computer
+cn: LDAPtestCOMPUTER3
+sAMAccountType: 805306368
+");
+
+       if (ok.error != 53) {
+               println("Did not reject invalid 'sAMAccountType: 805306368': " + ok.errstr);
+               assert(ok.error == 53);
+       }
+
+       var ok = ldb.add("
+dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "
+objectClass: computer
+cn: LDAPtestCOMPUTER3
+userAccountControl: 0
+");
+
+       if (ok.error != 53) {
+               println("Did not reject invalid 'userAccountControl: 0': " + ok.errstr);
+               assert(ok.error == 53);
+       }
+
+       var ok = ldb.add("
+dn: cn=ldaptestuser7,cn=users," + base_dn + "
+objectClass: user
+cn: LDAPtestuser7
+userAccountControl: 0
+");
+
+       if (ok.error != 53) {
+               println("Did not reject invalid 'userAccountControl: 0': " + ok.errstr);
+               assert(ok.error == 53);
+       }
+
+       var ok = ldb.add("
+dn: cn=ldaptestuser7,cn=users," + base_dn + "
+objectClass: user
+cn: LDAPtestuser7
+userAccountControl: 2
+");
+
+       if (ok.error != 0) {
+               println("Did not accept 'userAccountControl: 2': " + ok.errstr);
+               assert(ok.error == 0);
+       }
+
+           ldb.del("cn=ldaptestuser7,cn=users," + base_dn);
+
+       var ok = ldb.add("
+dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "
+objectclass: computer
+cN: LDAPtestCOMPUTER3
+");
+       if (ok.error != 0) {
+               ok = ldb.del("cn=ldaptestcomputer3,cn=computers," + base_dn);
+               if (ok.error != 0) {
+                       println(ok.errstr);
+                       assert(ok.error == 0);
+               }
+               ok = ldb.add("
+dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "
+objectClass: computer
+cn: LDAPtestCOMPUTER3
+");
+               if (ok.error != 0) {
+                       println(ok.errstr);
+                       assert(ok.error == 0);
+               }
+       }
+
+       println("Testing ldb.search for (&(cn=ldaptestcomputer3)(objectClass=user))");
+       var res = ldb.search("(&(cn=ldaptestcomputer3)(objectClass=user))");
+       if (res.error != 0 || res.msgs.length != 1) {
+               println("Could not find (&(cn=ldaptestcomputer3)(objectClass=user))");
+               assert(res.error == 0);
+               assert(res.msgs.length == 1);
+       }
+
+       assert(res.msgs[0].dn == ("CN=ldaptestcomputer3,CN=Computers," + base_dn));
+       assert(res.msgs[0].cn == "ldaptestcomputer3");
+       assert(res.msgs[0].name == "ldaptestcomputer3");
+       assert(res.msgs[0].objectClass[0] == "top");
+       assert(res.msgs[0].objectClass[1] == "person");
+       assert(res.msgs[0].objectClass[2] == "organizationalPerson");
+       assert(res.msgs[0].objectClass[3] == "user");
+       assert(res.msgs[0].objectClass[4] == "computer");
+       assert(res.msgs[0].objectGUID != undefined);
+       assert(res.msgs[0].whenCreated != undefined);
+       assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn));
+       assert(res.msgs[0].primaryGroupID == 513);
+       assert(res.msgs[0].sAMAccountType == 805306368);
+       assert(res.msgs[0].userAccountControl == 546);
+
+           ldb.del(res.msgs[0].dn);
+
            println("Testing attribute or value exists behaviour");
            ok = ldb.modify("
 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
@@ -240,7 +352,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName;range=0-*");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) for servicePrincipalName;range=0-*");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -250,7 +362,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName;range=0-19");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) for servicePrincipalName;range=0-19");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -260,7 +372,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName;range=0-30");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=0-19");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -269,7 +381,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName;range=0-40");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=0-40");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -278,7 +390,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName;range=30-40");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=30-40");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -287,7 +399,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName;range=10-40");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=10-40");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -297,7 +409,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName;range=11-40");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=10-*");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -309,7 +421,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName;range=11-15");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=11-15");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -319,7 +431,7 @@ servicePrincipalName: host/ldaptest2computer29
            var attrs = new Array("servicePrincipalName");
            var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
            if (res.error != 0 || res.msgs.length != 1) {
-                   println("Could not find (cn=ldaptest2computer)");
+                   println("Could not find (cn=ldaptest2computer) at servicePrincipalName");
                    assert(res.error == 0);
                    assert(res.msgs.length == 1);
            }
@@ -374,6 +486,13 @@ sn: ldap user2
                assert(res.msgs.length == 2);
        }
 
+       var res = ldb.search("(&(anr=\"testy ldap\")(objectClass=user))");
+       if (res.error != 0 || res.msgs.length != 0) {
+               println("Found " + res.msgs.length + " for (&(anr=\"testy ldap\")(objectClass=user))");
+               assert(res.error == 0);
+               assert(res.msgs.length == 0);
+       }
+
 // Testing ldb.search for (&(anr=ldap)(objectClass=user))
        var res = ldb.search("(&(anr=ldap)(objectClass=user))");
        if (res.error != 0 || res.msgs.length != 4) {
@@ -547,6 +666,38 @@ member: cn=ldaptestuser3,cn=users," + base_dn + "
        assert(res.msgs[0].cn == "ldaptestUSER3");
        assert(res.msgs[0].name == "ldaptestUSER3");
 
+       println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=*))(objectClass=user))");
+       var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=*))(objectClass=user))");
+       if (res.error != 0 || res.msgs.length != 1) {
+               println("Could not find (&(cn=ldaptestuser3)(objectClass=user))");
+               assert(res.error == 0);
+               assert(res.msgs.length == 1);
+       }
+
+       assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn));
+       assert(res.msgs[0].cn == "ldaptestUSER3");
+       assert(res.msgs[0].name == "ldaptestUSER3");
+
+       println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))");
+       var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))");
+       if (res.error != 0 || res.msgs.length != 1) {
+               println("Could not find (&(&(cn=ldaptestuser3)(userAccountControl=546))(objectClass=user))");
+               assert(res.error == 0);
+               assert(res.msgs.length == 1);
+       }
+
+       assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn));
+       assert(res.msgs[0].cn == "ldaptestUSER3");
+       assert(res.msgs[0].name == "ldaptestUSER3");
+
+       println("Testing ldb.search for (&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))");
+       var res = ldb.search("(&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))");
+       if (res.error != 0 || res.msgs.length != 0) {
+               println("Should not find (&(&(cn=ldaptestuser3)(userAccountControl=547))(objectClass=user))");
+               assert(res.error == 0);
+               assert(res.msgs.length == 0);
+       }
+
 // This is a Samba special, and does not exist in real AD
 //     println("Testing ldb.search for (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
 //     var res = ldb.search("(dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
@@ -715,12 +866,30 @@ member: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + "
        }
 
        assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn));
-       assert(strupper(res.msgs[0].memberOf[0]) == strupper(("CN=ldaptestgroup2,CN=Users," + base_dn)));
+       assert(strupper(res.msgs[0].memberOf[0]) == (strupper("CN=ldaptestgroup2,CN=Users," + base_dn)));
 
-       println("Testing ldb.search for (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)) to check subtree renames and linked attributes");
-       var res = ldb.search("(&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group))", base_dn, ldb.SCOPE_SUBTREE);
+       println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group)) in cn=users");
+       var res_group = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", "cn=users," + base_dn, ldb.SCOPE_SUBTREE);
+       if (res_group.error != 0 || res_group.msgs.length != 1) {
+               println("Could not find (&(cn=ldaptestgroup2)(objectClass=group)) under cn=users," + base_dn);
+               assert(res_group.error == 0);
+               assert(res_group.msgs.length == 1);
+       }
+
+       println("Testing ldb.search for (member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ") to check subtree renames and linked attributes");
+       var res = ldb.search("(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")", base_dn, ldb.SCOPE_SUBTREE);
        if (res.error != 0 || res.msgs.length != 1) {
-               println("Could not find (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)), perhaps linked attributes are not conistant with subtree renames?");
+               for (i=0; i < res_group.msgs[0].member.length; i++) {
+                   println("res_group.member[" +  i + "]: " + res_group.msgs[0].member[i]);
+               }
+
+               println("Could not find (member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + "), perhaps linked attributes are not conistant with subtree renames?");
+               println("Testing ldb.search for (member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + ") to check if it just hasn't been updated");
+               var res2 = ldb.search("(member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + ")", base_dn, ldb.SCOPE_SUBTREE);
+               if (res2.error != 0 || res2.msgs.length != 1) {
+                       println("Could not find (member=CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + "), very odd, it wasn't here at all..");
+               }
+
                assert(res.error == 0);
                assert(res.msgs.length == 1);
        }
@@ -840,8 +1009,8 @@ objectClass: user
        assert(res.msgs[0].whenCreated != undefined);
        assert(res.msgs[0].objectCategory == ("CN=Person,CN=Schema,CN=Configuration," + base_dn));
        assert(res.msgs[0].sAMAccountType == 805306368);
-//     assert(res[0].userAccountControl == 546);
-       assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn));
+       assert(res.msgs[0].userAccountControl == 546);
+       assert(strupper(res.msgs[0].memberOf[0]) == strupper("CN=ldaptestgroup2,CN=Users," + base_dn));
        assert(res.msgs[0].memberOf.length == 1);
  
        println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
@@ -901,7 +1070,7 @@ objectClass: user
        println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))");
        var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))");
        if (res.error != 0 || res.msgs.length != 1) {
-               println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
+               println("Could not find (&(cn=ldaptestcomputer)(objectClass=user))");
                assert(res.error == 0);
                assert(res.msgs.length == 1);
        }
@@ -916,12 +1085,9 @@ objectClass: user
        assert(res.msgs[0].objectClass[4] == "computer");
        assert(res.msgs[0].objectGUID != undefined);
        assert(res.msgs[0].whenCreated != undefined);
-       assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn));
-       assert(res.msgs[0].primaryGroupID == 513);
-//     assert(res.msgs[0].sAMAccountType == 805306368);
-//     assert(res.msgs[0].userAccountControl == 546);
-       assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn));
-       assert(res.msgs[0].memberOf.length == 1);
+       assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn);
+       assert(res.msgs[0].sAMAccountType == 805306368);
+       assert(res.msgs[0].userAccountControl == 546);
 
        println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
        var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
@@ -1023,7 +1189,7 @@ objectClass: user
        assert(res.msgs[0].whenCreated != undefined);
        assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn);
        assert(res.msgs[0].sAMAccountType == 805306369);
-//     assert(res.msgs[0].userAccountControl == 4098);
+       assert(res.msgs[0].userAccountControl == 4096);
 
 
        ok = ldb.del(res.msgs[0].dn);