/*
 * Copyright (C) 2009 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 org.apache.harmony.xnet.provider.jsse;

import junit.framework.TestCase;

import javax.net.ssl.SSLSession;
import java.util.Enumeration;
import java.util.Set;
import java.util.HashSet;

public class ClientSessionContextTest extends TestCase {

    public void testGetSessionById() {
        ClientSessionContext context = new ClientSessionContext(null, null);

        SSLSession a = new FakeSession("a");
        SSLSession b = new FakeSession("b");

        context.putSession(a);
        context.putSession(b);

        assertSame(a, context.getSession("a".getBytes()));
        assertSame(b, context.getSession("b".getBytes()));

        assertSame(a, context.getSession("a", 443));
        assertSame(b, context.getSession("b", 443));

        assertEquals(2, context.sessions.size());

        Set<SSLSession> sessions = new HashSet<SSLSession>();
        Enumeration ids = context.getIds();
        while (ids.hasMoreElements()) {
            sessions.add(context.getSession((byte[]) ids.nextElement()));
        }

        Set<SSLSession> expected = new HashSet<SSLSession>();
        expected.add(a);
        expected.add(b);

        assertEquals(expected, sessions);
    }

    public void testTrimToSize() {
        ClientSessionContext context = new ClientSessionContext(null, null);

        FakeSession a = new FakeSession("a");
        FakeSession b = new FakeSession("b");
        FakeSession c = new FakeSession("c");
        FakeSession d = new FakeSession("d");

        context.putSession(a);
        context.putSession(b);
        context.putSession(c);
        context.putSession(d);

        context.setSessionCacheSize(2);

        Set<SSLSession> sessions = new HashSet<SSLSession>();
        Enumeration ids = context.getIds();
        while (ids.hasMoreElements()) {
            sessions.add(context.getSession((byte[]) ids.nextElement()));
        }

        Set<SSLSession> expected = new HashSet<SSLSession>();
        expected.add(c);
        expected.add(d);

        assertEquals(expected, sessions);
    }

}
