Java tutorial
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.cxf.fediz.service.idp.integrationtests; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.apache.cxf.Bus; import org.apache.cxf.bus.spring.SpringBusFactory; import org.apache.cxf.fediz.service.idp.domain.Application; import org.apache.cxf.fediz.service.idp.domain.Idp; import org.apache.cxf.fediz.service.idp.domain.RequestClaim; import org.apache.cxf.fediz.service.idp.rest.Idps; import org.apache.xml.security.utils.Base64; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; public class RestITTest { private static String idpHttpsPort; private static Bus bus; @BeforeClass public static void init() { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog"); System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true"); System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "info"); System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "info"); System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.webflow", "info"); System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.security.web", "info"); System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.security", "info"); System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.cxf.fediz", "info"); System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.cxf", "info"); idpHttpsPort = System.getProperty("idp.https.port"); Assert.assertNotNull("Property 'idp.https.port' null", idpHttpsPort); SpringBusFactory bf = new SpringBusFactory(); URL busFile = RestITTest.class.getResource("/rest-client.xml"); bus = bf.createBus(busFile.toString()); SpringBusFactory.setDefaultBus(bus); SpringBusFactory.setThreadDefaultBus(bus); } @AfterClass public static void cleanup() { if (bus != null) { bus.shutdown(true); } } @Test public void testGetAllIdps() throws UnsupportedEncodingException, MalformedURLException { String address = "https://localhost:" + idpHttpsPort + "/fediz-idp/services/rs"; Client client = ClientBuilder.newClient(); Idps idps = client.target(address).path("idps").request("application/xml") .header("Authorization", getBasicAuthentication("admin", "password")).get(Idps.class); Assert.assertEquals(1L, idps.getIdps().size()); Idp idp = idps.getIdps().iterator().next(); Assert.assertEquals("Certificate doesn't match", "stsKeystoreA.properties", idp.getCertificate()); Assert.assertEquals("Certificate password doesn't match", "realma", idp.getCertificatePassword()); Assert.assertEquals("Realm doesn't match", "urn:org:apache:cxf:fediz:idp:realm-A", idp.getRealm()); Assert.assertEquals("ServiceDescription doesn't match", "IDP of Realm A", idp.getServiceDescription()); Assert.assertEquals("ServiceDisplayName doesn't match", "REALM A", idp.getServiceDisplayName()); Assert.assertEquals("IdpUrl doesn't match", new URL("https://localhost:9443/fediz-idp/federation"), idp.getIdpUrl()); Assert.assertEquals("StsUrl doesn't match", new URL("https://localhost:9443/fediz-idp-sts/REALMA"), idp.getStsUrl()); Assert.assertEquals("Uri doesn't match", "realma", idp.getUri()); Assert.assertTrue("ProvideIDPList doesn't match", idp.isProvideIdpList()); Assert.assertTrue("UseCurrentIDP doesn't match", idp.isUseCurrentIdp()); Assert.assertEquals("Number of AuthenticationURIs doesn't match", 1, idp.getAuthenticationURIs().size()); Assert.assertEquals("Number of SupportedProtocols doesn't match", 2, idp.getSupportedProtocols().size()); Assert.assertEquals("Number of TokenTypesOffered doesn't match", 2, idp.getTokenTypesOffered().size()); Assert.assertEquals("Number of applications doesn't match", 1, idp.getApplications().size()); Assert.assertEquals("Number of trusted IDPs doesn't match", 1, idp.getTrustedIdps().size()); Assert.assertEquals("Number of claims doesn't match", 4, idp.getClaimTypesOffered().size()); } @Test public void testReadExistingIdpEmbeddedTrustedIdps() throws UnsupportedEncodingException { String address = "https://localhost:" + idpHttpsPort + "/fediz-idp/services/rs"; Client client = ClientBuilder.newClient(); Idp idp = client.target(address).path("idps/").path("urn:org:apache:cxf:fediz:idp:realm-A") .request("application/xml").header("Authorization", getBasicAuthentication("admin", "password")) .get(Idp.class); Assert.assertEquals("", "urn:org:apache:cxf:fediz:idp:realm-A", idp.getRealm()); } @Test public void testAddClaimToApplication() throws UnsupportedEncodingException { String address = "https://localhost:" + idpHttpsPort + "/fediz-idp/services/rs"; Client client = ClientBuilder.newClient(); String realm = "urn:org:apache:cxf:fediz:fedizhelloworld:testaddclaim"; Application application = new Application(); application.setRealm(realm); application.setEncryptionCertificate(""); application.setLifeTime(3600); application.setProtocol("http://docs.oasis-open.org/wsfed/federation/200706"); application.setRole("ApplicationServiceType"); application.setServiceDescription("Fedizhelloworld description"); application.setServiceDisplayName("Fedizhelloworld"); application.setTokenType("http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0"); Response response = client.target(address).path("applications/").request("application/xml") .header("Authorization", getBasicAuthentication("admin", "password")) .post(Entity.entity(application, MediaType.APPLICATION_XML)); Assert.assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); //Testcase RequestClaim requestClaim = new RequestClaim(); requestClaim.setOptional(false); requestClaim.setClaimType(URI.create("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname")); response = client.target(address).path("applications").path(realm).path("claims").request("application/xml") .header("Authorization", getBasicAuthentication("admin", "password")) .post(Entity.entity(requestClaim, MediaType.APPLICATION_XML)); Assert.assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); application = client.target(address).path("applications").path(realm).queryParam("expand", "claims") .request("application/xml").header("Authorization", getBasicAuthentication("admin", "password")) .get(Application.class); Assert.assertEquals("Claims size should be 1 instead of " + application.getRequestedClaims().size(), 1, application.getRequestedClaims().size()); } private String getBasicAuthentication(String username, String password) throws UnsupportedEncodingException { String token = username + ":" + password; return "Basic " + Base64.encode(token.getBytes()); } }