/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: SessionManagerTest.java,v 1.1 2005/02/28 13:26:25 rampil Exp $
 */
package org.logical_paradox.common.session;

import java.util.ArrayList;
import java.util.Iterator;

import junit.framework.TestCase;

/**
 * セッションマネージャーのテスト
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.1 $
 */
public class SessionManagerTest extends TestCase {

	/**
	 * Constructor for SessionManagerTest.
	 * @param arg0
	 */
	public SessionManagerTest(String arg0) {
		super(arg0);
	}
	/**
	 * セッションの新規作成テスト
	 */
	public void testCreateNewSession() throws IllegalSessionStateException {
		SessionManager manager = new SessionManager();
		ArrayList sessions = new ArrayList();
		for(int i = 0; i < 100; i++) {
			sessions.add(manager.getSession());
		}

		// 本当にセッションが存在しているかどうか確認
		for(Iterator it = sessions.iterator(); it.hasNext();) {
			Session session = (Session)it.next();
			assertEquals(true, manager.isExists(session.getSessionId()));
			// 削除
			manager.removeSession(session.getSessionId());
		}
		// 削除されたかどうかを確認
		for(Iterator it = sessions.iterator(); it.hasNext();) {
			Session session = (Session)it.next();
			assertEquals(false, manager.isExists(session.getSessionId()));
		}
	}
	/**
	 * セッションの継続テスト
	 * 一度作成されたセッションが同じセッションIDで再度取得できることを確認する
	 */
	public void testContinueSession() throws IllegalSessionStateException {
		SessionManager manager = new SessionManager();
		Session session = manager.getSession("abcdefg");

		assertFalse("abcdefg".equals(session.getSessionId()));

		Session newSession = manager.getSession(session.getSessionId());
		// 同じインスタンスが返るはず
		assertNotNull(newSession);
		assertTrue(newSession == session);
	}
	/**
	 * セッション継続テスト
	 * 指定セッションで問い合わせで存在しない場合、セッションは新しく作成される
	 */
	public void testContinueSessionWithCreate() throws IllegalSessionStateException {
		SessionManager manager = new SessionManager();
		Session session = manager.getSession("abcdefg", true);

		assertNotNull(session);
	}
	/**
	 * セッション継続テスト
	 * 指定セッションで問い合わせで存在しない場合、セッションは作成されない
	 */
	public void testContinueSessionWithoutCreate() throws IllegalSessionStateException {
		SessionManager manager = new SessionManager();
		Session session = manager.getSession("abcdefg", false);

		assertNull(session);
	}
}
