This is an automated email from the ASF dual-hosted git repository. reta pushed a commit to branch 3.3.x-fixes in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 1c67d067ec967b907f56e1c5e0c268dc73452300 Author: reta <[email protected]> AuthorDate: Sun Jun 28 11:35:28 2020 -0400 Adding JAX-WS integration test for DefaultBasicAuthSupplier (cherry picked from commit 7a13bfff60babe60ebfcdb45b5838eee6947e191) --- .../cxf/systest/jaxws/JaxwsAsyncFailOverTest.java | 6 ++ ...ncFailOverTest.java => JaxwsBasicAuthTest.java} | 86 ++++++++++++++-------- 2 files changed, 63 insertions(+), 29 deletions(-) diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsAsyncFailOverTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsAsyncFailOverTest.java index 70dc8c8..df8e9d5 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsAsyncFailOverTest.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsAsyncFailOverTest.java @@ -34,6 +34,7 @@ import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; import org.apache.cxf.testutil.common.AbstractBusTestServerBase; +import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -79,6 +80,11 @@ public class JaxwsAsyncFailOverTest extends AbstractBusClientServerTestBase { assertTrue("server did not launch correctly", launchServer(Server.class, true)); } + @AfterClass + public static void stopServers() throws Exception { + stopAllServers(); + } + @Test public void testUseFailOverOnClient() throws Exception { List<String> serviceList = new ArrayList<>(); diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsAsyncFailOverTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsBasicAuthTest.java similarity index 52% copy from systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsAsyncFailOverTest.java copy to systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsBasicAuthTest.java index 70dc8c8..0a24474 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsAsyncFailOverTest.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxwsBasicAuthTest.java @@ -19,29 +19,37 @@ package org.apache.cxf.systest.jaxws; -import java.util.ArrayList; import java.util.List; +import java.util.Map; +import javax.annotation.Resource; import javax.jws.WebService; -import javax.xml.ws.Response; +import javax.xml.ws.BindingProvider; +import javax.xml.ws.WebServiceContext; +import javax.xml.ws.WebServiceException; +import javax.xml.ws.handler.MessageContext; -import org.apache.cxf.clustering.FailoverFeature; -import org.apache.cxf.clustering.RandomStrategy; +import org.apache.cxf.endpoint.Client; +import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.greeter_control.AbstractGreeterImpl; import org.apache.cxf.greeter_control.Greeter; -import org.apache.cxf.greeter_control.types.GreetMeResponse; +import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; import org.apache.cxf.testutil.common.AbstractBusTestServerBase; +import org.apache.cxf.transport.http.HTTPConduit; +import org.apache.cxf.transport.http.auth.DefaultBasicAuthSupplier; +import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -public class JaxwsAsyncFailOverTest extends AbstractBusClientServerTestBase { - static final String PORT = allocatePort(ServerNoBodyParts.class, 1); - static final String PORT2 = allocatePort(ServerNoBodyParts.class, 2); +public class JaxwsBasicAuthTest extends AbstractBusClientServerTestBase { + static final String PORT = allocatePort(JaxwsBasicAuthTest.class); public static class Server extends AbstractBusTestServerBase { @@ -64,12 +72,34 @@ public class JaxwsAsyncFailOverTest extends AbstractBusClientServerTestBase { } } - @WebService(serviceName = "BasicGreeterService", + @WebService(serviceName = "ProtectedGreeterService", portName = "GreeterPort", endpointInterface = "org.apache.cxf.greeter_control.Greeter", targetNamespace = "http://cxf.apache.org/greeter_control", wsdlLocation = "testutils/greeter_control.wsdl") public class GreeterImpl extends AbstractGreeterImpl { + @Resource private WebServiceContext context; + + @Override + public String greetMe(String arg) { + final MessageContext messageContext = context.getMessageContext(); + + final Map<String, List<String>> headers = + CastUtils.cast((Map<?, ?>)messageContext.get(MessageContext.HTTP_REQUEST_HEADERS)); + + if (headers == null) { + throw new WebServiceException("Not authorized"); + } + + final String authorization = headers.get("Authorization").get(0); + final String expected = DefaultBasicAuthSupplier.getBasicAuthHeader("user", "test", true); + + if (!expected.equals(authorization)) { + throw new WebServiceException("Not authorized"); + } + + return "CXF is protected: " + arg; + } } } @@ -78,34 +108,32 @@ public class JaxwsAsyncFailOverTest extends AbstractBusClientServerTestBase { public static void startServers() throws Exception { assertTrue("server did not launch correctly", launchServer(Server.class, true)); } + + @AfterClass + public static void stopServers() throws Exception { + stopAllServers(); + } @Test - public void testUseFailOverOnClient() throws Exception { - List<String> serviceList = new ArrayList<>(); - serviceList.add("http://localhost:" + PORT + "/SoapContext/GreeterPort"); - - RandomStrategy strategy = new RandomStrategy(); - strategy.setAlternateAddresses(serviceList); - - FailoverFeature ff = new FailoverFeature(); - ff.setStrategy(strategy); - + public void testUseBasicAuthFromClient() throws Exception { // setup the feature by using JAXWS front-end API JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); // set a fake address to kick off the failover feature - factory.setAddress("http://localhost:" + PORT2 + "/SoapContext/GreeterPort"); - factory.getFeatures().add(ff); + factory.setAddress("http://localhost:" + PORT + "/SoapContext/GreeterPort"); factory.setServiceClass(Greeter.class); Greeter proxy = factory.create(Greeter.class); - Response<GreetMeResponse> response = proxy.greetMeAsync("cxf"); - int waitCount = 0; - while (!response.isDone() && waitCount < 15) { - Thread.sleep(1000); - waitCount++; - } - assertTrue("Response still not received.", response.isDone()); - + Client clientProxy = ClientProxy.getClient(proxy); + HTTPConduit conduit = (HTTPConduit) clientProxy.getConduit(); + conduit.getAuthorization().setAuthorizationType("Basic"); + conduit.getAuthorization().setUserName("user"); + conduit.getAuthorization().setPassword("test"); + + final BindingProvider bindingProvider = (BindingProvider) proxy; + bindingProvider.getRequestContext().put("encode.basicauth.with.iso8859", true); + + String response = proxy.greetMe("cxf"); + assertThat("CXF is protected: cxf", equalTo(response)); } }
