blob: be193032d703fa80fe8295f471d9226163ed4e63 [file] [log] [blame]
Narayan Kamathd6b37fd2013-09-09 18:23:27 +01001/*
2 * Copyright (C) 2013 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.net;
18
19import com.android.org.conscrypt.ClientSessionContext;
20import com.android.org.conscrypt.SSLClientSessionCache;
21
22import com.google.testing.littlemock.LittleMock;
23
24import junit.framework.TestCase;
25
26import java.security.KeyManagementException;
27import java.security.SecureRandom;
28
29import javax.net.ssl.KeyManager;
30import javax.net.ssl.SSLContext;
31import javax.net.ssl.SSLContextSpi;
32import javax.net.ssl.SSLEngine;
33import javax.net.ssl.SSLServerSocketFactory;
34import javax.net.ssl.SSLSessionContext;
35import javax.net.ssl.SSLSocketFactory;
36import javax.net.ssl.TrustManager;
37
38public class SSLSessionCacheTest extends TestCase {
39
40 public void testInstall_compatibleContext() throws Exception {
41 final SSLContext ctx = SSLContext.getDefault();
42 final SSLClientSessionCache mock = LittleMock.mock(SSLClientSessionCache.class);
43 final ClientSessionContext clientCtx = (ClientSessionContext) ctx.getClientSessionContext();
44
45 try {
46 SSLSessionCache.install(new SSLSessionCache(mock), ctx);
47 clientCtx.getSession("www.foogle.com", 443);
48 LittleMock.verify(mock).getSessionData(LittleMock.anyString(), LittleMock.anyInt());
49 } finally {
50 // Restore cacheless behaviour.
51 SSLSessionCache.install(null, ctx);
52 clientCtx.getSession("www.foogle.com", 443);
53 LittleMock.verifyNoMoreInteractions(mock);
54 }
55 }
56
57 public void testInstall_incompatibleContext() {
58 try {
59 SSLSessionCache.install(
60 new SSLSessionCache(LittleMock.mock(SSLClientSessionCache.class)),
61 new FakeSSLContext());
62 fail();
63 } catch (IllegalArgumentException expected) {}
64 }
65
66 static final class FakeSSLContext extends SSLContext {
67 protected FakeSSLContext() {
68 super(new FakeSSLContextSpi(), null, "test");
69 }
70 }
71
72 static final class FakeSSLContextSpi extends SSLContextSpi {
73 @Override
74 protected void engineInit(KeyManager[] keyManagers, TrustManager[] trustManagers,
75 SecureRandom secureRandom) throws KeyManagementException {
76 }
77
78 @Override
79 protected SSLSocketFactory engineGetSocketFactory() {
80 return null;
81 }
82
83 @Override
84 protected SSLServerSocketFactory engineGetServerSocketFactory() {
85 return null;
86 }
87
88 @Override
89 protected SSLEngine engineCreateSSLEngine(String s, int i) {
90 return null;
91 }
92
93 @Override
94 protected SSLEngine engineCreateSSLEngine() {
95 return null;
96 }
97
98 @Override
99 protected SSLSessionContext engineGetServerSessionContext() {
100 return null;
101 }
102
103 @Override
104 protected SSLSessionContext engineGetClientSessionContext() {
105 return LittleMock.mock(SSLSessionContext.class);
106 }
107 }
108}