537857b204a4425e0ea257b0413a02c5c7c5e266Robert Wapshott/*
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * The contents of this file are subject to the terms of the Common Development and
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * Distribution License (the License). You may not use this file except in compliance with the
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * License.
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott *
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * specific language governing permission and limitations under the License.
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott *
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * When distributing Covered Software, include this CDDL Header Notice in each file and include
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * Header, with the fields enclosed by brackets [] replaced by your own identifying
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott * information: "Portions copyright [year] [name of copyright owner]".
537857b204a4425e0ea257b0413a02c5c7c5e266Robert Wapshott *
cf70c5c2491ffe5d23f570d4b92a1e8baa73fd42Craig McDonnell * Copyright 2013-2015 ForgeRock AS.
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott */
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottpackage com.iplanet.dpro.session.operations.strategies;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport com.iplanet.dpro.session.Session;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport com.iplanet.dpro.session.SessionException;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport com.iplanet.dpro.session.SessionID;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport com.iplanet.dpro.session.service.InternalSession;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport com.iplanet.dpro.session.service.SessionService;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport com.iplanet.dpro.session.share.SessionInfo;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport com.iplanet.dpro.session.utils.SessionInfoFactory;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport com.sun.identity.shared.debug.Debug;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport org.forgerock.openam.cts.CTSPersistentStore;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport org.forgerock.openam.cts.adapters.SessionAdapter;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport org.forgerock.openam.cts.api.tokens.Token;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport org.forgerock.openam.cts.api.tokens.TokenIdFactory;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport org.forgerock.openam.cts.exceptions.CoreTokenException;
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnellimport org.forgerock.openam.cts.exceptions.ReadFailedException;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport org.testng.annotations.BeforeMethod;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottimport org.testng.annotations.Test;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnellimport java.io.IOException;
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamfordimport static org.fest.assertions.Assertions.*;
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamfordimport static org.mockito.BDDMockito.*;
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamfordimport static org.mockito.Mockito.any;
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamfordimport static org.mockito.Mockito.anyString;
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamfordimport static org.mockito.Mockito.doThrow;
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamfordimport static org.mockito.Mockito.eq;
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamfordimport static org.mockito.Mockito.mock;
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamfordimport static org.mockito.Mockito.verify;
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshottpublic class CTSOperationsTest {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott private CTSPersistentStore mockCTS;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott private SessionAdapter mockAdapter;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott private TokenIdFactory mockIdFactory;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott private SessionInfoFactory mockInfoFactory;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott private SessionService mockSessionService;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott private CTSOperations ctsOperations;
6b0b9411405932b5ada376bb06d6bc3d94980d7fPeter Major private Session mockRequester;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott private Session mockSession;
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell private RemoteOperations mockRemote;
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @BeforeMethod
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott public void setUp() throws Exception {
6b0b9411405932b5ada376bb06d6bc3d94980d7fPeter Major mockRequester = mock(Session.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott mockSession = mock(Session.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott mockCTS = mock(CTSPersistentStore.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott mockAdapter = mock(SessionAdapter.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott mockIdFactory = mock(TokenIdFactory.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott mockInfoFactory = mock(SessionInfoFactory.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott mockSessionService = mock(SessionService.class);
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell mockRemote = mock(RemoteOperations.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott SessionID mockSessionID = mock(SessionID.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockSession.getID()).willReturn(mockSessionID);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockIdFactory.toSessionTokenId(any(SessionID.class))).willReturn("TEST");
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford ctsOperations = new CTSOperations(mockCTS, mockAdapter, mockIdFactory, mockInfoFactory, mockSessionService,
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford mockRemote, mock(Debug.class));
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @Test
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott public void shouldReadTokenFromCTS() throws CoreTokenException, SessionException {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Given
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott Token mockToken = mock(Token.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockCTS.read(anyString())).willReturn(mockToken);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott InternalSession mockInternalSession = mock(InternalSession.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockAdapter.fromToken(eq(mockToken))).willReturn(mockInternalSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott SessionInfo mockSessionInfo = mock(SessionInfo.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockInfoFactory.getSessionInfo(eq(mockInternalSession), any(SessionID.class))).willReturn(mockSessionInfo);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // When
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott SessionInfo result = ctsOperations.refresh(mockSession, false);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Then
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott assertThat(result).isEqualTo(mockSessionInfo);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell @Test
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell public void shouldReadTokenFromRemoteWhenCTSFails() throws CoreTokenException, SessionException {
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell // Given
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell given(mockCTS.read(anyString())).willThrow(new ReadFailedException("id", new IOException()));
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell SessionInfo mockSessionInfo = mock(SessionInfo.class);
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell given(mockRemote.refresh(mockSession, false)).willReturn(mockSessionInfo);
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell // When
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell SessionInfo result = ctsOperations.refresh(mockSession, false);
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell // Then
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell assertThat(result).isEqualTo(mockSessionInfo);
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell }
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @Test
194cca51371bdb50fe6798b2f5cb1d965dc96879Craig McDonnell public void shouldResetLastAccessTimeRemotely() throws CoreTokenException, SessionException {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Given
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott Token mockToken = mock(Token.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockCTS.read(anyString())).willReturn(mockToken);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott InternalSession mockInternalSession = mock(InternalSession.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockAdapter.fromToken(eq(mockToken))).willReturn(mockInternalSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // When
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott ctsOperations.refresh(mockSession, true);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Then
194cca51371bdb50fe6798b2f5cb1d965dc96879Craig McDonnell verify(mockRemote).refresh(mockSession, true);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @Test (expectedExceptions = SessionException.class)
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott public void shouldThrowExceptionOnReadError() throws CoreTokenException, SessionException {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Given
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockCTS.read(anyString())).willThrow(new CoreTokenException(""));
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // When / Then Throw
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott ctsOperations.refresh(mockSession, false);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford @Test(expectedExceptions = SessionException.class)
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford public void shouldDThrowExceptionWhenGivenLocalSession() throws SessionException {
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford // Given
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford SessionID mockSessionID = mock(SessionID.class);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford given(mockSession.getID()).willReturn(mockSessionID);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford given(mockSessionService.checkSessionLocal(mockSessionID)).willReturn(true);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford // When
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford ctsOperations.logout(mockSession);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford }
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @Test
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford public void shouldDeleteRemoteTokenDuringLogout() throws SessionException, CoreTokenException {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Given
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott SessionID mockSessionID = mock(SessionID.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockSession.getID()).willReturn(mockSessionID);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford given(mockSessionService.checkSessionLocal(mockSessionID)).willReturn(false);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // When
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott ctsOperations.logout(mockSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Then
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford verify(mockRemote).logout(mockSession);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford }
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford @Test(expectedExceptions = SessionException.class)
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford public void shouldNotDeleteLocalTokenDuringLogout() throws SessionException, CoreTokenException {
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford // Given
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford SessionID mockSessionID = mock(SessionID.class);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford given(mockSession.getID()).willReturn(mockSessionID);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford given(mockSessionService.checkSessionLocal(mockSessionID)).willReturn(true);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford // When
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford ctsOperations.logout(mockSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @Test
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford public void shouldOnlyDeleteTokenRemotelyDuringDestroy() throws Exception {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Given
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott SessionID mockSessionID = mock(SessionID.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockSession.getID()).willReturn(mockSessionID);
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford given(mockSessionService.checkSessionLocal(mockSessionID)).willReturn(false);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // When
6b0b9411405932b5ada376bb06d6bc3d94980d7fPeter Major ctsOperations.destroy(mockRequester, mockSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Then
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford verify(mockRemote).destroy(mockRequester, mockSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @Test (expectedExceptions = SessionException.class)
537857b204a4425e0ea257b0413a02c5c7c5e266Robert Wapshott public void shouldThrowExceptionWhenDeleteFails() throws CoreTokenException, SessionException {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Given
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott SessionID mockSessionID = mock(SessionID.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockSession.getID()).willReturn(mockSessionID);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford doThrow(new SessionException("")).when(mockRemote).logout(mockSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // When / Then Throw
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott ctsOperations.logout(mockSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @Test
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford public void shouldInvokeRemoteActionDuringSetProperty() throws SessionException, CoreTokenException {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Given
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott String name = "name";
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott String value = "value";
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott SessionID mockSessionID = mock(SessionID.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockSession.getID()).willReturn(mockSessionID);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott Token mockToken = mock(Token.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockCTS.read(anyString())).willReturn(mockToken);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott InternalSession mockInternalSession = mock(InternalSession.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockAdapter.fromToken(eq(mockToken))).willReturn(mockInternalSession);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // When
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott ctsOperations.setProperty(mockSession, name, value);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Then
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford verify(mockRemote).setProperty(mockSession, name, value);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford @Test
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford public void shouldCallRemoteSetPropertyDuringSetProperty() throws SessionException {
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // Given
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott SessionID mockSessionID = mock(SessionID.class);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott given(mockSession.getID()).willReturn(mockSessionID);
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott // When / Then Throw
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford ctsOperations.setProperty(mockSession, "a", "b");
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott
e318291839fadfb3aa58d0c858f1b0f28bcfb33bTony Bamford verify(mockRemote).setProperty(mockSession, "a", "b");
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott }
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott}