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 Hughespackage org.apache.harmony.auth.tests.javax.security.auth.kerberos;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayOutputStream;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectOutputStream;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.DestroyFailedException;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.kerberos.KerberosKey;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.kerberos.KerberosPrincipal;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests KerberosKey class implementation.
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @see http://www.ietf.org/rfc/rfc3961.txt
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class KerberosKeyTest extends TestCase {
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // principal object for testing
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final KerberosPrincipal principal = new KerberosPrincipal(
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            "name@aaa.com", 1);
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // byte array for testing
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04,
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            0x05, 0x06, 0x07 };
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosKey#KerberosKey(
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        javax.security.auth.kerberos.KerberosPrincipal, byte[], int, int)
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_Ctor1() {
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // OK to pass null value for principal parameter
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(new KerberosKey(null, keyBytes, 0, 0).getPrincipal());
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // NPE for null keyBytes parameter
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosKey(principal, null, 0, 0);
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // construct with DES algorithm
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey key = new KerberosKey(principal, keyBytes, 1, 123);
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("DES algorithm", "DES", key.getAlgorithm());
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("version number", 123, key.getVersionNumber());
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("format", "RAW", key.getFormat());
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame("principal", principal, key.getPrincipal());
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("is destroyed", key.isDestroyed());
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // construct with NULL algorithm
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        key = new KerberosKey(principal, keyBytes, 0, 0);
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("NULL algorithm", "NULL", key.getAlgorithm());
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("version number", 0, key.getVersionNumber());
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosKey#KerberosKey(
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        javax.security.auth.kerberos.KerberosPrincipal, char[],
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String)
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_Ctor2() {
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // NPE for null value for principal parameter
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosKey(null, new char[10], "DES");
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // NPE for null password value
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosKey(principal, null, "DES");
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // IAE for unsupported algorithm
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new KerberosKey(principal, new char[10],
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "there_is_no_such_algorithm");
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalArgumentException");
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // if algorithm parameter is null then DES is used
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey key = new KerberosKey(principal, new char[10], null);
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("algorithm", "DES", key.getAlgorithm());
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("format", "RAW", key.getFormat());
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("key type", 3, key.getKeyType());
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("version number", 0, key.getVersionNumber());
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("is destroyed", key.isDestroyed());
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame("principal", principal, key.getPrincipal());
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosKey#getEncoded()
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getEncoded() {
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey key = new KerberosKey(principal, keyBytes, 1, 123);
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] keyBytes1 = key.getEncoded();
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("encoded", Arrays.equals(keyBytes, keyBytes1));
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // bytes are copied each time we invoke the method
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame("keyBytes immutability 1 ", keyBytes, keyBytes1);
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame("keyBytes immutability 2 ", keyBytes1, key.getEncoded());
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Test generation of DES key from password
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test data from RFC 3961 (http://www.ietf.org/rfc/rfc3961.txt)
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // see A.2 test vectors
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test data format: principal/password/DES key
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object[][] testcases = {
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "raeburn@ATHENA.MIT.EDU",
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "password",
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        new byte[] { (byte) 0xcb, (byte) 0xc2, (byte) 0x2f,
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                (byte) 0xae, (byte) 0x23, (byte) 0x52,
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                (byte) 0x98, (byte) 0xe3 } },
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "danny@WHITEHOUSE.GOV",
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "potatoe",
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        new byte[] { (byte) 0xdf, (byte) 0x3d, (byte) 0x32,
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                (byte) 0xa7, (byte) 0x4f, (byte) 0xd9,
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                (byte) 0x2a, (byte) 0x01 } },
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // TODO add "pianist@EXAMPLE.COM" and "Juri ... @ATHENA.MIT.EDU"
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (Object[] element : testcases) {
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            KerberosPrincipal kp = new KerberosPrincipal(
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    (String) element[0], 1);
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            key = new KerberosKey(kp, ((String) element[1]).toCharArray(),
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "DES");
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Testcase: " + (String) element[0], Arrays.equals(
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    (byte[]) element[2], key.getEncoded()));
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosKey#destroy()
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_destroy() throws Exception {
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey key = new KerberosKey(principal, new char[10], "DES");
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("not destroyed", key.isDestroyed());
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        key.destroy();
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("destroyed", key.isDestroyed());
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // no exceptions for second destroy() call
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        key.destroy();
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // check that IllegalStateException is thrown for certain methods
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            key.getAlgorithm();
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            key.getEncoded();
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            key.getFormat();
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            key.getKeyType();
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            key.getPrincipal();
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            key.getVersionNumber();
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // but for serialization IOException is expected
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ObjectOutputStream out = new ObjectOutputStream(
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    new ByteArrayOutputStream());
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            out.writeObject(key);
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IOException");
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            key.toString();
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosKey#equals(java.lang.Object)
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_equals() {
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey kerberosKey1 = new KerberosKey(principal, keyBytes, 1, 123);
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey kerberosKey2 = new KerberosKey(principal, keyBytes, 1, 123);
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey kerberosKey3 = new KerberosKey(principal, new byte[] { 1,
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                3, 4, 5 }, 1, 123);
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("kerberosKey1 and kerberosKey2 should be equivalent ",
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                kerberosKey1, kerberosKey2);
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("kerberosKey1 and kerberosKey3 sholudn't be equivalent ",
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                kerberosKey1.equals(kerberosKey3));
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            kerberosKey2.destroy();
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (DestroyFailedException e) {
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("kerberosKey2 destroy failed");
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Destroyed kerberosKey sholudn't be equivalent ",
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                kerberosKey1.equals(kerberosKey2));
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax.security.auth.kerberos.KerberosKey#hashCode()
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_hashCode() {
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey kerberosKey1 = new KerberosKey(principal, keyBytes, 1, 123);
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KerberosKey kerberosKey2 = new KerberosKey(principal, keyBytes, 1, 123);
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("kerberosKey1 and kerberosKey2 should be equivalent ",
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                kerberosKey1, kerberosKey2);
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("hashCode should be equivalent", kerberosKey1.hashCode(),
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                kerberosKey2.hashCode());
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
263