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