1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @author Alexander Y. Kleymenov
208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.x509;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x501.Name;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.EDIPartyName;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.GeneralName;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.GeneralNames;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.ORAddress;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.OtherName;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * GeneralNameTest
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class GeneralNameTest extends TestCase {
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGeneralName() {
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san0 =
448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new GeneralName(new OtherName("1.2.3.4.5", new byte[] { 1, 2, 0, 1 }));
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san1 = new GeneralName(1, "rfc@822.Name");
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san2 = new GeneralName(2, "dNSName");
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san3 = new GeneralName(new ORAddress());
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san4 = new GeneralName(new Name("O=Organization"));
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san5 =
508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new GeneralName(new EDIPartyName("assigner", "party"));
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san6 = new GeneralName(6, "http://uniform.Resource.Id");
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san7 = new GeneralName(7, "1.1.1.1");
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralName san8 = new GeneralName(8, "1.2.3.4444.55555");
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralNames sans_1 = new GeneralNames();
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san0);
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san1);
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san2);
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san3);
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san4);
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san5);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san6);
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san7);
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sans_1.addName(san8);
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            byte[] encoding = GeneralNames.ASN1.encode(sans_1);
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            GeneralNames.ASN1.decode(encoding);
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (Exception e) {
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // should not be thrown:
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // provided string representations are correct
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.printStackTrace();
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGeneralName1() throws Exception {
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        OtherName on =
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                new OtherName("1.2.3.4.5", new byte[] { 1, 2, 0, 1 });
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encoding = OtherName.ASN1.encode(on);
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new GeneralName(0, encoding);
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        OtherName.ASN1.decode(encoding);
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GeneralName gn = new GeneralName(on);
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new GeneralName(0, gn.getEncodedName());
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(gn, new GeneralName(0, gn.getEncodedName()));
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * ipStrToBytes method testing.
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testIpStrToBytes() throws Exception {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-727
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object[][] positives = {
928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                { "010a:020b:3337:1000:FFFA:ABCD:9999:0000",
938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        new int[] { 0x01, 0x0a, 0x02, 0x0b, 0x33, 0x37, 0x10, 0x00, 0xFF,
948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0xFA, 0xAB, 0xCD, 0x99, 0x99, 0x00, 0x00 } },
958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                { "010a:020b:3337:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        new int[] { 0x01, 0x0a, 0x02, 0x0b, 0x33, 0x37, 0x10, 0x00, 0xFF,
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0xFA, 0xAB, 0xCD, 0x99, 0x99, 0x00, 0x00, 0x01, 0x02, 0x03,
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0b, 0x0c, 0x0D,
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0x0e, 0x0f, 0x10 } },
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                { "010a:020b:1133:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        new int[] { 0x01, 0x0a, 0x02, 0x0b, 0x11, 0x33, 0x10, 0x00, 0xFF,
1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0xFA, 0xAB, 0xCD, 0x99, 0x99, 0x00, 0x00, 0x01, 0x02, 0x03,
1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0b, 0x0c, 0x0D,
1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0x0e, 0x0f, 0x10 } },
1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                { "010a:020b:1133:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        new int[] { 0x01, 0x0a, 0x02, 0x0b, 0x11, 0x33, 0x10, 0x00, 0xFF,
1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0xFA, 0xAB, 0xCD, 0x99, 0x99, 0x00, 0x00, 0x01, 0x02, 0x03,
1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0b, 0x0c, 0x0D,
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                0x0e, 0x0f, 0x10 } },
1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                { "100.2.35.244",
1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        new int[] { 100, 2, 35, 244 } },
1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                { "100.2.35.244/51.6.79.118",
1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        new int[] { 100, 2, 35, 244, 51, 6, 79, 118 } },
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] negatives = {
1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:0000:3333:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0",
1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:3:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:33:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:333:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:10V0:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000-FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999",
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999/0000:0102:0304:0506:0708:090A:0b0c:0D0e:0f10",
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999:0000:0102/0304:0506:0708:090A:0b0c:0D0e:0f10",
1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e:0f10:1234",
1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.244/51.6.79.118.119",
1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.244.115/79.118.119",
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.244/79.118.119.1167",
1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.244/79.118.119.116.7",
1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.244.79/118.119.116.7",
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35/79/118.119.116.7",
1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.79/118/119.116.7",
1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2..35.79/118/119.116.7",
1348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.a.35.79/118/119.116.7",
1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.79/119.116.7-1",
1368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.244.111",
1378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "100.2.35.244/111",
1388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e0f10",
1398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999:0000/0102:0304:0506:0708:090A:0b0c:0D0e0f:10",
1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999:0000/0102/0304:0506:0708:090A:0b0c:0D0e0f:10",
1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999:0000/0102030405060708090A0b0c:0D0e:0f10:ffff",
1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "010a:020b:1133:1000:FFFA:ABCD:9999:00000102030405060708090A/0b0c:0D0e:0f10:ffff",
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
1448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        for (int i = 0; i < positives.length; i++) {
1458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            byte[] res = GeneralName.ipStrToBytes((String) positives[i][0]);
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            int[] ref = (int[]) positives[i][1];
1478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals("Length differs for " + positives[i][0], ref.length, res.length);
1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            for (int j = 0; j < res.length; j++) {
1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                assertEquals("Element differs for " + positives[i][0], (byte) ref[j], res[j]);
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        for (int n = 0; n < negatives.length; n++) {
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String ip = negatives[n];
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] bts = GeneralName.ipStrToBytes(ip);
1568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                for (int i = 0; i < bts.length; i++) {
1578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    System.out.print((bts[i] & 0xFF) + " ");
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                System.out.println("");
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                System.out.println(ip);
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected IOException was thrown for " + n);
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IOException e) {
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // expected
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * oidStrToInts method testing
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testOidStrToInts() throws Exception {
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-727
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object[][] positives = {
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "1.2", new int[] { 1, 2 } },
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "1.2.3.4.5", new int[] { 1, 2, 3, 4, 5 } },
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "123.456.7890.1234567890",
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        new int[] { 123, 456, 7890, 1234567890 } }, };
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] negatives = { ".1.2", "1.2.", "11-22.44.22", "111..222" };
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < positives.length; i++) {
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int[] res = GeneralName.oidStrToInts((String) positives[i][0]);
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int[] ref = (int[]) positives[i][1];
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("Length differs for " + positives[i][0], ref.length,
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    res.length);
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int j = 0; j < res.length; j++) {
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (res[j] != ref[j]) {
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    assertEquals("Element differs for " + positives[i][0],
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            (byte) ref[j], res[j]);
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < negatives.length; i++) {
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                GeneralName.oidStrToInts(negatives[i]);
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Expected IOException was not thrown for " + negatives[i]);
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IOException e) {
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // expected
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
201