jdk/test/sun/security/x509/equalNames/AltNamesEqualsTest.java
changeset 2 90ce3da70b43
child 5506 202f599c92aa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/x509/equalNames/AltNamesEqualsTest.java	Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,161 @@
+/*
+ * Copyright 1999-2007 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
+ * @summary Make sure names that are equal are treated as such.
+ * @bug 4273559
+ * @author Yassir Elley
+ */
+
+import sun.security.x509.*;
+import sun.security.util.ObjectIdentifier;
+
+public class AltNamesEqualsTest{
+
+    private final static String baseDNSName = "bob.example.com";
+    private final static String baseDNSNameSame = "BOB.EXAMPLE.COM";
+    private final static String baseDNSNameDiff = "fred.example.com";
+
+    private final static String baseRFCName = "bob@example.com";
+    private final static String baseRFCNameSame = "BOB@EXAMPLE.COM";
+    private final static String baseRFCNameDiff = "fred@example.com";
+
+    private final static String baseURIName = "http://bob.example.com/bob.html";
+    private final static String baseURINameSame ="HTTP://BOB.EXAMPLE.COM/bob.html";
+    private final static String baseURINameDiff ="http://bob.example.com/BOB.html";
+
+    private final static String baseOIDName = "1.2.3.4";
+    private final static String baseOIDNameDiff = "1.2.3.5";
+
+    private final static String baseIPName = "1.2.3.4";
+    private final static String baseIPNameDiff = "1.2.3.5";
+
+    private DNSName dnsName, dnsNameSame, dnsNameDiff;
+    private RFC822Name rfcName, rfcNameSame, rfcNameDiff;
+    private URIName uriName, uriNameSame, uriNameDiff;
+    private OIDName oidName, oidNameSame, oidNameDiff;
+    private IPAddressName ipName, ipNameSame, ipNameDiff;
+
+    public static void main(String [] args) throws Exception {
+        AltNamesEqualsTest test = new AltNamesEqualsTest();
+        test.run();
+    }
+
+    private void run() throws Exception {
+        initializeNames();
+        testNames("DNSNames", dnsName, dnsNameSame, dnsNameDiff);
+        testNames("RFC822Names", rfcName, rfcNameSame, rfcNameDiff);
+        testNames("URINames", uriName, uriNameSame, uriNameDiff);
+        testNames("OIDNames", oidName, oidNameSame, oidNameDiff);
+        testNames("IPAddressNames", ipName, ipNameSame, ipNameDiff);
+    }
+
+    private void initializeNames() throws Exception {
+        dnsName = new DNSName(baseDNSName);
+        dnsNameSame = new DNSName(baseDNSNameSame);
+        dnsNameDiff = new DNSName(baseDNSNameDiff);
+
+        rfcName = new RFC822Name(baseRFCName);
+        rfcNameSame = new RFC822Name(baseRFCNameSame);
+        rfcNameDiff = new RFC822Name(baseRFCNameDiff);
+
+        uriName = new URIName(baseURIName);
+        uriNameSame = new URIName(baseURINameSame);
+        uriNameDiff = new URIName(baseURINameDiff);
+
+        oidName = stringToOIDName(baseOIDName);
+        oidNameSame = stringToOIDName(baseOIDName);
+        oidNameDiff = stringToOIDName(baseOIDNameDiff);
+
+        ipName = stringToIPName(baseIPName);
+        ipNameSame = stringToIPName(baseIPName);
+        ipNameDiff = stringToIPName(baseIPNameDiff);
+    }
+
+    private void testNames(String nameType, GeneralNameInterface name,
+                           GeneralNameInterface sameName,
+                           GeneralNameInterface diffName)
+        throws Exception
+    {
+        if (!name.equals(sameName)){
+            throw new Exception("Equal " + nameType + " are being " +
+                                "considered unequal");
+        }
+        if (name.equals(diffName)){
+            throw new Exception("Unequal " + nameType + " are being " +
+                                "considered equal");
+        }
+    }
+
+    private OIDName stringToOIDName(String name)
+        throws Exception
+    {
+        OIDName oidName = null;
+        ObjectIdentifier oid = new ObjectIdentifier(name);
+        oidName = new OIDName(oid);
+        return oidName;
+    }
+
+    private IPAddressName stringToIPName(String name)
+        throws Exception
+    {
+        IPAddressName ipAddr = null;
+
+        //Convert to byte array
+        int ch = '.';
+        int start = 0;
+        int end = 0;
+        byte components [];
+        int  componentLen;
+
+        // Calculate length of IP address
+        componentLen = 0;
+        while ((end = name.indexOf(ch,start)) != -1) {
+            start = end + 1;
+            componentLen += 1;
+        }
+        componentLen += 1;
+        if (componentLen != 4)
+            throw new Exception("Invalid IP address: need four components");
+        components = new byte[componentLen];
+
+        start = 0;
+        int i = 0;
+        String comp = null;
+        Integer compVal = new Integer(0);
+        while ((end = name.indexOf(ch,start)) != -1) {
+            comp = name.substring(start,end);
+            compVal = Integer.valueOf(comp);
+            if (compVal.intValue() < 0 || compVal.intValue() > 255)
+                throw new Exception("Invalid IP address: component value " +
+                                    "not between 0-255");
+            components[i++] = compVal.byteValue();
+            start = end + 1;
+        }
+        comp = name.substring(start);
+        components[i] = Integer.valueOf(comp).byteValue();
+        ipAddr = new IPAddressName(components);
+        return ipAddr;
+    }
+}