KeyStoreTest.java revision f35e9663d7bdae523953185b4ad6b6f9e8e7d6ca
1f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang/* 2f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * Copyright (C) 2009 The Android Open Source Project 3f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * 4f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * you may not use this file except in compliance with the License. 6f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * You may obtain a copy of the License at 7f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * 8f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * http://www.apache.org/licenses/LICENSE-2.0 9f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * 10f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * Unless required by applicable law or agreed to in writing, software 11f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS, 12f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * See the License for the specific language governing permissions and 14f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * limitations under the License. 15f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang */ 16f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 17f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wangpackage android.security.tests; 18f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 19f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wangimport android.app.Activity; 20f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wangimport android.security.KeyStore; 21f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wangimport android.test.ActivityUnitTestCase; 22f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wangimport android.test.suitebuilder.annotation.MediumTest; 23f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 24f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang/** 25f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * Junit / Instrumentation test case for KeyStore class 26f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * 27f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * Running the test suite: 28f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * 29f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang * adb shell am instrument -w android.security.tests/.KeyStoreTestRunner 30f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang */ 31f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang@MediumTest 32f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wangpublic class KeyStoreTest extends ActivityUnitTestCase<Activity> { 33f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private static final String TEST_PASSWD = "12345678"; 34f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private static final String TEST_EMPTY_PASSWD = ""; 35f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private static final String TEST_SHORT_PASSWD = "short"; 36f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private static final String TEST_PASSWD2 = "87654321"; 37f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private static final String TEST_KEYNAME = "testkey"; 38f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private static final String TEST_KEYNAME1 = "testkey1"; 39f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private static final String TEST_KEYNAME2 = "testkey2"; 40f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private static final String TEST_KEYVALUE = "test value"; 41f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 42f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang private KeyStore mKeyStore = null; 43f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 44f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public KeyStoreTest() { 45f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang super(Activity.class); 46f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 47f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 48f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang @Override 49f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang protected void setUp() throws Exception { 50f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore = KeyStore.getInstance(); 51f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang if (mKeyStore.test() != KeyStore.UNINITIALIZED) mKeyStore.reset(); 52f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertEquals(KeyStore.UNINITIALIZED, mKeyStore.test()); 53f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang super.setUp(); 54f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 55f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 56f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang @Override 57f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang protected void tearDown() throws Exception { 58f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.reset(); 59f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang super.tearDown(); 60f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 61f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 62f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public void testTest() throws Exception { 63f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertEquals(KeyStore.UNINITIALIZED, mKeyStore.test()); 64f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 65f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 66f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public void testPassword() throws Exception { 67f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang //assertFalse(mKeyStore.password(TEST_EMPTY_PASSWD)); 68f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang //assertFalse(mKeyStore.password(TEST_SHORT_PASSWD)); 69f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 70f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.password(TEST_PASSWD)); 71f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertEquals(KeyStore.NO_ERROR, mKeyStore.test()); 72f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 73f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertFalse(mKeyStore.password(TEST_PASSWD2, TEST_PASSWD2)); 74f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang //assertFalse(mKeyStore.password(TEST_PASSWD, TEST_SHORT_PASSWD)); 75f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 76f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.password(TEST_PASSWD, TEST_PASSWD2)); 77f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 78f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 79f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public void testPut() throws Exception { 80f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE)); 81f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertFalse(mKeyStore.contains(TEST_KEYNAME)); 82f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.password(TEST_PASSWD); 83f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE)); 84f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 85f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 86f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public void testDelete() throws Exception { 87f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.delete(TEST_KEYNAME)); 88f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.password(TEST_PASSWD); 89f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.delete(TEST_KEYNAME)); 90f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 91f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE); 92f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.delete(TEST_KEYNAME)); 93f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 94f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 95f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public void testContains() throws Exception { 96f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertFalse(mKeyStore.contains(TEST_KEYNAME)); 97f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 98f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.password(TEST_PASSWD); 99f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertFalse(mKeyStore.contains(TEST_KEYNAME)); 100f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 101f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE); 102f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.contains(TEST_KEYNAME)); 103f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 104f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 105f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public void testSaw() throws Exception { 106f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang String[] results = mKeyStore.saw(TEST_KEYNAME); 107f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertEquals(0, results.length); 108f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 109f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.password(TEST_PASSWD); 110f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE); 111f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE); 112f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 113f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang results = mKeyStore.saw(TEST_KEYNAME); 114f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertEquals(2, results.length); 115f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 116f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 117f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public void testLock() throws Exception { 118f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertFalse(mKeyStore.lock()); 119f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 120f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.password(TEST_PASSWD); 121f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertEquals(KeyStore.NO_ERROR, mKeyStore.test()); 122f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 123f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.lock()); 124f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertEquals(KeyStore.LOCKED, mKeyStore.test()); 125f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 126f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 127f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang public void testUnlock() throws Exception { 128f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.password(TEST_PASSWD); 129f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertEquals(KeyStore.NO_ERROR, mKeyStore.test()); 130f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang mKeyStore.lock(); 131f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang 132f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertFalse(mKeyStore.unlock(TEST_PASSWD2)); 133f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang assertTrue(mKeyStore.unlock(TEST_PASSWD)); 134f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang } 135f35e9663d7bdae523953185b4ad6b6f9e8e7d6caChung-yih Wang} 136