package org.apereo.cas.support.saml.authentication.principal; import org.apereo.cas.authentication.CoreAuthenticationTestUtils; import org.apereo.cas.authentication.principal.Response; import org.apereo.cas.authentication.principal.ResponseBuilder; import org.apereo.cas.authentication.principal.ServiceFactory; import org.apereo.cas.support.saml.AbstractOpenSamlTests; import org.apereo.cas.support.saml.SamlProtocolConstants; import org.apereo.cas.support.saml.config.SamlGoogleAppsConfiguration; import org.apereo.cas.util.CompressionUtils; import org.apereo.cas.util.spring.ApplicationContextProvider; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Import; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.TestPropertySource; import java.io.IOException; import static org.junit.Assert.*; /** * Test cases for {@link GoogleAccountsServiceFactory}. * * @author Misagh Moayyed * @since 4.2 */ @Import(SamlGoogleAppsConfiguration.class) @TestPropertySource(locations = "classpath:/gapps.properties") public class GoogleAccountsServiceFactoryTests extends AbstractOpenSamlTests { @Autowired @Qualifier("googleAccountsServiceFactory") private ServiceFactory factory; @Autowired @Qualifier("googleAccountsServiceResponseBuilder") private ResponseBuilder<GoogleAccountsService> googleAccountsServiceResponseBuilder; @Autowired private ApplicationContextProvider applicationContextProvider; @Before public void init() { this.applicationContextProvider.setApplicationContext(this.applicationContext); } @Test public void verifyNoService() { assertNull(factory.createService(new MockHttpServletRequest())); } @Test public void verifyAuthnRequest() throws Exception { final MockHttpServletRequest request = new MockHttpServletRequest(); final String samlRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" " + "ID=\"5545454455\" Version=\"2.0\" IssueInstant=\"Value\" " + "ProtocolBinding=\"urn:oasis:names.tc:SAML:2.0:bindings:HTTP-Redirect\" " + "ProviderName=\"https://localhost:8443/myRutgers\" AssertionConsumerServiceURL=\"https://localhost:8443/myRutgers\"/>"; request.setParameter(SamlProtocolConstants.PARAMETER_SAML_REQUEST, encodeMessage(samlRequest)); final GoogleAccountsService service = (GoogleAccountsService) this.factory.createService(request); service.setPrincipal(CoreAuthenticationTestUtils.getPrincipal()); assertNotNull(service); final Response response = googleAccountsServiceResponseBuilder.build(service, "SAMPLE_TICKET"); assertNotNull(response); } private static String encodeMessage(final String xmlString) throws IOException { return CompressionUtils.deflate(xmlString); } }