1860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root/* 2860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * Copyright (C) 2009 The Android Open Source Project 3860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * 4860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * you may not use this file except in compliance with the License. 6860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * You may obtain a copy of the License at 7860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * 8860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 9860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * 10860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * Unless required by applicable law or agreed to in writing, software 11860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * See the License for the specific language governing permissions and 14860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root * limitations under the License. 15860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root */ 16860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root 17860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Rootpackage org.conscrypt; 18860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root 19860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Rootimport java.io.File; 20860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Rootimport java.io.IOException; 21860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Rootimport junit.framework.TestCase; 22860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Rootimport libcore.javax.net.ssl.FakeSSLSession; 23860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root 24860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Rootpublic class FileClientSessionCacheTest extends TestCase { 25860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root 26860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root public void testMaxSize() throws IOException, InterruptedException { 27860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root String tmpDir = System.getProperty("java.io.tmpdir"); 28860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root if (tmpDir == null) { 29860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root fail("Please set 'java.io.tmpdir' system property."); 30860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root } 31860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root File cacheDir = new File(tmpDir 32860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root + "/" + FileClientSessionCacheTest.class.getName() + "/cache"); 33860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root final SSLClientSessionCache cache 34860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root = FileClientSessionCache.usingDirectory(cacheDir); 35860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root Thread[] threads = new Thread[10]; 36860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root final int iterations = FileClientSessionCache.MAX_SIZE * 10; 37860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root for (int i = 0; i < threads.length; i++) { 38860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root final int id = i; 39860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root threads[i] = new Thread() { 40860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root @Override 41860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root public void run() { 42860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root for (int i = 0; i < iterations; i++) { 43860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root cache.putSessionData(new FakeSSLSession(id + "" + i), new byte[10]); 44860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root } 45860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root } 46860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root }; 47860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root } 48860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root for (Thread thread : threads) { 49860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root thread.start(); 50860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root } 51860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root for (Thread thread : threads) { 52860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root thread.join(); 53860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root } 54860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root assertEquals(FileClientSessionCache.MAX_SIZE, cacheDir.list().length); 55860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root } 56860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root} 57