1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.xnet.provider.jsse;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
213a3511edad46420b4287017ac66fe4783cb804dbJesse Wilsonimport junit.framework.TestCase;
223a3511edad46420b4287017ac66fe4783cb804dbJesse Wilsonimport libcore.javax.net.ssl.FakeSSLSession;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class FileClientSessionCacheTest extends TestCase {
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testMaxSize() throws IOException, InterruptedException {
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String tmpDir = System.getProperty("java.io.tmpdir");
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (tmpDir == null) {
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Please set 'java.io.tmpdir' system property.");
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        File cacheDir = new File(tmpDir
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "/" + FileClientSessionCacheTest.class.getName() + "/cache");
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final SSLClientSessionCache cache
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                = FileClientSessionCache.usingDirectory(cacheDir);
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread[] threads = new Thread[10];
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final int iterations = FileClientSessionCache.MAX_SIZE * 10;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < threads.length; i++) {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            final int id = i;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            threads[i] = new Thread() {
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                @Override
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                public void run() {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    for (int i = 0; i < iterations; i++) {
433a3511edad46420b4287017ac66fe4783cb804dbJesse Wilson                        cache.putSessionData(new FakeSSLSession(id + "" + i), new byte[10]);
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    }
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            };
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
483a3511edad46420b4287017ac66fe4783cb804dbJesse Wilson        for (Thread thread : threads) {
493a3511edad46420b4287017ac66fe4783cb804dbJesse Wilson            thread.start();
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
513a3511edad46420b4287017ac66fe4783cb804dbJesse Wilson        for (Thread thread : threads) {
523a3511edad46420b4287017ac66fe4783cb804dbJesse Wilson            thread.join();
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(FileClientSessionCache.MAX_SIZE, cacheDir.list().length);
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
57