• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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 
17 package com.android.keychain;
18 
19 import static org.mockito.Mockito.mock;
20 import static org.mockito.Mockito.when;
21 
22 import android.security.Credentials;
23 import android.security.KeyStore;
24 import com.android.keychain.internal.KeyInfoProvider;
25 import java.util.concurrent.CancellationException;
26 import java.util.concurrent.ExecutionException;
27 import java.util.concurrent.TimeUnit;
28 import java.util.concurrent.TimeoutException;
29 import org.junit.Assert;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 import org.robolectric.RobolectricTestRunner;
34 import org.robolectric.RuntimeEnvironment;
35 import org.robolectric.annotation.Config;
36 import org.robolectric.shadows.ShadowApplication;
37 
38 @RunWith(RobolectricTestRunner.class)
39 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
40 public final class AliasLoaderTest {
41     private KeyInfoProvider mDummyInfoProvider;
42 
43     @Before
setUp()44     public void setUp() {
45         mDummyInfoProvider =
46                 new KeyInfoProvider() {
47                     public boolean isUserSelectable(String alias) {
48                         return true;
49                     }
50                 };
51     }
52 
53     @Test
testAliasLoader_loadsAllAliases()54     public void testAliasLoader_loadsAllAliases()
55             throws InterruptedException, ExecutionException, CancellationException,
56                     TimeoutException {
57         KeyStore keyStore = mock(KeyStore.class);
58         when(keyStore.list(Credentials.USER_PRIVATE_KEY)).thenReturn(new String[] {"b", "c", "a"});
59 
60         KeyChainActivity.AliasLoader loader =
61                 new KeyChainActivity.AliasLoader(
62                         keyStore, RuntimeEnvironment.application, mDummyInfoProvider);
63         loader.execute();
64 
65         ShadowApplication.runBackgroundTasks();
66         KeyChainActivity.CertificateAdapter result = loader.get(5, TimeUnit.SECONDS);
67         Assert.assertNotNull(result);
68         Assert.assertEquals(3, result.getCount());
69         Assert.assertEquals("a", result.getItem(0));
70         Assert.assertEquals("b", result.getItem(1));
71         Assert.assertEquals("c", result.getItem(2));
72     }
73 
74     @Test
testAliasLoader_copesWithNoAliases()75     public void testAliasLoader_copesWithNoAliases()
76             throws InterruptedException, ExecutionException, CancellationException,
77                     TimeoutException {
78         KeyStore keyStore = mock(KeyStore.class);
79         when(keyStore.list(Credentials.USER_PRIVATE_KEY)).thenReturn(null);
80 
81         KeyChainActivity.AliasLoader loader =
82                 new KeyChainActivity.AliasLoader(
83                         keyStore, RuntimeEnvironment.application, mDummyInfoProvider);
84         loader.execute();
85 
86         ShadowApplication.runBackgroundTasks();
87         KeyChainActivity.CertificateAdapter result = loader.get(5, TimeUnit.SECONDS);
88         Assert.assertNotNull(result);
89         Assert.assertEquals(0, result.getCount());
90     }
91 
92     @Test
testAliasLoader_filtersNonUserSelectableAliases()93     public void testAliasLoader_filtersNonUserSelectableAliases()
94             throws InterruptedException, ExecutionException, CancellationException,
95                     TimeoutException {
96         KeyStore keyStore = mock(KeyStore.class);
97         when(keyStore.list(Credentials.USER_PRIVATE_KEY)).thenReturn(new String[] {"a", "b", "c"});
98         KeyInfoProvider infoProvider = mock(KeyInfoProvider.class);
99         when(infoProvider.isUserSelectable("a")).thenReturn(false);
100         when(infoProvider.isUserSelectable("b")).thenReturn(true);
101         when(infoProvider.isUserSelectable("c")).thenReturn(false);
102 
103         KeyChainActivity.AliasLoader loader =
104                 new KeyChainActivity.AliasLoader(
105                         keyStore, RuntimeEnvironment.application, infoProvider);
106         loader.execute();
107 
108         ShadowApplication.runBackgroundTasks();
109         KeyChainActivity.CertificateAdapter result = loader.get(5, TimeUnit.SECONDS);
110         Assert.assertNotNull(result);
111         Assert.assertEquals(1, result.getCount());
112         Assert.assertEquals("b", result.getItem(0));
113     }
114 }
115