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