You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2023/07/19 15:33:43 UTC

[camel] branch main updated: [CAMEL-19613] AS2 component (#10735)

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new cb997651b57 [CAMEL-19613] AS2 component (#10735)
cb997651b57 is described below

commit cb997651b579b60ff9a5e7eca36a70efa007c38c
Author: Adriano Machado <60...@users.noreply.github.com>
AuthorDate: Wed Jul 19 11:33:35 2023 -0400

    [CAMEL-19613] AS2 component (#10735)
    
    Co-authored-by: Adriano Machado <ad...@redhat.com>
---
 components/camel-as2/camel-as2-component/pom.xml   |  9 +++++
 .../camel/component/as2/AS2ServerManagerIT.java    | 29 +++++----------
 .../camel/component/as2/AbstractAS2ITSupport.java  | 43 +++++++++++++++-------
 .../camel/component/as2/MendelsonCertLoader.java   | 23 +-----------
 .../as2/MendelsonSslEndpointManualTest.java        |  6 +++
 5 files changed, 55 insertions(+), 55 deletions(-)

diff --git a/components/camel-as2/camel-as2-component/pom.xml b/components/camel-as2/camel-as2-component/pom.xml
index 9e691a1d0ba..e00c0b85848 100644
--- a/components/camel-as2/camel-as2-component/pom.xml
+++ b/components/camel-as2/camel-as2-component/pom.xml
@@ -72,6 +72,15 @@
             <version>${commons-io-version}</version>
             <scope>test</scope>
         </dependency>
+
+        <!-- test infra -->
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-infra-core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+            <type>test-jar</type>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
index 22485cd5c24..19895a60d96 100644
--- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
+++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
@@ -143,11 +143,6 @@ public class AS2ServerManagerIT extends AbstractAS2ITSupport {
                                               + "UNT+23+00000000000117'\n"
                                               + "UNZ+1+00000000000778'";
 
-    private static AS2SignedDataGenerator gen;
-
-    private static KeyPair issueKP;
-    private static X509Certificate issueCert;
-
     private static KeyPair signingKP;
     private static X509Certificate signingCert;
     private static List<X509Certificate> certList;
@@ -155,7 +150,6 @@ public class AS2ServerManagerIT extends AbstractAS2ITSupport {
     private static KeyPair decryptingKP;
 
     private static SSLContext clientSslContext;
-    private static SSLContext serverSslContext;
 
     @BeforeAll
     public static void setup() throws Exception {
@@ -406,8 +400,6 @@ public class AS2ServerManagerIT extends AbstractAS2ITSupport {
         kpg.initialize(1024, new SecureRandom());
         String hackerIssueDN = "O=Hackers Unlimited Ltd., C=US";
         var hackerIssueKP = kpg.generateKeyPair();
-        var hackerissueCert = Utils.makeCertificate(
-                hackerIssueKP, hackerIssueDN, hackerIssueKP, hackerIssueDN);
         String hackerSigningDN = "CN=John Doe, E=j.doe@sharklasers.com, O=Self Signed, C=US";
         var hackerSigningKP = kpg.generateKeyPair();
         var hackerSigningCert = Utils.makeCertificate(
@@ -635,7 +627,8 @@ public class AS2ServerManagerIT extends AbstractAS2ITSupport {
                 new IssuerAndSerialNumber(new X500Name(signingCert.getIssuerDN().getName()), signingCert.getSerialNumber())));
         attributes.add(new SMIMECapabilitiesAttribute(capabilities));
 
-        gen = SigningUtils.createSigningGenerator(AS2SignatureAlgorithm.SHA256WITHRSA, certList.toArray(new X509Certificate[0]),
+        AS2SignedDataGenerator gen = SigningUtils.createSigningGenerator(AS2SignatureAlgorithm.SHA256WITHRSA,
+                certList.toArray(new X509Certificate[0]),
                 signingKP.getPrivate());
         gen.addCertificates(certs);
 
@@ -650,8 +643,8 @@ public class AS2ServerManagerIT extends AbstractAS2ITSupport {
         kpg.initialize(1024, new SecureRandom());
 
         String issueDN = "O=Punkhorn Software, C=US";
-        issueKP = kpg.generateKeyPair();
-        issueCert = Utils.makeCertificate(
+        KeyPair issueKP = kpg.generateKeyPair();
+        X509Certificate issueCert = Utils.makeCertificate(
                 issueKP, issueDN, issueKP, issueDN);
 
         //
@@ -687,8 +680,7 @@ public class AS2ServerManagerIT extends AbstractAS2ITSupport {
         sslContextParameters.setKeyManagers(kmp);
         sslContextParameters.setTrustManagers(clientSSLTrustManagers);
 
-        SSLContext sslContext = sslContextParameters.createSSLContext(context);
-        return sslContext;
+        return sslContextParameters.createSSLContext(context);
     }
 
     public SSLContext setupServerContext(CamelContext context) throws Exception {
@@ -710,20 +702,17 @@ public class AS2ServerManagerIT extends AbstractAS2ITSupport {
         sslContextParameters.setTrustManagers(tmp);
         sslContextParameters.setServerParameters(scsp);
 
-        SSLContext sslContext = sslContextParameters.createSSLContext(context);
-        return sslContext;
+        return sslContextParameters.createSSLContext(context);
     }
 
     @Override
-    protected CamelContext createCamelContext() throws Exception {
-        CamelContext context = super.createCamelContext();
-        this.clientSslContext = setupClientContext(context);
-        this.serverSslContext = setupClientContext(context);
+    public void configureContext(CamelContext context) throws Exception {
+        clientSslContext = setupClientContext(context);
+        SSLContext serverSslContext = setupClientContext(context);
         AS2Component as2Component = (AS2Component) context.getComponent("as2");
         AS2Configuration configuration = as2Component.getConfiguration();
         configuration.setSslContext(serverSslContext);
         configuration.setDecryptingPrivateKey(decryptingKP.getPrivate());
-        return context;
     }
 
     @Override
diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AbstractAS2ITSupport.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AbstractAS2ITSupport.java
index 1b09968232d..2e0dd9012ee 100644
--- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AbstractAS2ITSupport.java
+++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AbstractAS2ITSupport.java
@@ -23,24 +23,31 @@ import java.util.Properties;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
+import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.PropertyBindingSupport;
-import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.test.infra.core.CamelContextExtension;
+import org.apache.camel.test.infra.core.TransientCamelContextExtension;
+import org.apache.camel.test.infra.core.annotations.RouteFixture;
+import org.apache.camel.test.infra.core.api.CamelTestSupportHelper;
+import org.apache.camel.test.infra.core.api.ConfigurableContext;
+import org.apache.camel.test.infra.core.api.ConfigurableRoute;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.TestInstance.Lifecycle;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 /**
  * Abstract base class for AS2 Integration tests generated by Camel API component maven plugin.
  */
 @TestInstance(Lifecycle.PER_CLASS)
-public class AbstractAS2ITSupport extends CamelTestSupport {
+public abstract class AbstractAS2ITSupport implements CamelTestSupportHelper, ConfigurableContext, ConfigurableRoute {
 
     private static final String TEST_OPTIONS_PROPERTIES = "/test-options.properties";
 
-    @Override
-    protected CamelContext createCamelContext() throws Exception {
-
-        final CamelContext context = super.createCamelContext();
+    @RegisterExtension
+    public static final CamelContextExtension camelContextExtension = new TransientCamelContextExtension();
 
+    @Override
+    public void configureContext(CamelContext context) throws Exception {
         // read AS2 component configuration from TEST_OPTIONS_PROPERTIES
         final Properties properties = new Properties();
         try {
@@ -63,18 +70,28 @@ public class AbstractAS2ITSupport extends CamelTestSupport {
         final AS2Component component = new AS2Component(context);
         component.setConfiguration(configuration);
         context.addComponent("as2", component);
+    }
 
-        return context;
+    @Override
+    public CamelContextExtension getCamelContextExtension() {
+        return camelContextExtension;
     }
 
-    @SuppressWarnings("unchecked")
-    protected <T> T requestBodyAndHeaders(String endpointUri, Object body, Map<String, Object> headers)
-            throws CamelExecutionException {
-        return (T) template().requestBodyAndHeaders(endpointUri, body, headers);
+    @Override
+    @RouteFixture
+    public void createRouteBuilder(CamelContext context) throws Exception {
+        final RouteBuilder routeBuilder = createRouteBuilder();
+
+        if (routeBuilder != null) {
+            context.addRoutes(routeBuilder);
+        }
     }
 
+    protected abstract RouteBuilder createRouteBuilder() throws Exception;
+
     @SuppressWarnings("unchecked")
-    protected <T> T requestBody(String endpoint, Object body) throws CamelExecutionException {
-        return (T) template().requestBody(endpoint, body);
+    protected <T> T requestBodyAndHeaders(String endpointUri, Object body, Map<String, Object> headers)
+            throws CamelExecutionException {
+        return (T) getCamelContextExtension().getProducerTemplate().requestBodyAndHeaders(endpointUri, body, headers);
     }
 }
diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonCertLoader.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonCertLoader.java
index c88b6997e9e..cc94894bf60 100644
--- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonCertLoader.java
+++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonCertLoader.java
@@ -18,7 +18,6 @@ package org.apache.camel.component.as2;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
 import java.security.KeyManagementException;
 import java.security.KeyStore;
 import java.security.KeyStoreException;
@@ -30,12 +29,10 @@ import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.spec.InvalidKeySpecException;
 import java.util.ArrayList;
-import java.util.Base64;
 import java.util.List;
 
 import javax.net.ssl.SSLContext;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.http.conn.ssl.TrustAllStrategy;
 import org.apache.http.ssl.SSLContexts;
 import org.slf4j.Logger;
@@ -145,11 +142,6 @@ public class MendelsonCertLoader {
         return privateKey;
     }
 
-    private List<Certificate> getCertificatesFromStream(InputStream inputStream) throws CertificateException {
-        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
-        return (List<Certificate>) certificateFactory.generateCertificates(inputStream);
-    }
-
     private Certificate getCertificateFromStream(InputStream inputStream) throws IOException, CertificateException {
         CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
         return certificateFactory.generateCertificate(inputStream);
@@ -173,23 +165,10 @@ public class MendelsonCertLoader {
             return (PrivateKey) ks.getKey(
                     ks.aliases().nextElement(),
                     keyStorePassword.toCharArray());
-        } catch (KeyStoreException e) {
-            LOG.error("Error while retrieving private key" + e);
-        } catch (UnrecoverableKeyException e) {
+        } catch (KeyStoreException | UnrecoverableKeyException e) {
             LOG.error("Error while retrieving private key" + e);
         }
         throw new IllegalStateException("Failed to construct a PrivateKey from provided InputStream");
     }
 
-    private byte[] getBytesFromPem(InputStream inputStream) throws IOException {
-        String privateKeyPEM
-                = IOUtils.toString(inputStream, StandardCharsets.UTF_8).replaceAll("-{5}.+-{5}", "").replaceAll("\\s", "");
-        return Base64.getDecoder().decode(privateKeyPEM);
-    }
-
-    private byte[] getBytesFromPKCS12(InputStream inputStream) throws IOException {
-        String privateKeyPKCS12 = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-        return privateKeyPKCS12.getBytes(StandardCharsets.UTF_8);
-    }
-
 }
diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonSslEndpointManualTest.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonSslEndpointManualTest.java
index 5382b74c9cb..b4e0f25d4fa 100644
--- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonSslEndpointManualTest.java
+++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonSslEndpointManualTest.java
@@ -24,6 +24,7 @@ import javax.net.ssl.HostnameVerifier;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.as2.api.AS2EncryptionAlgorithm;
 import org.apache.camel.component.as2.api.AS2MessageStructure;
 import org.apache.camel.component.as2.api.AS2SignatureAlgorithm;
@@ -125,4 +126,9 @@ public class MendelsonSslEndpointManualTest extends AbstractAS2ITSupport {
                   "you can check your message in http://testas2.mendelson-e-c.com:8080/webas2/ " +
                   "Login guest, password guest");
     }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return null;
+    }
 }