/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2015 ForgeRock AS. */ package com.sun.identity.saml2.profile; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Mockito.when; import org.forgerock.openam.saml2.IDPRequestValidator; import org.forgerock.openam.saml2.IDPSSOFederateRequest; import org.forgerock.openam.saml2.SAML2ActorFactory; import org.forgerock.openam.saml2.SAMLAuthenticator; import org.forgerock.openam.saml2.SAMLAuthenticatorLookup; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; public class IDPSSOFederateTest { @Mock private HttpServletRequest mockRequest; @Mock private HttpServletResponse mockResponse; @Mock private PrintWriter mockPrintWriter; @Mock private FederateCookieRedirector cookieRedirector; @Mock private SAML2ActorFactory actorFactory; @Mock private IDPRequestValidator validator; @Mock private SAMLAuthenticator authenticator; @Mock private SAMLAuthenticatorLookup authenticationLookup; private IDPSSOFederate idpSsoFederateRequest; @BeforeMethod public void initMocks() throws ServerFaultException, ClientFaultException { MockitoAnnotations.initMocks(this); when(actorFactory.getIDPRequestValidator(Mockito.anyString(), anyBoolean())).thenReturn(validator); when(actorFactory.getSAMLAuthenticator( any(IDPSSOFederateRequest.class), any(HttpServletRequest.class), any(HttpServletResponse.class), any(PrintWriter.class), anyBoolean())).thenReturn(authenticator); when(actorFactory.getSAMLAuthenticatorLookup( any(IDPSSOFederateRequest.class), any(HttpServletRequest.class), any(HttpServletResponse.class), any(PrintWriter.class))).thenReturn(authenticationLookup); idpSsoFederateRequest = new IDPSSOFederate(false, cookieRedirector, actorFactory); } @Test public void shouldBeTestable() throws Exception { idpSsoFederateRequest.process(mockRequest, mockResponse, mockPrintWriter, null); } @Test public void shouldNotCallAnyFurtherFunctionsAfterNeedSetLBCookieAndRedirectReturnsTrue() throws Exception { // Arrange when(cookieRedirector.needSetLBCookieAndRedirect( any(HttpServletRequest.class), any(HttpServletResponse.class), anyBoolean())).thenReturn(true); // Act idpSsoFederateRequest.process(mockRequest, mockResponse, mockPrintWriter, null); // Assert Mockito.verifyZeroInteractions(authenticator, authenticationLookup); } @Test public void shouldCallAuthenticateIfThereIsNoRequestId() throws Exception { // Arrange when(mockRequest.getParameter("ReqID")).thenReturn(""); when(cookieRedirector.needSetLBCookieAndRedirect( any(HttpServletRequest.class), any(HttpServletResponse.class), anyBoolean())).thenReturn(false); // Act idpSsoFederateRequest.process(mockRequest, mockResponse, mockPrintWriter, null); // Assert Mockito.verify(authenticator).authenticate(); Mockito.verifyZeroInteractions(authenticationLookup); } @Test public void shouldCallAuthenticateLookupIfThereIsARequestId() throws Exception { // Arrange when(mockRequest.getParameter("ReqID")).thenReturn("12345"); when(cookieRedirector.needSetLBCookieAndRedirect( any(HttpServletRequest.class), any(HttpServletResponse.class), anyBoolean())).thenReturn(false); // Act idpSsoFederateRequest.process(mockRequest, mockResponse, mockPrintWriter, null); // Assert Mockito.verify(authenticationLookup).retrieveAuthenticationFromCache(); Mockito.verifyZeroInteractions(authenticator); } }