package org.f1x.v1; import org.f1x.SessionIDBean; import org.f1x.api.session.FailedLockException; import org.f1x.api.session.SessionID; import org.f1x.api.session.SessionManager; import org.f1x.api.session.SessionState; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; public class Test_SimpleSessionManager { private SessionManager manager; @Before public void init() { manager = new SimpleSessionManager(); } @Test public void testSuccessfulLocking() { assertSuccessfulLock(new SessionIDBean("s", "t")); assertSuccessfulLock(new SessionIDBean("ss", "tt")); assertSuccessfulLock(new SessionIDBean("sss", "ttt")); } @Test public void testUnsuccessfulLocking() { SessionID sessionID = new SessionIDBean("s", "t"); assertFailedLock(sessionID, "Unregistered session id"); assertSuccessfulLock(sessionID); assertFailedLock(sessionID, "Session id is already used"); simulateUnlock(sessionID); manager.removeSession(sessionID); assertSuccessfulLock(sessionID); } private void simulateUnlock(SessionID sessionID) { manager.unlockSession(sessionID); } private void assertSuccessfulLock(SessionID sessionID) { FixSessionAcceptor expectedAcceptor = createTestSessionAcceptor(sessionID); manager.addSession(expectedAcceptor); FixSessionAcceptor actualAcceptor = null; try { actualAcceptor = manager.lockSession(sessionID); } catch (FailedLockException e) { Assert.fail("Unexpected: " + e); } Assert.assertEquals(expectedAcceptor, actualAcceptor); Assert.assertEquals(expectedAcceptor, manager.getSession(sessionID)); } private void assertFailedLock(SessionID sessionID, String expected) { try { manager.lockSession(sessionID); } catch (FailedLockException e) { Assert.assertEquals(expected, e.getMessage()); } } private static SessionState createTestSessionState() { return Mockito.mock(SessionState.class); } private static FixSessionAcceptor createTestSessionAcceptor(SessionID sessionID) { FixSessionAcceptor acceptor = Mockito.mock(FixSessionAcceptor.class); Mockito.when(acceptor.getSessionID()).thenReturn(sessionID); return acceptor; } }