jdk/test/javax/naming/ldap/LdapName/LdapParserTests.java
changeset 2 90ce3da70b43
child 5506 202f599c92aa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/naming/ldap/LdapName/LdapParserTests.java	Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2003 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4635618
+ * @summary Support for manipulating LDAP Names
+ */
+
+import javax.naming.ldap.*;
+import java.util.ArrayList;
+import java.util.List;
+import javax.naming.InvalidNameException;
+
+/**
+ * Tests for LDAP name parsing
+ */
+
+public class LdapParserTests {
+    public static void main(String args[])
+                throws Exception {
+        Rdn rdn = null;
+
+        /**
+         * Presence of any of these characters in an attribute value
+         * without a preceeding escape is considered Illegal by
+         * the LDAP parser.
+         */
+        String[] mustEscSpecials = new String[]
+                                {";", ",", "\\", "+"};
+
+        /**
+         * The special characters that should be preceeded by an escape
+         */
+        String[] specials = new String[]
+                        {";", ",", "\\", "<", ">", "#", "\"", "+"};
+
+        /**
+         * Test with unescaped speicial characters in the Rdn
+         */
+        System.out.println();
+        System.out.print("*****Tests with unescaped special ");
+        System.out.println("characters in the Rdn*****");
+
+        for (int i = 0; i < mustEscSpecials.length; i++) {
+            String rdnStr = "cn=Juicy" + mustEscSpecials[i] + "Fruit";
+            testInvalids(rdnStr);
+        }
+
+        /*
+         * special characters with a preceeding backslash must be accepted.
+         */
+        System.out.println();
+        System.out.println("******Special character escaping tests ******");
+        for (int i = 0; i < specials.length; i++) {
+            rdn = new Rdn("cn=Juicy\\" + specials[i] + "Fruit");
+        }
+        System.out.println("Escape leading space:" +
+                new Rdn("cn=\\  Juicy Fruit")); // escaped leading space
+        System.out.println("Escaped leading #:" +
+                new Rdn("cn=\\#Juicy Fruit"));  // escaped leading # in string
+        System.out.println("Escaped trailing space:" +
+                new Rdn("cn=Juicy Fruit\\  ")); // escaped trailing space
+
+        // Unescaped special characters at the beginning of a value
+        System.out.println();
+        System.out.println(
+                "******Other unescaped special character tests ******");
+        rdn = new Rdn("cn=  Juicy Fruit");
+        System.out.println(
+            "Accepted Rdn with value containing leading spaces:" +
+            rdn.toString());
+        rdn = new Rdn("cn=Juicy Fruit  ");
+        System.out.println(
+            "Accepted Rdn with value containing trailing spaces:" +
+            rdn.toString());
+
+        String[] invalids =  new String[]
+                {"cn=#xabc", "cn=#axcd", "cn=#abcx", "cn=#abcdex"};
+
+        for (int i = 0; i < invalids.length; i++) {
+            testInvalids(invalids[i]);
+        }
+
+        /**
+         * Other special cases
+         */
+        System.out.println();
+        System.out.println(
+                "***************Other special cases****************");
+
+        LdapName name = new LdapName("");
+        System.out.println("Empty LDAP name:" + name.toString());
+
+        // Rdn with quoted value
+        rdn = new Rdn("cn=\"Juicy ,=+<>#; Fruit\"");
+        System.out.println("Quoted Rdn string:" + rdn.toString());
+
+        // Rdn with unicode value
+        rdn = new Rdn("SN=Lu\\C4\\8Di\\C4\\87");
+        System.out.println("Unicode Rdn string:" + rdn.toString());
+
+        /*
+         * oid type and binary value
+         */
+        name = new LdapName(
+                "1.3.6.1.4.1.466.0=#04024869,O=Test,C=GB");
+        System.out.println("binary valued LDAP name:" + name.toString());
+
+        // ';' seperated name- RFC 1779 style
+        name = new LdapName("CN=Steve Kille;O=Isode;C=GB");
+        System.out.println("';' seperated LDAP name:" + name.toString());
+    }
+
+    static void testInvalids(String rdnStr) throws Exception {
+        boolean isExcepThrown = false;
+        Rdn rdn = null;
+        try {
+            rdn = new Rdn(rdnStr);
+        } catch (InvalidNameException e) {
+            System.out.println("Caught the right exception: " + e);
+            isExcepThrown = true;
+        } catch (IllegalArgumentException e) {
+            System.out.println("Caught the right exception: " + e);
+            isExcepThrown = true;
+        }
+        if (!isExcepThrown) {
+            throw new Exception(
+                    "Accepted an invalid Rdn string:" +
+                    rdnStr + " as Rdn: " + rdn);
+        }
+    }
+}