Repository: cxf-fediz Updated Branches: refs/heads/master 940c54a65 -> 79c744df1
Upgrading system tests to use newer HttpClient API Project: http://git-wip-us.apache.org/repos/asf/cxf-fediz/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf-fediz/commit/79c744df Tree: http://git-wip-us.apache.org/repos/asf/cxf-fediz/tree/79c744df Diff: http://git-wip-us.apache.org/repos/asf/cxf-fediz/diff/79c744df Branch: refs/heads/master Commit: 79c744df1824893331f73f03358c047d7f4f0433 Parents: 940c54a Author: Colm O hEigeartaigh <[email protected]> Authored: Thu Jul 10 17:44:35 2014 +0100 Committer: Colm O hEigeartaigh <[email protected]> Committed: Thu Jul 10 17:44:35 2014 +0100 ---------------------------------------------------------------------- .../fediz/integrationtests/AbstractTests.java | 141 ++------------- .../fediz/integrationtests/HTTPTestUtils.java | 176 +++++++++++++++++++ .../cxf/fediz/integrationtests/BadWReqTest.java | 125 +------------ .../cxf/fediz/integrationtests/TomcatTest.java | 121 +------------ .../cxf/fediz/integrationtests/WReqTest.java | 125 +------------ 5 files changed, 190 insertions(+), 498 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/79c744df/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/AbstractTests.java ---------------------------------------------------------------------- diff --git a/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/AbstractTests.java b/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/AbstractTests.java index b2e80f3..f2b715a 100644 --- a/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/AbstractTests.java +++ b/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/AbstractTests.java @@ -19,33 +19,7 @@ package org.apache.cxf.fediz.integrationtests; -import java.io.File; -import java.io.FileInputStream; -import java.security.KeyStore; -import java.util.ArrayList; -import java.util.List; - -import net.htmlparser.jericho.Element; -import net.htmlparser.jericho.FormField; -import net.htmlparser.jericho.FormFields; -import net.htmlparser.jericho.HTMLElementName; -import net.htmlparser.jericho.Source; import org.apache.cxf.fediz.core.ClaimTypes; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.client.LaxRedirectStrategy; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; import org.junit.Assert; public abstract class AbstractTests { @@ -65,7 +39,8 @@ public abstract class AbstractTests { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/fedservlet"; String user = "alice"; String password = "ecila"; - String response = sendHttpGet(url, user, password); + String response = + HTTPTestUtils.sendHttpGet(url, user, password, Integer.parseInt(getIdpHttpsPort())); Assert.assertTrue("Principal not " + user, response.indexOf("userPrincipal=" + user) > 0); Assert.assertTrue("User " + user + " does not have role Admin", response.indexOf("role:Admin=false") > 0); @@ -89,7 +64,8 @@ public abstract class AbstractTests { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/fedservlet"; String user = "bob"; String password = "bob"; - String response = sendHttpGet(url, user, password); + String response = + HTTPTestUtils.sendHttpGet(url, user, password, Integer.parseInt(getIdpHttpsPort())); Assert.assertTrue("Principal not " + user, response.indexOf("userPrincipal=" + user) > 0); Assert.assertTrue("User " + user + " does not have role Admin", response.indexOf("role:Admin=true") > 0); @@ -112,7 +88,8 @@ public abstract class AbstractTests { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/fedservlet"; String user = "ted"; String password = "det"; - String response = sendHttpGet(url, user, password); + String response = + HTTPTestUtils.sendHttpGet(url, user, password, Integer.parseInt(getIdpHttpsPort())); Assert.assertTrue("Principal not " + user, response.indexOf("userPrincipal=" + user) > 0); Assert.assertTrue("User " + user + " does not have role Admin", response.indexOf("role:Admin=false") > 0); @@ -135,18 +112,17 @@ public abstract class AbstractTests { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/admin/fedservlet"; String user = "alice"; String password = "ecila"; - sendHttpGet(url, user, password, 200, 403); + HTTPTestUtils.sendHttpGet(url, user, password, 200, 403, Integer.parseInt(getIdpHttpsPort())); } -// @org.junit.Ignore @org.junit.Test public void testUserAliceWrongPassword() throws Exception { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/fedservlet"; String user = "alice"; String password = "alice"; -// sendHttpGet(url, user, password, 500, 0); + // sendHttpGet(url, user, password, 500, 0); //[FIXED] Fix IDP return code from 500 to 401 - sendHttpGet(url, user, password, 401, 0); + HTTPTestUtils.sendHttpGet(url, user, password, 401, 0, Integer.parseInt(getIdpHttpsPort())); } @org.junit.Test @@ -154,105 +130,8 @@ public abstract class AbstractTests { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/admin/fedservlet"; String user = "ted"; String password = "det"; - sendHttpGet(url, user, password, 200, 403); - } - - private String sendHttpGet(String url, String user, String password) throws Exception { - return sendHttpGet(url, user, password, 200, 200); + HTTPTestUtils.sendHttpGet(url, user, password, 200, 403, Integer.parseInt(getIdpHttpsPort())); } - private String sendHttpGet(String url, String user, String password, int returnCodeIDP, int returnCodeRP) - throws Exception { - DefaultHttpClient httpclient = new DefaultHttpClient(); - try { - httpclient.getCredentialsProvider().setCredentials( - new AuthScope("localhost", Integer.parseInt(getIdpHttpsPort())), - new UsernamePasswordCredentials(user, password)); - - KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - FileInputStream instream = new FileInputStream(new File("./target/test-classes/client.jks")); - try { - trustStore.load(instream, "clientpass".toCharArray()); - } finally { - try { - instream.close(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); - Scheme schIdp = new Scheme("https", Integer.parseInt(getIdpHttpsPort()), socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(schIdp); - Scheme schRp = new Scheme("https", Integer.parseInt(getRpHttpsPort()), socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(schRp); - - HttpGet httpget = new HttpGet(url); - - HttpResponse response = httpclient.execute(httpget); - HttpEntity entity = response.getEntity(); - - System.out.println(response.getStatusLine()); - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - Assert.assertTrue("IDP HTTP Response code: " + response.getStatusLine().getStatusCode() - + " [Expected: " + returnCodeIDP + "]", - returnCodeIDP == response.getStatusLine().getStatusCode()); - - if (response.getStatusLine().getStatusCode() != 200) { - return null; - } - - // Redirect to a POST is not supported without user interaction - // http://www.ietf.org/rfc/rfc2616.txt - // If the 301 status code is received in response to a request other - // than GET or HEAD, the user agent MUST NOT automatically redirect the - // request unless it can be confirmed by the user, since this might - // change the conditions under which the request was issued. - - httpclient.setRedirectStrategy(new LaxRedirectStrategy()); - - Source source = new Source(EntityUtils.toString(entity)); - List <NameValuePair> nvps = new ArrayList <NameValuePair>(); - FormFields formFields = source.getFormFields(); - - List<Element> forms = source.getAllElements(HTMLElementName.FORM); - Assert.assertEquals("Only one form expected but got " + forms.size(), 1, forms.size()); - String postUrl = forms.get(0).getAttributeValue("action"); - - Assert.assertNotNull("Form field 'wa' not found", formFields.get("wa")); - Assert.assertNotNull("Form field 'wresult' not found", formFields.get("wresult")); - - for (FormField formField : formFields) { - if (formField.getUserValueCount() != 0) { - nvps.add(new BasicNameValuePair(formField.getName(), - formField.getValues().get(0))); - } - } - HttpPost httppost = new HttpPost(postUrl); - httppost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); - - response = httpclient.execute(httppost); - - entity = response.getEntity(); - System.out.println(response.getStatusLine()); - Assert.assertTrue("RP HTTP Response code: " + response.getStatusLine().getStatusCode() - + " [Expected: " + returnCodeRP + "]", - returnCodeRP == response.getStatusLine().getStatusCode()); - - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - - return EntityUtils.toString(entity); - } finally { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - } - - } } http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/79c744df/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/HTTPTestUtils.java ---------------------------------------------------------------------- diff --git a/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/HTTPTestUtils.java b/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/HTTPTestUtils.java new file mode 100644 index 0000000..af57bd1 --- /dev/null +++ b/systests/tests/src/test/java/org/apache/cxf/fediz/integrationtests/HTTPTestUtils.java @@ -0,0 +1,176 @@ +/** + * 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.integrationtests; + +import java.io.File; +import java.io.FileInputStream; +import java.security.KeyStore; +import java.util.ArrayList; +import java.util.List; + +import javax.net.ssl.SSLContext; + +import net.htmlparser.jericho.Element; +import net.htmlparser.jericho.FormField; +import net.htmlparser.jericho.FormFields; +import net.htmlparser.jericho.HTMLElementName; +import net.htmlparser.jericho.Source; + +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContextBuilder; +import org.apache.http.conn.ssl.TrustSelfSignedStrategy; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.LaxRedirectStrategy; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.junit.Assert; + +/** + * Some basic HTTP-based functionality for use in the tests + */ +public final class HTTPTestUtils { + + private HTTPTestUtils() { + // complete + } + + public static String sendHttpGet(String url, String user, + String password, int idpPort) throws Exception { + return sendHttpGet(url, user, password, 200, 200, idpPort); + } + + public static String sendHttpGet(String url, String user, String password, + int returnCodeIDP, int returnCodeRP, int idpPort) + throws Exception { + + CloseableHttpClient httpClient = null; + try { + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials( + new AuthScope("localhost", idpPort), + new UsernamePasswordCredentials(user, password)); + + KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); + FileInputStream instream = new FileInputStream(new File("./target/test-classes/client.jks")); + try { + trustStore.load(instream, "clientpass".toCharArray()); + } finally { + try { + instream.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + SSLContextBuilder sslContextBuilder = new SSLContextBuilder(); + sslContextBuilder.loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()); + sslContextBuilder.loadKeyMaterial(trustStore, "clientpass".toCharArray()); + + SSLContext sslContext = sslContextBuilder.build(); + SSLConnectionSocketFactory sslSocketFactory = + new SSLConnectionSocketFactory(sslContext); + + HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); + httpClientBuilder.setDefaultCredentialsProvider(credsProvider); + httpClientBuilder.setSSLSocketFactory(sslSocketFactory); + httpClientBuilder.setRedirectStrategy(new LaxRedirectStrategy()); + + httpClient = httpClientBuilder.build(); + + HttpGet httpget = new HttpGet(url); + + HttpResponse response = httpClient.execute(httpget); + HttpEntity entity = response.getEntity(); + + System.out.println(response.getStatusLine()); + if (entity != null) { + System.out.println("Response content length: " + entity.getContentLength()); + } + Assert.assertTrue("IDP HTTP Response code: " + response.getStatusLine().getStatusCode() + + " [Expected: " + returnCodeIDP + "]", + returnCodeIDP == response.getStatusLine().getStatusCode()); + + if (response.getStatusLine().getStatusCode() != 200) { + return null; + } + + // Redirect to a POST is not supported without user interaction + // http://www.ietf.org/rfc/rfc2616.txt + // If the 301 status code is received in response to a request other + // than GET or HEAD, the user agent MUST NOT automatically redirect the + // request unless it can be confirmed by the user, since this might + // change the conditions under which the request was issued. + + Source source = new Source(EntityUtils.toString(entity)); + List <NameValuePair> nvps = new ArrayList <NameValuePair>(); + FormFields formFields = source.getFormFields(); + + List<Element> forms = source.getAllElements(HTMLElementName.FORM); + Assert.assertEquals("Only one form expected but got " + forms.size(), 1, forms.size()); + String postUrl = forms.get(0).getAttributeValue("action"); + + Assert.assertNotNull("Form field 'wa' not found", formFields.get("wa")); + Assert.assertNotNull("Form field 'wresult' not found", formFields.get("wresult")); + + for (FormField formField : formFields) { + if (formField.getUserValueCount() != 0) { + nvps.add(new BasicNameValuePair(formField.getName(), + formField.getValues().get(0))); + } + } + HttpPost httppost = new HttpPost(postUrl); + httppost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); + + response = httpClient.execute(httppost); + + entity = response.getEntity(); + System.out.println(response.getStatusLine()); + Assert.assertTrue("RP HTTP Response code: " + response.getStatusLine().getStatusCode() + + " [Expected: " + returnCodeRP + "]", + returnCodeRP == response.getStatusLine().getStatusCode()); + + if (entity != null) { + System.out.println("Response content length: " + entity.getContentLength()); + } + + return EntityUtils.toString(entity); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + if (httpClient != null) { + httpClient.close(); + } + } + } + +} http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/79c744df/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/BadWReqTest.java ---------------------------------------------------------------------- diff --git a/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/BadWReqTest.java b/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/BadWReqTest.java index 0c9d7fb..71d684c 100644 --- a/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/BadWReqTest.java +++ b/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/BadWReqTest.java @@ -21,37 +21,12 @@ package org.apache.cxf.fediz.integrationtests; import java.io.File; -import java.io.FileInputStream; -import java.security.KeyStore; -import java.util.ArrayList; -import java.util.List; - -import net.htmlparser.jericho.Element; -import net.htmlparser.jericho.FormField; -import net.htmlparser.jericho.FormFields; -import net.htmlparser.jericho.HTMLElementName; -import net.htmlparser.jericho.Source; import org.apache.catalina.Context; import org.apache.catalina.LifecycleState; import org.apache.catalina.connector.Connector; import org.apache.catalina.startup.Tomcat; import org.apache.cxf.fediz.tomcat.FederationAuthenticator; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.client.LaxRedirectStrategy; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -209,105 +184,7 @@ public class BadWReqTest { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/fedservlet"; String user = "alice"; String password = "ecila"; - sendHttpGet(url, user, password); + HTTPTestUtils.sendHttpGet(url, user, password, 500, 403, Integer.parseInt(getIdpHttpsPort())); } - private String sendHttpGet(String url, String user, String password) throws Exception { - return sendHttpGet(url, user, password, 500, 403); - } - - private String sendHttpGet(String url, String user, String password, int returnCodeIDP, int returnCodeRP) - throws Exception { - DefaultHttpClient httpclient = new DefaultHttpClient(); - try { - httpclient.getCredentialsProvider().setCredentials( - new AuthScope("localhost", Integer.parseInt(getIdpHttpsPort())), - new UsernamePasswordCredentials(user, password)); - - KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - FileInputStream instream = new FileInputStream(new File("./target/test-classes/client.jks")); - try { - trustStore.load(instream, "clientpass".toCharArray()); - } finally { - try { - instream.close(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); - Scheme schIdp = new Scheme("https", Integer.parseInt(getIdpHttpsPort()), socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(schIdp); - Scheme schRp = new Scheme("https", Integer.parseInt(getRpHttpsPort()), socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(schRp); - - HttpGet httpget = new HttpGet(url); - - HttpResponse response = httpclient.execute(httpget); - HttpEntity entity = response.getEntity(); - - System.out.println(response.getStatusLine()); - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - Assert.assertTrue("IDP HTTP Response code: " + response.getStatusLine().getStatusCode() - + " [Expected: " + returnCodeIDP + "]", - returnCodeIDP == response.getStatusLine().getStatusCode()); - - if (response.getStatusLine().getStatusCode() != 200) { - return null; - } - - // Redirect to a POST is not supported without user interaction - // http://www.ietf.org/rfc/rfc2616.txt - // If the 301 status code is received in response to a request other - // than GET or HEAD, the user agent MUST NOT automatically redirect the - // request unless it can be confirmed by the user, since this might - // change the conditions under which the request was issued. - - httpclient.setRedirectStrategy(new LaxRedirectStrategy()); - - Source source = new Source(EntityUtils.toString(entity)); - List <NameValuePair> nvps = new ArrayList <NameValuePair>(); - FormFields formFields = source.getFormFields(); - - List<Element> forms = source.getAllElements(HTMLElementName.FORM); - Assert.assertEquals("Only one form expected but got " + forms.size(), 1, forms.size()); - String postUrl = forms.get(0).getAttributeValue("action"); - - Assert.assertNotNull("Form field 'wa' not found", formFields.get("wa")); - Assert.assertNotNull("Form field 'wresult' not found", formFields.get("wresult")); - - for (FormField formField : formFields) { - if (formField.getUserValueCount() != 0) { - nvps.add(new BasicNameValuePair(formField.getName(), - formField.getValues().get(0))); - } - } - HttpPost httppost = new HttpPost(postUrl); - httppost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); - - response = httpclient.execute(httppost); - - entity = response.getEntity(); - System.out.println(response.getStatusLine()); - Assert.assertTrue("RP HTTP Response code: " + response.getStatusLine().getStatusCode() - + " [Expected: " + returnCodeRP + "]", - returnCodeRP == response.getStatusLine().getStatusCode()); - - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - - return EntityUtils.toString(entity); - } finally { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - } - - } - } http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/79c744df/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/TomcatTest.java ---------------------------------------------------------------------- diff --git a/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/TomcatTest.java b/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/TomcatTest.java index cd83d0b..163c97b 100644 --- a/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/TomcatTest.java +++ b/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/TomcatTest.java @@ -21,16 +21,6 @@ package org.apache.cxf.fediz.integrationtests; import java.io.File; -import java.io.FileInputStream; -import java.security.KeyStore; -import java.util.ArrayList; -import java.util.List; - -import net.htmlparser.jericho.Element; -import net.htmlparser.jericho.FormField; -import net.htmlparser.jericho.FormFields; -import net.htmlparser.jericho.HTMLElementName; -import net.htmlparser.jericho.Source; import org.apache.catalina.Context; import org.apache.catalina.LifecycleState; @@ -38,21 +28,6 @@ import org.apache.catalina.connector.Connector; import org.apache.catalina.startup.Tomcat; import org.apache.cxf.fediz.core.ClaimTypes; import org.apache.cxf.fediz.tomcat.FederationAuthenticator; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.client.LaxRedirectStrategy; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -210,7 +185,8 @@ public class TomcatTest extends AbstractTests { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/fedservlet"; String user = "alice"; String password = "ecila"; - String response = sendHttpGetClientAuth(url, user, password, 200, 200); + String response = + HTTPTestUtils.sendHttpGet(url, user, password, 200, 200, Integer.parseInt(getIdpHttpsPort())); Assert.assertTrue("Principal not " + user, response.indexOf("userPrincipal=" + user) > 0); Assert.assertTrue("User " + user + " does not have role Admin", response.indexOf("role:Admin=false") > 0); @@ -229,97 +205,4 @@ public class TomcatTest extends AbstractTests { } - private String sendHttpGetClientAuth(String url, String user, String password, int returnCodeIDP, int returnCodeRP) - throws Exception { - DefaultHttpClient httpclient = new DefaultHttpClient(); - try { - httpclient.getCredentialsProvider().setCredentials( - new AuthScope("localhost", Integer.parseInt(getIdpHttpsPort())), - new UsernamePasswordCredentials(user, password)); - - KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - FileInputStream instream = new FileInputStream(new File("./target/test-classes/client.jks")); - try { - trustStore.load(instream, "clientpass".toCharArray()); - } finally { - try { - instream.close(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore, "clientpass", trustStore); - Scheme schIdp = new Scheme("https", Integer.parseInt(getIdpHttpsPort()), socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(schIdp); - Scheme schRp = new Scheme("https", Integer.parseInt(getRpHttpsPort()), socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(schRp); - - HttpGet httpget = new HttpGet(url); - - HttpResponse response = httpclient.execute(httpget); - HttpEntity entity = response.getEntity(); - - System.out.println(response.getStatusLine()); - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - Assert.assertTrue("IDP HTTP Response code: " + response.getStatusLine().getStatusCode() - + " [Expected: " + returnCodeIDP + "]", - returnCodeIDP == response.getStatusLine().getStatusCode()); - - if (response.getStatusLine().getStatusCode() != 200) { - return null; - } - - // Redirect to a POST is not supported without user interaction - // http://www.ietf.org/rfc/rfc2616.txt - // If the 301 status code is received in response to a request other - // than GET or HEAD, the user agent MUST NOT automatically redirect the - // request unless it can be confirmed by the user, since this might - // change the conditions under which the request was issued. - - httpclient.setRedirectStrategy(new LaxRedirectStrategy()); - - Source source = new Source(EntityUtils.toString(entity)); - List <NameValuePair> nvps = new ArrayList <NameValuePair>(); - FormFields formFields = source.getFormFields(); - - List<Element> forms = source.getAllElements(HTMLElementName.FORM); - Assert.assertEquals("Only one form expected but got " + forms.size(), 1, forms.size()); - String postUrl = forms.get(0).getAttributeValue("action"); - - Assert.assertNotNull("Form field 'wa' not found", formFields.get("wa")); - Assert.assertNotNull("Form field 'wresult' not found", formFields.get("wresult")); - - for (FormField formField : formFields) { - if (formField.getUserValueCount() != 0) { - nvps.add(new BasicNameValuePair(formField.getName(), - formField.getValues().get(0))); - } - } - HttpPost httppost = new HttpPost(postUrl); - httppost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); - - response = httpclient.execute(httppost); - - entity = response.getEntity(); - System.out.println(response.getStatusLine()); - Assert.assertTrue("RP HTTP Response code: " + response.getStatusLine().getStatusCode() - + " [Expected: " + returnCodeRP + "]", - returnCodeRP == response.getStatusLine().getStatusCode()); - - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - - return EntityUtils.toString(entity); - } finally { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - } - - } } http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/79c744df/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/WReqTest.java ---------------------------------------------------------------------- diff --git a/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/WReqTest.java b/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/WReqTest.java index d6f3a7a..d3aa47f 100644 --- a/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/WReqTest.java +++ b/systests/tomcat7/src/test/java/org/apache/cxf/fediz/integrationtests/WReqTest.java @@ -21,16 +21,6 @@ package org.apache.cxf.fediz.integrationtests; import java.io.File; -import java.io.FileInputStream; -import java.security.KeyStore; -import java.util.ArrayList; -import java.util.List; - -import net.htmlparser.jericho.Element; -import net.htmlparser.jericho.FormField; -import net.htmlparser.jericho.FormFields; -import net.htmlparser.jericho.HTMLElementName; -import net.htmlparser.jericho.Source; import org.apache.catalina.Context; import org.apache.catalina.LifecycleState; @@ -38,21 +28,6 @@ import org.apache.catalina.connector.Connector; import org.apache.catalina.startup.Tomcat; import org.apache.cxf.fediz.core.ClaimTypes; import org.apache.cxf.fediz.tomcat.FederationAuthenticator; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.client.LaxRedirectStrategy; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -209,7 +184,7 @@ public class WReqTest { String url = "https://localhost:" + getRpHttpsPort() + "/fedizhelloworld/secure/fedservlet"; String user = "alice"; String password = "ecila"; - String response = sendHttpGet(url, user, password); + String response = HTTPTestUtils.sendHttpGet(url, user, password, Integer.parseInt(getIdpHttpsPort())); Assert.assertTrue("Principal not " + user, response.indexOf("userPrincipal=" + user) > 0); Assert.assertTrue("User " + user + " does not have role Admin", response.indexOf("role:Admin=false") > 0); @@ -228,102 +203,4 @@ public class WReqTest { } - private String sendHttpGet(String url, String user, String password) throws Exception { - return sendHttpGet(url, user, password, 200, 200); - } - - private String sendHttpGet(String url, String user, String password, int returnCodeIDP, int returnCodeRP) - throws Exception { - DefaultHttpClient httpclient = new DefaultHttpClient(); - try { - httpclient.getCredentialsProvider().setCredentials( - new AuthScope("localhost", Integer.parseInt(getIdpHttpsPort())), - new UsernamePasswordCredentials(user, password)); - - KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - FileInputStream instream = new FileInputStream(new File("./target/test-classes/client.jks")); - try { - trustStore.load(instream, "clientpass".toCharArray()); - } finally { - try { - instream.close(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); - Scheme schIdp = new Scheme("https", Integer.parseInt(getIdpHttpsPort()), socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(schIdp); - Scheme schRp = new Scheme("https", Integer.parseInt(getRpHttpsPort()), socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(schRp); - - HttpGet httpget = new HttpGet(url); - - HttpResponse response = httpclient.execute(httpget); - HttpEntity entity = response.getEntity(); - - System.out.println(response.getStatusLine()); - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - Assert.assertTrue("IDP HTTP Response code: " + response.getStatusLine().getStatusCode() - + " [Expected: " + returnCodeIDP + "]", - returnCodeIDP == response.getStatusLine().getStatusCode()); - - if (response.getStatusLine().getStatusCode() != 200) { - return null; - } - - // Redirect to a POST is not supported without user interaction - // http://www.ietf.org/rfc/rfc2616.txt - // If the 301 status code is received in response to a request other - // than GET or HEAD, the user agent MUST NOT automatically redirect the - // request unless it can be confirmed by the user, since this might - // change the conditions under which the request was issued. - - httpclient.setRedirectStrategy(new LaxRedirectStrategy()); - - Source source = new Source(EntityUtils.toString(entity)); - List <NameValuePair> nvps = new ArrayList <NameValuePair>(); - FormFields formFields = source.getFormFields(); - - List<Element> forms = source.getAllElements(HTMLElementName.FORM); - Assert.assertEquals("Only one form expected but got " + forms.size(), 1, forms.size()); - String postUrl = forms.get(0).getAttributeValue("action"); - - Assert.assertNotNull("Form field 'wa' not found", formFields.get("wa")); - Assert.assertNotNull("Form field 'wresult' not found", formFields.get("wresult")); - - for (FormField formField : formFields) { - if (formField.getUserValueCount() != 0) { - nvps.add(new BasicNameValuePair(formField.getName(), - formField.getValues().get(0))); - } - } - HttpPost httppost = new HttpPost(postUrl); - httppost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); - - response = httpclient.execute(httppost); - - entity = response.getEntity(); - System.out.println(response.getStatusLine()); - Assert.assertTrue("RP HTTP Response code: " + response.getStatusLine().getStatusCode() - + " [Expected: " + returnCodeRP + "]", - returnCodeRP == response.getStatusLine().getStatusCode()); - - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - - return EntityUtils.toString(entity); - } finally { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - } - - } - }
