This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch sandbox/camel-3.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit 1e91cef3767426e044a33ab48adbbc5cb7c600aa Author: William Collins <punkhor...@gmail.com> AuthorDate: Mon Dec 3 13:36:22 2018 -0500 [CAMEL-12605] Added further tests and fixes for compression --- .../camel/component/as2/api/AS2ClientManager.java | 4 +- .../component/as2/api/AS2MessageStructure.java | 2 +- .../component/as2/api/entity/EntityParser.java | 4 +- .../camel/component/as2/api/AS2MessageTest.java | 80 ++++++++++++++++++++++ 4 files changed, 86 insertions(+), 4 deletions(-) diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java index 915d210..5f7ce3b 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java @@ -354,11 +354,11 @@ public class AS2ClientManager { EntityUtils.setMessageEntity(request, pkcs7MimeEnvelopedDataEntity); break; } - case SIGNED_ENCRYPTED_COMPRESSED: { + case ENCRYPTED_COMPRESSED_SIGNED: { // Create Multipart Signed Entity containing EDI Entity AS2SignedDataGenerator signingGenrator = createSigningGenerator(httpContext); MultipartSignedEntity multipartSignedEntity = new MultipartSignedEntity(applicationEDIEntity, signingGenrator, - AS2Charset.US_ASCII, AS2TransferEncoding.BASE64, true, null); + AS2Charset.US_ASCII, AS2TransferEncoding.BASE64, false, null); // Create Compressed Entity containing Multipart Signed Entity CMSCompressedDataGenerator compressedDataGenerator = createCompressorGenerator(httpContext); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2MessageStructure.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2MessageStructure.java index 760d9f0..4fe5ff5 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2MessageStructure.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2MessageStructure.java @@ -24,7 +24,7 @@ public enum AS2MessageStructure { PLAIN_COMPRESSED(false, false, true), SIGNED_COMPRESSED(true, false, true), ENCRYPTED_COMPRESSED(false, true, true), - SIGNED_ENCRYPTED_COMPRESSED(true, true, true); + ENCRYPTED_COMPRESSED_SIGNED(true, true, true); private final boolean isSigned; private final boolean isEncrypted; diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java index 42a4b1b..f97b0ae 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java @@ -184,6 +184,8 @@ public final class EntityParser { throws HttpException { byte[] uncompressedContent = uncompressData(compressedData, expanderProvider); + + String uncompressedContentString = new String(uncompressedContent); return parseEntity(uncompressedContent); } @@ -198,7 +200,7 @@ public final class EntityParser { public static MimeEntity parseEntity(byte[] content) throws HttpException { try { - + String contentString = new String(content); InputStream is = new ByteArrayInputStream(content); AS2SessionInputBuffer inbuffer = new AS2SessionInputBuffer(new HttpTransportMetricsImpl(), DEFAULT_BUFFER_SIZE); inbuffer.bind(is); diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java index 5b9dc3e..b764d62 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java @@ -929,6 +929,86 @@ public class AS2MessageTest { ediEntity.getEdiMessage().replaceAll("[\n\r]", "")); } + @Test + public void envelopedCompressedAndSignedMessageTest() throws Exception { + AS2ClientConnection clientConnection = new AS2ClientConnection(AS2_VERSION, USER_AGENT, CLIENT_FQDN, + TARGET_HOST, TARGET_PORT); + AS2ClientManager clientManager = new AS2ClientManager(clientConnection); + + LOG.info("Key Algoritm: " + signingKP.getPrivate().getAlgorithm()); + + HttpCoreContext httpContext = clientManager.send(EDI_MESSAGE, REQUEST_URI, SUBJECT, FROM, AS2_NAME, AS2_NAME, + AS2MessageStructure.ENCRYPTED_COMPRESSED_SIGNED, + ContentType.create(AS2MediaType.APPLICATION_EDIFACT, AS2Charset.US_ASCII), null, + AS2SignatureAlgorithm.SHA256WITHRSA, certList.toArray(new Certificate[0]), signingKP.getPrivate(), + AS2CompressionAlgorithm.ZLIB, DISPOSITION_NOTIFICATION_TO, SIGNED_RECEIPT_MIC_ALGORITHMS, + AS2EncryptionAlgorithm.AES128_CBC, certList.toArray(new Certificate[0]), signingKP.getPrivate()); + + HttpRequest request = httpContext.getRequest(); + assertEquals("Unexpected method value", METHOD, request.getRequestLine().getMethod()); + assertEquals("Unexpected request URI value", REQUEST_URI, request.getRequestLine().getUri()); + assertEquals("Unexpected HTTP version value", HttpVersion.HTTP_1_1, + request.getRequestLine().getProtocolVersion()); + + assertEquals("Unexpected subject value", SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue()); + assertEquals("Unexpected from value", FROM, request.getFirstHeader(AS2Header.FROM).getValue()); + assertEquals("Unexpected AS2 version value", AS2_VERSION, + request.getFirstHeader(AS2Header.AS2_VERSION).getValue()); + assertEquals("Unexpected AS2 from value", AS2_NAME, request.getFirstHeader(AS2Header.AS2_FROM).getValue()); + assertEquals("Unexpected AS2 to value", AS2_NAME, request.getFirstHeader(AS2Header.AS2_TO).getValue()); + assertTrue("Unexpected message id value", + request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN + ">")); + assertEquals("Unexpected target host value", TARGET_HOST + ":" + TARGET_PORT, + request.getFirstHeader(AS2Header.TARGET_HOST).getValue()); + assertEquals("Unexpected user agent value", USER_AGENT, + request.getFirstHeader(AS2Header.USER_AGENT).getValue()); + assertNotNull("Date value missing", request.getFirstHeader(AS2Header.DATE)); + assertNotNull("Content length value missing", request.getFirstHeader(AS2Header.CONTENT_LENGTH)); + assertTrue("Unexpected content type for message", + request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME)); + + assertTrue("Request does not contain entity", request instanceof BasicHttpEntityEnclosingRequest); + HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertNotNull("Request does not contain entity", entity); + assertTrue("Unexpected request entity type", entity instanceof ApplicationPkcs7MimeEnvelopedDataEntity); + ApplicationPkcs7MimeEnvelopedDataEntity envelopedEntity = (ApplicationPkcs7MimeEnvelopedDataEntity) entity; + assertTrue("Entity not set as main body of request", envelopedEntity.isMainBody()); + + // Validated enveloped part. + MimeEntity encryptedEntity = envelopedEntity.getEncryptedEntity(signingKP.getPrivate()); + assertTrue("Enveloped mime part incorrect type ", encryptedEntity instanceof ApplicationPkcs7MimeCompressedDataEntity); + ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity = (ApplicationPkcs7MimeCompressedDataEntity) encryptedEntity; + assertTrue("Unexpected content type for compressed mime part", + compressedDataEntity.getContentType().getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME)); + assertFalse("Enveloped mime type set as main body of request", compressedDataEntity.isMainBody()); + + // Validated compressed part. + MimeEntity compressedEntity = compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider()); + assertTrue("Enveloped mime part incorrect type ", compressedEntity instanceof MultipartSignedEntity); + MultipartSignedEntity multipartSignedEntity = (MultipartSignedEntity) compressedEntity; + assertTrue("Unexpected content type for compressed entity", + multipartSignedEntity.getContentType().getValue().startsWith(AS2MediaType.MULTIPART_SIGNED)); + assertFalse("Multipart signed entity set as main body of request", multipartSignedEntity.isMainBody()); + assertTrue("Multipart signed entity contains invalid number of mime parts", + multipartSignedEntity.getPartCount() == 2); + + // Validated first mime part. + assertTrue("First mime part incorrect type ", multipartSignedEntity.getPart(0) instanceof ApplicationEDIFACTEntity); + ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) multipartSignedEntity.getPart(0); + assertTrue("Unexpected content type for first mime part", + ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT)); + assertFalse("First mime type set as main body of request", ediEntity.isMainBody()); + + // Validate second mime part. + assertTrue("Second mime part incorrect type ", + multipartSignedEntity.getPart(1) instanceof ApplicationPkcs7SignatureEntity); + ApplicationPkcs7SignatureEntity signatureEntity = (ApplicationPkcs7SignatureEntity) multipartSignedEntity.getPart(1); + assertTrue("Unexpected content type for second mime part", + signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE)); + assertFalse("First mime type set as main body of request", signatureEntity.isMainBody()); + + } + }