1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vera Y. Petrashkova
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.tests.java.security;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStore;
26cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giroimport java.util.HashSet;
27cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giroimport java.util.Set;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.SecretKey;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
32229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
34f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Tests for <code>KeyStore.SecretKeyEntry</code> class constructor and methods
35f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class KSSecretKeyEntryTest extends TestCase {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>SecretKeyEntry(SecretKey secretKey)</code> constructor
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: throws NullPointerException when secretKey is null
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyEntry() {
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKey sk = null;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new KeyStore.SecretKeyEntry(sk);
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException must be thrown when secretKey is null");
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException e) {
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
51f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sk = new tmpSecretKey();
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyStore.SecretKeyEntry ske = new KeyStore.SecretKeyEntry(sk);
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(ske);
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(ske instanceof KeyStore.SecretKeyEntry);
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(Exception e) {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception was thrown when secretKey is not null");
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
61f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
63cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro     * Test for
64cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro     * <code>SecretKeyEntry(SecretKey secretKey, Set<Attribute> attribute)</code>
65cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro     * constructor
66cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro     * Assertion: throws NullPointerException when attributes is null
67cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro     */
68cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro    public void testSecretKeyEntry_nullAttributes() {
69cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        SecretKey sk = new tmpSecretKey();
70cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        try {
71cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            new KeyStore.SecretKeyEntry(sk, null /* attributes */);
72cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            fail("NullPointerException must be thrown when attributes is null");
73cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        } catch(NullPointerException expected) {
74cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        }
75cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro    }
76cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro
77cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro    /**
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getSecretKey()</code> method
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns SecretKey from the given entry
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetSecretKey() {
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKey sk = new tmpSecretKey();
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStore.SecretKeyEntry ske = new KeyStore.SecretKeyEntry(sk);
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect SecretKey", sk, ske.getSecretKey());
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
86f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
88cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro     * Test for <code>getAttributes()</code> method
89cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro     * Assertion: returns the attributes specified in the constructor, as an unmodifiable set
90cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro     */
91cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro    public void testGetAttributes() {
92cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        SecretKey sk = new tmpSecretKey();
93cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        final String attributeName = "theAttributeName";
94cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        KeyStore.Entry.Attribute myAttribute = new KeyStore.Entry.Attribute() {
95cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            @Override
96cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            public String getName() {
97cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro                return attributeName;
98cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            }
99cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro
100cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            @Override
101cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            public String getValue() {
102cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro                return null;
103cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            }
104cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        };
105cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        Set<KeyStore.Entry.Attribute> attributeSet = new HashSet<KeyStore.Entry.Attribute>();
106cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        attributeSet.add(myAttribute);
107cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro
108cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        KeyStore.SecretKeyEntry ksSKE = new KeyStore.SecretKeyEntry(sk, attributeSet);
109cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        Set<KeyStore.Entry.Attribute> returnedAttributeSet = ksSKE.getAttributes();
110cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        assertEquals(attributeSet, returnedAttributeSet);
111cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        // Adding an element to the original set is OK.
112cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        attributeSet.add(myAttribute);
113cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        // The returned set is unmodifiabled.
114cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        try {
115cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            returnedAttributeSet.add(myAttribute);
116cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro            fail("The returned set of attributed should be unmodifiable");
117cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        } catch (UnsupportedOperationException expected) {
118cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro        }
119cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro    }
120cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro
121cf98c7a70222f4b3a66f8abd9626239395aea6c0Sergio Giro    /**
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>toString()</code> method
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns non null string
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testToString() {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKey sk = new tmpSecretKey();
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStore.SecretKeyEntry ske = new KeyStore.SecretKeyEntry(sk);
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("toString() returns null string", ske.toString());
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectclass tmpSecretKey implements SecretKey {
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getAlgorithm() {
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return "My algorithm";
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getFormat() {
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return "My Format";
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public byte[] getEncoded() {
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new byte[1];
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
143