blob: 15e253cee33e1c1183223cc9209a0c783d2d312d [file] [log] [blame]
Chung-yih Wangf35e9662009-09-29 11:20:28 +08001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.security.tests;
18
19import android.app.Activity;
20import android.security.KeyStore;
21import android.test.ActivityUnitTestCase;
22import android.test.suitebuilder.annotation.MediumTest;
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -070023import java.nio.charset.Charsets;
24import java.util.Arrays;
25import java.util.HashSet;
Chung-yih Wangf35e9662009-09-29 11:20:28 +080026
27/**
28 * Junit / Instrumentation test case for KeyStore class
29 *
30 * Running the test suite:
31 *
32 * adb shell am instrument -w android.security.tests/.KeyStoreTestRunner
33 */
34@MediumTest
35public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
36 private static final String TEST_PASSWD = "12345678";
Chung-yih Wangf35e9662009-09-29 11:20:28 +080037 private static final String TEST_PASSWD2 = "87654321";
38 private static final String TEST_KEYNAME = "testkey";
39 private static final String TEST_KEYNAME1 = "testkey1";
40 private static final String TEST_KEYNAME2 = "testkey2";
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -070041 private static final byte[] TEST_KEYVALUE = "test value".getBytes(Charsets.UTF_8);
Chung-yih Wangf35e9662009-09-29 11:20:28 +080042
Nick Kralevich34c47c82010-03-09 13:28:14 -080043 // "Hello, World" in Chinese
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -070044 private static final String TEST_I18N_KEY = "\u4F60\u597D, \u4E16\u754C";
45 private static final byte[] TEST_I18N_VALUE = TEST_I18N_KEY.getBytes(Charsets.UTF_8);
Nick Kralevich34c47c82010-03-09 13:28:14 -080046
Chung-yih Wangf35e9662009-09-29 11:20:28 +080047 private KeyStore mKeyStore = null;
48
49 public KeyStoreTest() {
50 super(Activity.class);
51 }
52
53 @Override
54 protected void setUp() throws Exception {
55 mKeyStore = KeyStore.getInstance();
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -070056 if (mKeyStore.state() != KeyStore.State.UNINITIALIZED) {
57 mKeyStore.reset();
58 }
59 assertEquals(KeyStore.State.UNINITIALIZED, mKeyStore.state());
Chung-yih Wangf35e9662009-09-29 11:20:28 +080060 super.setUp();
61 }
62
63 @Override
64 protected void tearDown() throws Exception {
65 mKeyStore.reset();
66 super.tearDown();
67 }
68
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -070069 public void teststate() throws Exception {
70 assertEquals(KeyStore.State.UNINITIALIZED, mKeyStore.state());
Chung-yih Wangf35e9662009-09-29 11:20:28 +080071 }
72
73 public void testPassword() throws Exception {
Chung-yih Wangf35e9662009-09-29 11:20:28 +080074 assertTrue(mKeyStore.password(TEST_PASSWD));
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -070075 assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
Chung-yih Wangf35e9662009-09-29 11:20:28 +080076 }
77
Brian Carlstrombef5e5a2011-06-27 17:22:02 -070078 public void testGet() throws Exception {
79 assertNull(mKeyStore.get(TEST_KEYNAME));
80 mKeyStore.password(TEST_PASSWD);
81 assertNull(mKeyStore.get(TEST_KEYNAME));
82 assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE));
83 assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
84 }
85
Chung-yih Wangf35e9662009-09-29 11:20:28 +080086 public void testPut() throws Exception {
Brian Carlstrombef5e5a2011-06-27 17:22:02 -070087 assertNull(mKeyStore.get(TEST_KEYNAME));
Chung-yih Wangf35e9662009-09-29 11:20:28 +080088 assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE));
89 assertFalse(mKeyStore.contains(TEST_KEYNAME));
90 mKeyStore.password(TEST_PASSWD);
91 assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE));
Brian Carlstrombef5e5a2011-06-27 17:22:02 -070092 assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
Chung-yih Wangf35e9662009-09-29 11:20:28 +080093 }
94
Nick Kralevich34c47c82010-03-09 13:28:14 -080095 public void testI18n() throws Exception {
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -070096 assertFalse(mKeyStore.put(TEST_I18N_KEY, TEST_I18N_VALUE));
97 assertFalse(mKeyStore.contains(TEST_I18N_KEY));
98 mKeyStore.password(TEST_I18N_KEY);
99 assertTrue(mKeyStore.put(TEST_I18N_KEY, TEST_I18N_VALUE));
100 assertTrue(mKeyStore.contains(TEST_I18N_KEY));
Nick Kralevich34c47c82010-03-09 13:28:14 -0800101 }
102
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800103 public void testDelete() throws Exception {
104 assertTrue(mKeyStore.delete(TEST_KEYNAME));
105 mKeyStore.password(TEST_PASSWD);
106 assertTrue(mKeyStore.delete(TEST_KEYNAME));
107
108 mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE);
Brian Carlstrombef5e5a2011-06-27 17:22:02 -0700109 assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800110 assertTrue(mKeyStore.delete(TEST_KEYNAME));
Brian Carlstrombef5e5a2011-06-27 17:22:02 -0700111 assertNull(mKeyStore.get(TEST_KEYNAME));
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800112 }
113
114 public void testContains() throws Exception {
115 assertFalse(mKeyStore.contains(TEST_KEYNAME));
116
117 mKeyStore.password(TEST_PASSWD);
118 assertFalse(mKeyStore.contains(TEST_KEYNAME));
119
120 mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE);
121 assertTrue(mKeyStore.contains(TEST_KEYNAME));
122 }
123
124 public void testSaw() throws Exception {
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -0700125 String[] emptyResult = mKeyStore.saw(TEST_KEYNAME);
126 assertNotNull(emptyResult);
127 assertEquals(0, emptyResult.length);
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800128
129 mKeyStore.password(TEST_PASSWD);
130 mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE);
131 mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE);
132
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -0700133 String[] results = mKeyStore.saw(TEST_KEYNAME);
134 assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
135 TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
136 new HashSet(Arrays.asList(results)));
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800137 }
138
139 public void testLock() throws Exception {
140 assertFalse(mKeyStore.lock());
141
142 mKeyStore.password(TEST_PASSWD);
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -0700143 assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800144
145 assertTrue(mKeyStore.lock());
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -0700146 assertEquals(KeyStore.State.LOCKED, mKeyStore.state());
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800147 }
148
149 public void testUnlock() throws Exception {
150 mKeyStore.password(TEST_PASSWD);
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -0700151 assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800152 mKeyStore.lock();
153
154 assertFalse(mKeyStore.unlock(TEST_PASSWD2));
155 assertTrue(mKeyStore.unlock(TEST_PASSWD));
156 }
Brian Carlstrom5cfee3f2011-05-31 01:00:15 -0700157
158 public void testIsEmpty() throws Exception {
159 assertTrue(mKeyStore.isEmpty());
160 mKeyStore.password(TEST_PASSWD);
161 assertTrue(mKeyStore.isEmpty());
162 mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE);
163 assertFalse(mKeyStore.isEmpty());
164 mKeyStore.reset();
165 assertTrue(mKeyStore.isEmpty());
166 }
Chung-yih Wangf35e9662009-09-29 11:20:28 +0800167}