summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/addrbook/test/unit/test_nsLDAPURL.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/addrbook/test/unit/test_nsLDAPURL.js')
-rw-r--r--comm/mailnews/addrbook/test/unit/test_nsLDAPURL.js428
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=*)"
+ );
+}