1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package tests.api.javax.security.auth;
19
20import junit.framework.TestCase;
21
22import javax.security.auth.x500.X500Principal;
23
24import java.io.ByteArrayInputStream;
25import java.io.InputStream;
26import java.security.cert.CertificateFactory;
27import java.security.cert.X509Certificate;
28import org.apache.harmony.security.tests.support.cert.TestUtils;
29
30/**
31 * Tests for <code>X500Principal</code> class constructors and methods.
32 *
33 */
34public class X500PrincipalTest extends TestCase {
35
36    /**
37     * javax.security.auth.x500.X500Principal#X500Principal(String name)
38     */
39    public void test_X500Principal_01() {
40        String name = "CN=Duke,OU=JavaSoft,O=Sun Microsystems,C=US";
41
42        try {
43            X500Principal xpr = new X500Principal(name);
44            assertNotNull("Null object returned", xpr);
45            String resName = xpr.getName();
46            assertEquals(name, resName);
47        } catch (Exception e) {
48            fail("Unexpected exception: " + e);
49        }
50
51        try {
52            X500Principal xpr = new X500Principal((String)null);
53            fail("NullPointerException wasn't thrown");
54        } catch (NullPointerException npe) {
55        } catch (Exception e) {
56            fail(e + " was thrown instead of NullPointerException");
57        }
58
59        try {
60            X500Principal xpr = new X500Principal("X500PrincipalName");
61            fail("IllegalArgumentException wasn't thrown");
62        } catch (IllegalArgumentException npe) {
63        } catch (Exception e) {
64            fail(e + " was thrown instead of IllegalArgumentException");
65        }
66    }
67
68    /**
69     * javax.security.auth.x500.X500Principal#X500Principal(InputStream is)
70     */
71    public void test_X500Principal_02() {
72        String name = "CN=Duke,OU=JavaSoft,O=Sun Microsystems,C=US";
73        byte[] ba = getByteArray(TestUtils.getX509Certificate_v1());
74        ByteArrayInputStream is = new ByteArrayInputStream(ba);
75        InputStream isNull = null;
76
77        try {
78            X500Principal xpr = new X500Principal(is);
79            assertNotNull("Null object returned", xpr);
80            byte[] resArray = xpr.getEncoded();
81            assertEquals(ba.length, resArray.length);
82        } catch (Exception e) {
83            fail("Unexpected exception: " + e);
84        }
85
86        try {
87            X500Principal xpr = new X500Principal(isNull);
88            fail("NullPointerException wasn't thrown");
89        } catch (NullPointerException npe) {
90        } catch (Exception e) {
91            fail(e + " was thrown instead of NullPointerException");
92        }
93
94        is = new ByteArrayInputStream(name.getBytes());
95        try {
96            X500Principal xpr = new X500Principal(is);
97            fail("IllegalArgumentException wasn't thrown");
98        } catch (IllegalArgumentException npe) {
99        } catch (Exception e) {
100            fail(e + " was thrown instead of IllegalArgumentException");
101        }
102    }
103
104    /**
105     * javax.security.auth.x500.X500Principal#X500Principal(byte[] name)
106     */
107    public void test_X500Principal_03() {
108        String name = "CN=Duke,OU=JavaSoft,O=Sun Microsystems,C=US";
109        byte[] ba = getByteArray(TestUtils.getX509Certificate_v1());
110        byte[] baNull = null;
111
112        try {
113            X500Principal xpr = new X500Principal(ba);
114            assertNotNull("Null object returned", xpr);
115            byte[] resArray = xpr.getEncoded();
116            assertEquals(ba.length, resArray.length);
117        } catch (Exception e) {
118            fail("Unexpected exception: " + e);
119        }
120
121        try {
122            X500Principal xpr = new X500Principal(baNull);
123            fail("IllegalArgumentException wasn't thrown");
124        } catch (IllegalArgumentException npe) {
125        } catch (Exception e) {
126            fail(e + " was thrown instead of IllegalArgumentException");
127        }
128
129        ba = name.getBytes();
130        try {
131            X500Principal xpr = new X500Principal(ba);
132            fail("IllegalArgumentException wasn't thrown");
133        } catch (IllegalArgumentException npe) {
134        } catch (Exception e) {
135            fail(e + " was thrown instead of IllegalArgumentException");
136        }
137    }
138
139    /**
140     * javax.security.auth.x500.X500Principal#getName()
141     */
142    public void test_getName() {
143        String name = "CN=Duke,OU=JavaSoft,O=Sun Microsystems,C=US";
144        X500Principal xpr = new X500Principal(name);
145        try {
146            String resName = xpr.getName();
147            assertEquals(name, resName);
148        } catch (Exception e) {
149            fail("Unexpected exception: " + e);
150        }
151    }
152
153    /**
154     * javax.security.auth.x500.X500Principal#getName(String format)
155     */
156    public void test_getName_Format() {
157        String name = "CN=Duke,OU=JavaSoft,O=Sun Microsystems,C=US";
158        String expectedName = "cn=duke,ou=javasoft,o=sun microsystems,c=us";
159        X500Principal xpr = new X500Principal(name);
160        try {
161            String resName = xpr.getName(X500Principal.CANONICAL);
162            assertEquals(expectedName, resName);
163        } catch (Exception e) {
164            fail("Unexpected exception: " + e);
165        }
166
167        expectedName = "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US";
168        try {
169            String resName = xpr.getName(X500Principal.RFC1779);
170            assertEquals(expectedName, resName);
171        } catch (Exception e) {
172            fail("Unexpected exception: " + e);
173        }
174
175        try {
176            String resName = xpr.getName(X500Principal.RFC2253);
177            assertEquals(name, resName);
178        } catch (Exception e) {
179            fail("Unexpected exception: " + e);
180        }
181
182        try {
183            String resName = xpr.getName(null);
184            fail("IllegalArgumentException  wasn't thrown");
185        } catch (IllegalArgumentException  iae) {
186        }
187        try {
188            String resName = xpr.getName("RFC2254");
189            fail("IllegalArgumentException  wasn't thrown");
190        } catch (IllegalArgumentException  iae) {
191        }
192    }
193
194    /**
195     * javax.security.auth.x500.X500Principal#hashCode()
196     */
197    public void test_hashCode() {
198        String name = "CN=Duke,OU=JavaSoft,O=Sun Microsystems,C=US";
199        X500Principal xpr = new X500Principal(name);
200        try {
201            int res = xpr.hashCode();
202            assertNotNull(res);
203        } catch (Exception e) {
204            fail("Unexpected exception: " + e);
205        }
206    }
207
208    /**
209     * javax.security.auth.x500.X500Principal#toString()
210     */
211    public void test_toString() {
212        String name = "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US";
213        X500Principal xpr = new X500Principal(name);
214        try {
215            String res = xpr.toString();
216            assertNotNull(res);
217            assertEquals(name, res);
218        } catch (Exception e) {
219            fail("Unexpected exception: " + e);
220        }
221    }
222
223    /**
224     * javax.security.auth.x500.X500Principal#getEncoded()
225     */
226    public void test_getEncoded() {
227        byte[] ba = getByteArray(TestUtils.getX509Certificate_v1());
228        X500Principal xpr = new X500Principal(ba);
229        try {
230            byte[] res = xpr.getEncoded();
231            assertNotNull(res);
232            assertEquals(ba.length, res.length);
233        } catch (Exception e) {
234            fail("Unexpected exception: " + e);
235        }
236    }
237
238    /**
239     * javax.security.auth.x500.X500Principal#equals(Object o)
240     */
241    public void test_equals() {
242        String name1 = "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US";
243        String name2 = "cn=duke,ou=javasoft,o=sun microsystems,c=us";
244        String name3 = "CN=Alex Astapchuk, OU=SSG, O=Intel ZAO, C=RU";
245        X500Principal xpr1 = new X500Principal(name1);
246        X500Principal xpr2 = new X500Principal(name2);
247        X500Principal xpr3 = new X500Principal(name3);
248        try {
249            assertTrue("False returned", xpr1.equals(xpr2));
250            assertFalse("True returned", xpr1.equals(xpr3));
251        } catch (Exception e) {
252            fail("Unexpected exception: " + e);
253        }
254    }
255
256    private byte[] getByteArray(byte[] array) {
257        byte[] x = null;
258        try {
259            ByteArrayInputStream is = new ByteArrayInputStream(array);
260            CertificateFactory cf = CertificateFactory.getInstance("X.509");
261            X509Certificate cert = (X509Certificate)cf.generateCertificate(is);
262            X500Principal xx = cert.getIssuerX500Principal();
263            x = xx.getEncoded();
264        } catch (Exception e) {
265            return null;
266        }
267        return x;
268    }
269}
270
271