summaryrefslogtreecommitdiffstats
path: root/core/tests
diff options
context:
space:
mode:
Diffstat (limited to 'core/tests')
-rw-r--r--core/tests/coretests/src/android/net/SSLSessionCacheTest.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/core/tests/coretests/src/android/net/SSLSessionCacheTest.java b/core/tests/coretests/src/android/net/SSLSessionCacheTest.java
new file mode 100644
index 0000000..be19303
--- /dev/null
+++ b/core/tests/coretests/src/android/net/SSLSessionCacheTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.net;
+
+import com.android.org.conscrypt.ClientSessionContext;
+import com.android.org.conscrypt.SSLClientSessionCache;
+
+import com.google.testing.littlemock.LittleMock;
+
+import junit.framework.TestCase;
+
+import java.security.KeyManagementException;
+import java.security.SecureRandom;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLContextSpi;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSessionContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+
+public class SSLSessionCacheTest extends TestCase {
+
+ public void testInstall_compatibleContext() throws Exception {
+ final SSLContext ctx = SSLContext.getDefault();
+ final SSLClientSessionCache mock = LittleMock.mock(SSLClientSessionCache.class);
+ final ClientSessionContext clientCtx = (ClientSessionContext) ctx.getClientSessionContext();
+
+ try {
+ SSLSessionCache.install(new SSLSessionCache(mock), ctx);
+ clientCtx.getSession("www.foogle.com", 443);
+ LittleMock.verify(mock).getSessionData(LittleMock.anyString(), LittleMock.anyInt());
+ } finally {
+ // Restore cacheless behaviour.
+ SSLSessionCache.install(null, ctx);
+ clientCtx.getSession("www.foogle.com", 443);
+ LittleMock.verifyNoMoreInteractions(mock);
+ }
+ }
+
+ public void testInstall_incompatibleContext() {
+ try {
+ SSLSessionCache.install(
+ new SSLSessionCache(LittleMock.mock(SSLClientSessionCache.class)),
+ new FakeSSLContext());
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ static final class FakeSSLContext extends SSLContext {
+ protected FakeSSLContext() {
+ super(new FakeSSLContextSpi(), null, "test");
+ }
+ }
+
+ static final class FakeSSLContextSpi extends SSLContextSpi {
+ @Override
+ protected void engineInit(KeyManager[] keyManagers, TrustManager[] trustManagers,
+ SecureRandom secureRandom) throws KeyManagementException {
+ }
+
+ @Override
+ protected SSLSocketFactory engineGetSocketFactory() {
+ return null;
+ }
+
+ @Override
+ protected SSLServerSocketFactory engineGetServerSocketFactory() {
+ return null;
+ }
+
+ @Override
+ protected SSLEngine engineCreateSSLEngine(String s, int i) {
+ return null;
+ }
+
+ @Override
+ protected SSLEngine engineCreateSSLEngine() {
+ return null;
+ }
+
+ @Override
+ protected SSLSessionContext engineGetServerSessionContext() {
+ return null;
+ }
+
+ @Override
+ protected SSLSessionContext engineGetClientSessionContext() {
+ return LittleMock.mock(SSLSessionContext.class);
+ }
+ }
+}