diff options
Diffstat (limited to 'comm/mailnews/addrbook/test/unit/test_nsLDAPURL.js')
-rw-r--r-- | comm/mailnews/addrbook/test/unit/test_nsLDAPURL.js | 428 |
1 files changed, 428 insertions, 0 deletions
diff --git a/comm/mailnews/addrbook/test/unit/test_nsLDAPURL.js b/comm/mailnews/addrbook/test/unit/test_nsLDAPURL.js new file mode 100644 index 0000000000..b24b9ca20e --- /dev/null +++ b/comm/mailnews/addrbook/test/unit/test_nsLDAPURL.js @@ -0,0 +1,428 @@ +/* -*- Mode: JavaScript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* + * Test suite for nsLDAPURL functions. + */ + +// If we are still using the wallet service, then default port numbers +// are still visible in the password manager, and therefore we need to have +// them in the url. The toolkit login manager doesn't do this. +const usingWallet = "nsIWalletService" in Ci; +const portAdpt = usingWallet ? ":389" : ""; + +const ldapURLs = [ + { + url: "ldap://localhost/dc=test", + spec: "ldap://localhost/dc=test", + asciiSpec: "ldap://localhost/dc=test", + host: "localhost", + asciiHost: "localhost", + port: -1, + scheme: "ldap", + path: "/dc=test", + prePath: "ldap://localhost", + hostPort: "localhost", + displaySpec: "ldap://localhost/dc=test", + displayPrePath: "ldap://localhost", + displayHost: "localhost", + displayHostPort: "localhost", + dn: "dc=test", + scope: Ci.nsILDAPURL.SCOPE_BASE, + filter: "(objectclass=*)", + options: 0, + }, + { + url: "ldap://localhost:389/dc=test,dc=abc??sub?(objectclass=*)", + spec: + "ldap://localhost" + portAdpt + "/dc=test,dc=abc??sub?(objectclass=*)", + asciiSpec: + "ldap://localhost" + portAdpt + "/dc=test,dc=abc??sub?(objectclass=*)", + host: "localhost", + asciiHost: "localhost", + port: usingWallet ? 389 : -1, + scheme: "ldap", + path: "/dc=test,dc=abc??sub?(objectclass=*)", + prePath: "ldap://localhost" + portAdpt, + hostPort: "localhost" + portAdpt, + displaySpec: + "ldap://localhost" + portAdpt + "/dc=test,dc=abc??sub?(objectclass=*)", + displayPrePath: "ldap://localhost", + displayHost: "localhost", + displayHostPort: "localhost" + portAdpt, + dn: "dc=test,dc=abc", + scope: Ci.nsILDAPURL.SCOPE_SUBTREE, + filter: "(objectclass=*)", + options: 0, + }, + { + url: "ldap://\u65e5\u672c\u8a93.jp:389/dc=tes\u65e5t??one?(oc=xyz)", + spec: + "ldap://xn--wgv71a309e.jp" + portAdpt + "/dc=tes%E6%97%A5t??one?(oc=xyz)", + asciiSpec: + "ldap://xn--wgv71a309e.jp" + portAdpt + "/dc=tes%E6%97%A5t??one?(oc=xyz)", + host: "xn--wgv71a309e.jp", + asciiHost: "xn--wgv71a309e.jp", + port: usingWallet ? 389 : -1, + scheme: "ldap", + path: "/dc=tes%E6%97%A5t??one?(oc=xyz)", + prePath: "ldap://xn--wgv71a309e.jp" + portAdpt, + hostPort: "xn--wgv71a309e.jp" + portAdpt, + displaySpec: + "ldap://\u65e5\u672c\u8a93.jp" + + portAdpt + + "/dc=tes%E6%97%A5t??one?(oc=xyz)", + displayPrePath: "ldap://\u65e5\u672c\u8a93.jp" + portAdpt, + displayHost: "\u65e5\u672c\u8a93.jp", + displayHostPort: "\u65e5\u672c\u8a93.jp" + portAdpt, + dn: "dc=tes\u65e5t", + scope: Ci.nsILDAPURL.SCOPE_ONELEVEL, + filter: "(oc=xyz)", + options: 0, + }, + { + url: "ldaps://localhost/dc=test", + spec: "ldaps://localhost/dc=test", + asciiSpec: "ldaps://localhost/dc=test", + host: "localhost", + asciiHost: "localhost", + port: -1, + scheme: "ldaps", + path: "/dc=test", + prePath: "ldaps://localhost", + hostPort: "localhost", + displaySpec: "ldaps://localhost/dc=test", + displayPrePath: "ldaps://localhost", + displayHost: "localhost", + displayHostPort: "localhost", + dn: "dc=test", + scope: Ci.nsILDAPURL.SCOPE_BASE, + filter: "(objectclass=*)", + options: Ci.nsILDAPURL.OPT_SECURE, + }, + { + url: "ldaps://127.0.0.1/dc=test", + spec: "ldaps://127.0.0.1/dc=test", + asciiSpec: "ldaps://127.0.0.1/dc=test", + host: "127.0.0.1", + asciiHost: "127.0.0.1", + port: -1, + scheme: "ldaps", + path: "/dc=test", + prePath: "ldaps://127.0.0.1", + hostPort: "127.0.0.1", + displaySpec: "ldaps://127.0.0.1/dc=test", + displayPrePath: "ldaps://127.0.0.1", + displayHost: "127.0.0.1", + displayHostPort: "127.0.0.1", + dn: "dc=test", + scope: Ci.nsILDAPURL.SCOPE_BASE, + filter: "(objectclass=*)", + options: Ci.nsILDAPURL.OPT_SECURE, + }, + { + url: "ldaps://[::1]/dc=test", + spec: "ldaps://[::1]/dc=test", + asciiSpec: "ldaps://[::1]/dc=test", + host: "::1", + asciiHost: "::1", + port: -1, + scheme: "ldaps", + path: "/dc=test", + prePath: "ldaps://[::1]", + hostPort: "[::1]", + displaySpec: "ldaps://[::1]/dc=test", + displayPrePath: "ldaps://[::1]", + displayHost: "::1", + displayHostPort: "[::1]", + dn: "dc=test", + scope: Ci.nsILDAPURL.SCOPE_BASE, + filter: "(objectclass=*)", + options: Ci.nsILDAPURL.OPT_SECURE, + }, +]; + +function run_test() { + var url; + + // Test - get and check urls. + + for (let part = 0; part < ldapURLs.length; ++part) { + dump("url: " + ldapURLs[part].url + "\n"); + url = Services.io.newURI(ldapURLs[part].url); + + Assert.equal(url.spec, ldapURLs[part].spec); + Assert.equal(url.asciiSpec, ldapURLs[part].asciiSpec); + Assert.equal(url.scheme, ldapURLs[part].scheme); + Assert.equal(url.host, ldapURLs[part].host); + Assert.equal(url.asciiHost, ldapURLs[part].asciiHost); + Assert.equal(url.port, ldapURLs[part].port); + Assert.equal(url.pathQueryRef, ldapURLs[part].path); + Assert.equal(url.prePath, ldapURLs[part].prePath); + Assert.equal(url.hostPort, ldapURLs[part].hostPort); + Assert.equal(url.displaySpec, ldapURLs[part].displaySpec); + Assert.equal(url.displayPrePath, ldapURLs[part].displayPrePath); + Assert.equal(url.displayHost, ldapURLs[part].displayHost); + Assert.equal(url.displayHostPort, ldapURLs[part].displayHostPort); + // XXX nsLDAPURL ought to have classinfo. + url = url.QueryInterface(Ci.nsILDAPURL); + Assert.equal(url.dn, ldapURLs[part].dn); + Assert.equal(url.scope, ldapURLs[part].scope); + Assert.equal(url.filter, ldapURLs[part].filter); + Assert.equal(url.options, ldapURLs[part].options); + } + + // Test - Check changing ldap values + dump("Other Tests\n"); + + // Start off with a base url + const kBaseURL = "ldap://localhost:389/dc=test,dc=abc??sub?(objectclass=*)"; + + url = Services.io.newURI(kBaseURL).QueryInterface(Ci.nsILDAPURL); + + // Test - dn + + url.dn = "dc=short"; + + Assert.equal(url.dn, "dc=short"); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??sub?(objectclass=*)" + ); + + // Test - scope + + url.scope = Ci.nsILDAPURL.SCOPE_BASE; + + Assert.equal(url.scope, Ci.nsILDAPURL.SCOPE_BASE); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short???(objectclass=*)" + ); + + url.scope = Ci.nsILDAPURL.SCOPE_ONELEVEL; + + Assert.equal(url.scope, Ci.nsILDAPURL.SCOPE_ONELEVEL); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + // Test - filter + + url.filter = "(&(oc=ygh)(l=Ереван))"; + + Assert.equal(url.filter, "(&(oc=ygh)(l=Ереван))"); + Assert.equal( + url.spec, + "ldap://localhost" + + portAdpt + + "/dc=short??one?(&(oc=ygh)(l=%D0%95%D1%80%D0%B5%D0%B2%D0%B0%D0%BD))" + ); + + url.filter = ""; + + Assert.equal(url.filter, "(objectclass=*)"); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + // Test - scheme + + // An old version used to have a bug whereby if you set the scheme to the + // same thing twice, you'd get the options set wrongly. + url = url + .mutate() + .setScheme("ldaps") + .finalize() + .QueryInterface(Ci.nsILDAPURL); + Assert.equal(url.options, 1); + Assert.equal( + url.spec, + "ldaps://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + url = url + .mutate() + .setScheme("ldaps") + .finalize() + .QueryInterface(Ci.nsILDAPURL); + Assert.equal(url.options, 1); + Assert.equal( + url.spec, + "ldaps://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + Assert.ok(url.schemeIs("ldaps")); + Assert.ok(!url.schemeIs("ldap")); + + url = url.mutate().setScheme("ldap").finalize().QueryInterface(Ci.nsILDAPURL); + Assert.equal(url.options, 0); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + url = url.mutate().setScheme("ldap").finalize().QueryInterface(Ci.nsILDAPURL); + Assert.equal(url.options, 0); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + Assert.ok(url.schemeIs("ldap")); + Assert.ok(!url.schemeIs("ldaps")); + + // Test - Options + + url.options = Ci.nsILDAPURL.OPT_SECURE; + + Assert.equal(url.options, Ci.nsILDAPURL.OPT_SECURE); + Assert.equal( + url.spec, + "ldaps://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + url.options = 0; + + Assert.equal(url.options, 0); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + // Test - Equals + + var url2 = Services.io + .newURI("ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)") + .QueryInterface(Ci.nsILDAPURL); + + Assert.ok(url.equals(url2)); + + url2 = url2 + .mutate() + .setSpec("ldap://localhost:389/dc=short??sub?(objectclass=*)") + .finalize(); + + Assert.ok(!url.equals(url2)); + + // Test Attributes + + Assert.equal(url.attributes.length, 0); + + // Nothing should happen if the attribute doesn't exist + url.removeAttribute("abc"); + + Assert.equal(url.attributes.length, 0); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + url.addAttribute("dn"); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short?dn?one?(objectclass=*)" + ); + + Assert.equal(url.attributes, "dn"); + + url.removeAttribute("dn"); + + Assert.equal(url.attributes.length, 0); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + var newAttrs = "abc,def,ghi,jkl"; + url.attributes = newAttrs; + + Assert.equal(url.attributes, newAttrs); + Assert.equal( + url.spec, + "ldap://localhost" + + portAdpt + + "/dc=short?" + + newAttrs + + "?one?(objectclass=*)" + ); + + // Try adding an existing attribute - should do nothing + url.addAttribute("def"); + Assert.equal(url.attributes, newAttrs); + + // url.addAttribute("jk"); + + Assert.ok(url.hasAttribute("jkl")); + Assert.ok(url.hasAttribute("def")); + Assert.ok(url.hasAttribute("ABC")); + Assert.ok(!url.hasAttribute("cde")); + Assert.ok(!url.hasAttribute("3446")); + Assert.ok(!url.hasAttribute("kl")); + Assert.ok(!url.hasAttribute("jk")); + + // Sub-string of an attribute, so this shouldn't change anything. + url.removeAttribute("kl"); + url.removeAttribute("jk"); + url.removeAttribute("ef"); + Assert.equal(url.attributes, newAttrs); + + url.removeAttribute("abc"); + newAttrs = newAttrs.substring(4); + + Assert.equal(url.attributes, newAttrs); + Assert.equal( + url.spec, + "ldap://localhost" + + portAdpt + + "/dc=short?" + + newAttrs + + "?one?(objectclass=*)" + ); + + // This shouldn't fail, just clear the list + url.attributes = ""; + + Assert.equal(url.attributes.length, 0); + Assert.equal( + url.spec, + "ldap://localhost" + portAdpt + "/dc=short??one?(objectclass=*)" + ); + + // Set attributes via the url spec + + newAttrs = "abc,def,ghi,jkl"; + url = url + .mutate() + .setSpec("ldap://localhost/dc=short?" + newAttrs + "?one?(objectclass=*)") + .finalize() + .QueryInterface(Ci.nsILDAPURL); + + Assert.equal(url.attributes, newAttrs); + Assert.equal( + url.spec, + "ldap://localhost/dc=short?" + newAttrs + "?one?(objectclass=*)" + ); + + url = url + .mutate() + .setSpec("ldap://localhost/dc=short??one?(objectclass=*)") + .finalize() + .QueryInterface(Ci.nsILDAPURL); + + var attrs = url.attributes; + Assert.equal(attrs.length, 0); + Assert.equal(url.spec, "ldap://localhost/dc=short??one?(objectclass=*)"); + + // Test - clone + + url = url + .mutate() + .setSpec("ldap://localhost/dc=short?abc,def,ghi,jkl?one?(objectclass=*)") + .finalize(); + + var newUrl = url.mutate().finalize(); + + Assert.equal( + newUrl.spec, + "ldap://localhost/dc=short?abc,def,ghi,jkl?one?(objectclass=*)" + ); +} |