This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch 2.13.x in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 1da852309f3adf254674da471a63bfba052654c6 Author: Peter Palaga <[email protected]> AuthorDate: Tue Mar 28 17:58:37 2023 +0200 Test CXF client with HTTP BASIC authentication #4705 --- .../cxf-soap/cxf-soap-client/pom.xml | 4 ++ .../cxf/soap/client/it/CxfSoapClientRoutes.java | 20 ++++++ .../resources/wsdl/BasicAuthCalculatorService.wsdl | 75 ++++++++++++++++++++++ .../cxf/soap/client/it/CxfClientTestResource.java | 9 ++- .../cxf/soap/client/it/CxfSoapClientTest.java | 41 ++++++++++-- 5 files changed, 142 insertions(+), 7 deletions(-) diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/pom.xml b/integration-test-groups/cxf-soap/cxf-soap-client/pom.xml index 234870240c..71d6b78a78 100644 --- a/integration-test-groups/cxf-soap/cxf-soap-client/pom.xml +++ b/integration-test-groups/cxf-soap/cxf-soap-client/pom.xml @@ -46,6 +46,10 @@ <wsdl>${basedir}/src/main/resources/wsdl/CalculatorService.wsdl</wsdl> <wsdlLocation>classpath:wsdl/CalculatorService.wsdl</wsdlLocation> </wsdlOption> + <wsdlOption> + <wsdl>${basedir}/src/main/resources/wsdl/BasicAuthCalculatorService.wsdl</wsdl> + <wsdlLocation>classpath:wsdl/BasicAuthCalculatorService.wsdl</wsdlLocation> + </wsdlOption> </wsdlOptions> </configuration> </execution> diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientRoutes.java b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientRoutes.java index 1f82daac7a..413546cc3d 100644 --- a/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientRoutes.java +++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientRoutes.java @@ -36,6 +36,7 @@ import org.apache.camel.component.cxf.common.message.CxfConstants; import org.apache.camel.component.cxf.jaxws.CxfEndpoint; import org.apache.cxf.ext.logging.LoggingFeature; import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.jboss.eap.quickstarts.wscalculator.basicauthcalculator.BasicAuthCalculatorService; import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService; @ApplicationScoped @@ -90,6 +91,13 @@ public class CxfSoapClientRoutes extends RouteBuilder { from("direct:operandsAdd") .setHeader(CxfConstants.OPERATION_NAME).constant("addOperands") .to("cxf:bean:soapClientEndpoint?dataFormat=POJO"); + + from("direct:basicAuthAdd") + .to("cxf:bean:basicAuthClientEndpoint?dataFormat=POJO&username={{cq.cxf.it.calculator.auth.basic.user}}&password={{cq.cxf.it.calculator.auth.basic.password}}"); + + from("direct:basicAuthAddAnonymous") + .to("cxf:bean:basicAuthClientEndpoint?dataFormat=POJO"); + } @Produces @@ -113,6 +121,18 @@ public class CxfSoapClientRoutes extends RouteBuilder { return result; } + @Produces + @SessionScoped + @Named + CxfEndpoint basicAuthClientEndpoint() { + final CxfEndpoint result = new CxfEndpoint(); + result.setServiceClass(BasicAuthCalculatorService.class); + result.setAddress(serviceBaseUri + "/calculator-ws/BasicAuthCalculatorService"); + result.setWsdlURL("wsdl/BasicAuthCalculatorService.wsdl"); + result.getFeatures().add(loggingFeature); + return result; + } + private String calculatorServiceAddress() { return serviceBaseUri + "/calculator-ws/CalculatorService"; } diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/wsdl/BasicAuthCalculatorService.wsdl b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/wsdl/BasicAuthCalculatorService.wsdl new file mode 100644 index 0000000000..10ffef8a1d --- /dev/null +++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/wsdl/BasicAuthCalculatorService.wsdl @@ -0,0 +1,75 @@ +<?xml version="1.0" ?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/BasicAuthCalculator" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="BasicAuthCalculatorService" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/BasicAuthCalculator"> +<!-- + + 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. + +--> + <wsdl:types> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/BasicAuthCalculator" elementFormDefault="unqualified" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/BasicAuthCalculator" version="1.0"> + + <xs:element name="securedAdd" type="tns:securedAdd"></xs:element> + + <xs:element name="securedAddResponse" type="tns:securedAddResponse"></xs:element> + + <xs:complexType name="securedAdd"> + <xs:sequence> + <xs:element name="arg0" type="xs:int"></xs:element> + <xs:element name="arg1" type="xs:int"></xs:element> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="securedAddResponse"> + <xs:sequence> + <xs:element name="return" type="xs:int"></xs:element> + </xs:sequence> + </xs:complexType> + +</xs:schema> + </wsdl:types> + <wsdl:message name="securedAddResponse"> + <wsdl:part element="tns:securedAddResponse" name="parameters"> + </wsdl:part> + </wsdl:message> + <wsdl:message name="securedAdd"> + <wsdl:part element="tns:securedAdd" name="parameters"> + </wsdl:part> + </wsdl:message> + <wsdl:portType name="BasicAuthCalculatorService"> + <wsdl:operation name="securedAdd"> + <wsdl:input message="tns:securedAdd" name="securedAdd"> + </wsdl:input> + <wsdl:output message="tns:securedAddResponse" name="securedAddResponse"> + </wsdl:output> + </wsdl:operation> + </wsdl:portType> + <wsdl:binding name="BasicAuthCalculatorServiceSoapBinding" type="tns:BasicAuthCalculatorService"> + <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding> + <wsdl:operation name="securedAdd"> + <soap:operation soapAction="" style="document"></soap:operation> + <wsdl:input name="securedAdd"> + <soap:body use="literal"></soap:body> + </wsdl:input> + <wsdl:output name="securedAddResponse"> + <soap:body use="literal"></soap:body> + </wsdl:output> + </wsdl:operation> + </wsdl:binding> + <wsdl:service name="BasicAuthCalculatorService"> + <wsdl:port binding="tns:BasicAuthCalculatorServiceSoapBinding" name="BasicAuthCalculator"> + <soap:address location="http://192.168.122.1:8080/calculator-ws/BasicAuthCalculatorService"></soap:address> + </wsdl:port> + </wsdl:service> +</wsdl:definitions> \ No newline at end of file diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfClientTestResource.java b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfClientTestResource.java index d8ff5eba2c..2d08a62502 100644 --- a/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfClientTestResource.java +++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfClientTestResource.java @@ -18,6 +18,7 @@ package org.apache.camel.quarkus.component.cxf.soap.client.it; import java.util.Map; +import java.util.UUID; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; import org.slf4j.Logger; @@ -34,10 +35,14 @@ public class CxfClientTestResource implements QuarkusTestResourceLifecycleManage @Override public Map<String, String> start() { + final String BASIC_AUTH_USER = "tester"; + final String BASIC_AUTH_PASSWORD = UUID.randomUUID().toString(); try { calculatorContainer = new GenericContainer<>("quay.io/l2x6/calculator-ws:1.1") .withExposedPorts(WILDFLY_PORT) + .withEnv("BASIC_AUTH_USER", BASIC_AUTH_USER) + .withEnv("BASIC_AUTH_PASSWORD", BASIC_AUTH_PASSWORD) .withLogConsumer(new Slf4jLogConsumer(log)) .waitingFor(Wait.forHttp("/calculator-ws/CalculatorService?wsdl")); @@ -46,7 +51,9 @@ public class CxfClientTestResource implements QuarkusTestResourceLifecycleManage return Map.of( "camel-quarkus.it.calculator.baseUri", "http://" + calculatorContainer.getHost() + ":" + - calculatorContainer.getMappedPort(WILDFLY_PORT)); + calculatorContainer.getMappedPort(WILDFLY_PORT), + "cq.cxf.it.calculator.auth.basic.user", BASIC_AUTH_USER, + "cq.cxf.it.calculator.auth.basic.password", BASIC_AUTH_PASSWORD); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientTest.java b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientTest.java index ad9d1cb0e4..f17e279f7c 100644 --- a/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientTest.java +++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; @QuarkusTest @@ -81,23 +82,51 @@ class CxfSoapClientTest { .body(equalTo("7")); } + @Test + public void basicAuthClient() { + RestAssured.given() + .queryParam("a", "7") + .queryParam("b", "8") + .queryParam("endpointUri", "basicAuthAdd") + .queryParam("operation", "securedAdd") + .post("/cxf-soap/client/simple") + .then() + .statusCode(201) + .body(equalTo("15")); + } + + @Test + public void basicAuthClientAnonymous() { + RestAssured.given() + .queryParam("a", "7") + .queryParam("b", "8") + .queryParam("endpointUri", "basicAuthAddAnonymous") + .queryParam("operation", "securedAdd") + .post("/cxf-soap/client/simple") + .then() + .statusCode(500) + .body(containsString("HTTP response '401: Unauthorized'")); + } + /** - * Make sure that our static copy is the same as the WSDL served by the container + * Make sure that our static copies are the same as the WSDLs served by the container * * @throws IOException */ - @Test - void wsdlUpToDate() throws IOException { + @ParameterizedTest + @ValueSource(strings = { "CalculatorService", "BasicAuthCalculatorService" }) + void wsdlUpToDate(String serviceName) throws IOException { final String wsdlUrl = ConfigProvider.getConfig() .getValue("camel-quarkus.it.calculator.baseUri", String.class); - final String wsdlRelPath = "wsdl/CalculatorService.wsdl"; + final String wsdlRelPath = "wsdl/" + serviceName + ".wsdl"; final Path staticCopyPath = Paths.get("src/main/resources/" + wsdlRelPath); Assumptions.assumeTrue(Files.isRegularFile(staticCopyPath), staticCopyPath + " does not exist - we probably run inside Quarkus Platform"); /* The changing Docker IP address in the WSDL should not matter */ - final String sanitizerRegex = "<soap:address location=\"http://[^/]*/calculator-ws/CalculatorService\"></soap:address>"; + final String sanitizerRegex = "<soap:address location=\"http://[^/]*/calculator-ws/" + serviceName + + "\"></soap:address>"; final String staticCopyContent = Files .readString(staticCopyPath, StandardCharsets.UTF_8) .replaceAll(sanitizerRegex, "") @@ -107,7 +136,7 @@ class CxfSoapClientTest { .replaceAll("\\s", ""); final String expected = RestAssured.given() - .get(wsdlUrl + "/calculator-ws/CalculatorService?wsdl") + .get(wsdlUrl + "/calculator-ws/" + serviceName + "?wsdl") .then() .statusCode(200) .extract().body().asString();
