You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/04/03 13:44:01 UTC

[camel] branch camel-3.20.x updated: CAMEL-19224: Fix blob consumer prefix usage (#9773)

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

davsclaus pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.20.x by this push:
     new 41958dbcacf CAMEL-19224: Fix blob consumer prefix usage (#9773)
41958dbcacf is described below

commit 41958dbcacf8c404e46060ecab71ac45ec9cf1b1
Author: Idorași Paul <35...@users.noreply.github.com>
AuthorDate: Mon Apr 3 16:40:45 2023 +0300

    CAMEL-19224: Fix blob consumer prefix usage (#9773)
---
 .../blob/BlobConfigurationOptionsProxy.java        |  8 +----
 .../storage/blob/integration/BlobConsumerIT.java   | 36 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfigurationOptionsProxy.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfigurationOptionsProxy.java
index 85df10d7943..8229292eae5 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfigurationOptionsProxy.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfigurationOptionsProxy.java
@@ -63,7 +63,7 @@ public class BlobConfigurationOptionsProxy {
     }
 
     public BlobListDetails getBlobListDetails(final Exchange exchange) {
-        return getOption(BlobExchangeHeaders::getBlobListDetailsFromHeaders, () -> null, exchange);
+        return getOption(BlobExchangeHeaders::getBlobListDetailsFromHeaders, BlobListDetails::new, exchange);
     }
 
     public String getPrefix(final Exchange exchange) {
@@ -89,12 +89,6 @@ public class BlobConfigurationOptionsProxy {
             blobsOptions = new ListBlobsOptions();
         }
 
-        if (!ObjectHelper.isEmpty(blobsOptions)) {
-            return blobsOptions;
-        } else {
-            blobsOptions = new ListBlobsOptions();
-        }
-
         final BlobListDetails blobListDetails = getBlobListDetails(exchange);
         final String prefix = getPrefix(exchange);
         final Integer maxResultsPerPage = getMaxResultsPerPage(exchange);
diff --git a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerIT.java b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerIT.java
index 395b797e40a..18c570c4643 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerIT.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerIT.java
@@ -46,25 +46,32 @@ class BlobConsumerIT extends Base {
     @EndpointInject("direct:start")
     private ProducerTemplate templateStart;
     private String batchContainerName;
+    private String prefixContainerName;
     private String blobName;
     private String blobName2;
 
     private BlobContainerClient containerClient;
     private BlobContainerClient batchContainerClient;
+    private BlobContainerClient prefixContainerClient;
     private final String regex = ".*\\.pdf";
+    private final String prefix = "blob-prefix";
 
     @BeforeAll
     public void setup() {
         batchContainerName = RandomStringUtils.randomAlphabetic(5).toLowerCase();
+        prefixContainerName = RandomStringUtils.randomAlphabetic(5).toLowerCase();
         blobName = RandomStringUtils.randomAlphabetic(5);
         blobName2 = RandomStringUtils.randomAlphabetic(5);
 
         containerClient = serviceClient.getBlobContainerClient(containerName);
         batchContainerClient = serviceClient.getBlobContainerClient(batchContainerName);
+        prefixContainerClient = serviceClient.getBlobContainerClient(prefixContainerName);
+
 
         // create test container
         containerClient.create();
         batchContainerClient.create();
+        prefixContainerClient.create();
     }
 
     @Test
@@ -182,6 +189,31 @@ class BlobConsumerIT extends Base {
         }
     }
 
+     @Test
+    void testPrefixBasedPolling() throws InterruptedException {
+        final MockEndpoint mockEndpoint = getMockEndpoint("mock:resultPrefix");
+        mockEndpoint.expectedMessageCount(1);
+
+        templateStart.send("direct:createBlob", exchange -> {
+            exchange.getIn().setBody("Blob 1");
+            exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, prefixContainerName);
+            exchange.getIn().setHeader(BlobConstants.BLOB_NAME, prefix + "/test_blob_1");
+        });
+
+        templateStart.send("direct:createBlob", exchange -> {
+            exchange.getIn().setBody("Blob 2");
+            exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, prefixContainerName);
+            exchange.getIn().setHeader(BlobConstants.BLOB_NAME, "non_prefixed_blob");
+        });
+
+        mockEndpoint.assertIsSatisfied();
+
+        String text = mockEndpoint.getExchanges().get(0).getIn().getBody(String.class);
+
+        assertEquals("Blob 1", text);
+        assertEquals(1, mockEndpoint.getExchanges().size());
+    }
+
     private String generateRandomBlobName(String prefix, String extension) {
         return prefix + randomAlphabetic(5).toLowerCase() + "." + extension;
     }
@@ -191,6 +223,7 @@ class BlobConsumerIT extends Base {
         // delete container
         containerClient.delete();
         batchContainerClient.delete();
+        prefixContainerClient.delete();
     }
 
     @Override
@@ -220,6 +253,9 @@ class BlobConsumerIT extends Base {
                      + "?prefix=aaaa&regex=" + regex)
                         .idempotentConsumer(body(), new MemoryIdempotentRepository())
                         .to("mock:resultRegex");
+
+                from("azure-storage-blob://cameldev/" + prefixContainerName + "?prefix=" + prefix)
+                        .to("mock:resultPrefix");
             }
         };
     }