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 2021/02/17 06:24:31 UTC

[camel] 02/31: CAMEL-15964 create camel-google-storage component

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

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

commit 7cae141011c6524d43abd7fac174963bb2f49f17
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Thu Feb 11 09:37:59 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/camel-google-storage/ReadMe.txt         | 34 ++++++++++----
 components/camel-google-storage/pom.xml            |  5 +-
 .../GoogleCloudStorageEndpointUriFactory.java      |  4 +-
 .../component/google/storage/google-storage.json   |  1 -
 .../google/storage/GoogleCloudStorageEndpoint.java | 26 ++---------
 ...ogleCloudStorageComponentConfigurationTest.java | 19 --------
 .../storage/{ => unit}/ConsumerLocalTest.java      |  3 +-
 .../{ => unit}/GoogleCloudStorageBaseTest.java     |  3 +-
 ...ogleCloudStorageComponentConfigurationTest.java | 54 ++++++++++++++++++++++
 .../storage/{ => unit}/ProducerLocalTest.java      |  4 +-
 10 files changed, 94 insertions(+), 59 deletions(-)

diff --git a/components/camel-google-storage/ReadMe.txt b/components/camel-google-storage/ReadMe.txt
index f327e1e..4b5dcf0 100644
--- a/components/camel-google-storage/ReadMe.txt
+++ b/components/camel-google-storage/ReadMe.txt
@@ -1,13 +1,31 @@
-Camel Component Project
-=======================
+## Camel Google Storage Component
+This component is based on the https://github.com/googleapis/java-storage[google java storage library] that works as a client for the Google Cloud Storage.
 
-This project is a template of a Camel component.
 
-To build this project use
+## Camel Google Storage Component testing
 
-    mvn install
+The unit tests provided are somewhat limited.
+Due to the nature of the component, it needs to be tested against a google Storage instance because although there are some emulators
+they doesn't cover all the functionalities.
+
+The tests are organized into two packages:
+* Unit : <br>
+  Standalone tests that can be conducted on their own
+* Integration : <br>
+  Tests against a Google Storage instance
+
+For the Unit tests has been extended the emulator https://github.com/googleapis/java-storage-nio/blob/master/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java[FakeStorageRpc]
+adding some functionalities (bucket creation and deletion). However there are still some unsupported operations.
+
+
+### Execution of integration tests
+
+A Google Cloud account with a project...
+
+Running tests against Storage instance:
+
+```
+mvn -Pgoogle-storage-test verify
+```
 
-For more help see the Apache Camel documentation:
 
-    http://camel.apache.org/writing-components.html
-    
diff --git a/components/camel-google-storage/pom.xml b/components/camel-google-storage/pom.xml
index 26d3519..832fa11 100644
--- a/components/camel-google-storage/pom.xml
+++ b/components/camel-google-storage/pom.xml
@@ -92,10 +92,9 @@
               <forkCount>1</forkCount>
               <reuseForks>true</reuseForks>
               <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
-              <!--<includes>
-                     
+              <includes>
                   <include>**/unit/**/*.java</include>
-              </includes>-->
+              </includes>
           </configuration>
       </plugin>
     </plugins>
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
index 35339d8..e421f25 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
@@ -20,9 +20,8 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(33);
+        Set<String> props = new HashSet<>(32);
         props.add("backoffMultiplier");
-        props.add("bucketName");
         props.add("destinationBucket");
         props.add("initialDelay");
         props.add("serviceAccountCredentials");
@@ -70,7 +69,6 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
 
         Map<String, Object> copy = new HashMap<>(properties);
 
-        uri = buildPathParameter(syntax, uri, "bucketName", null, true, copy);
         uri = buildQueryParameters(uri, copy, encode);
         return uri;
     }
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index e75a20d7..d06cb07 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -40,7 +40,6 @@
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
   },
   "properties": {
-    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Bucket name or ARN" },
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
     "serviceAccountCredentials": { "kind": "parameter", "displayName": "Service Account Credentials", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Specify the service account credentials file (json)" },
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index a82eab2..31ed2dc 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -15,18 +15,17 @@ import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.storage.client.StorageInternalClientFactory;
-import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
-import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.ScheduledPollEndpoint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * GoogleCloudStorage component which does bla bla.
- *
- * TODO: Update one line description above what the component does.
+ * Google Cloud Storage is an Object Storage to store any amount of data and retrieve it as often you like.
+ * 
+ * Google Storage Endpoint definition represents a bucket within the storage and contains configuration 
+ * to customize the behavior of Consumer and Producer.
  */
 @UriEndpoint(firstVersion = "3.7.0", scheme = "google-storage", title = "Google Storage",
              syntax = "google-storage:bucketName",
@@ -35,10 +34,6 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
 
     private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageEndpoint.class);
 
-    @UriPath(description = "Bucket name or ARN")
-    @Metadata(required = true)
-    private String bucketName; // to support component docs
-
     @UriParam
     private GoogleCloudStorageComponentConfiguration configuration;
 
@@ -167,17 +162,4 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
         return exchange;
     }
 
-    public String getBucketName() {
-        return bucketName;
-    }
-
-    /**
-     * Bucket name
-     * 
-     * @param bucketName
-     */
-    public void setBucketName(String bucketName) {
-        this.bucketName = bucketName;
-    }
-
 }
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java
deleted file mode 100644
index e6977a2..0000000
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.camel.component.google.storage;
-
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-public class GoogleCloudStorageComponentConfigurationTest extends CamelTestSupport {
-
-    @Test
-    public void createEndpointWithMinimalConfiguration() throws Exception {
-        GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
-        GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
-                "google-storage://rafa_test_bucket?serviceAccountCredentials=somefile.json");
-
-        assertEquals(endpoint.getConfiguration().getServiceAccountCredentials(), "somefile.json");
-    }
-
-}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
similarity index 96%
rename from components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java
rename to components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
index 22c3a49..b6b3c4f 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
@@ -1,8 +1,9 @@
-package org.apache.camel.component.google.storage;
+package org.apache.camel.component.google.storage.unit;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
similarity index 87%
rename from components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java
rename to components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
index 83d01f2..0bdf863 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
@@ -1,7 +1,8 @@
-package org.apache.camel.component.google.storage;
+package org.apache.camel.component.google.storage.unit;
 
 import com.google.cloud.storage.Storage;
 import org.apache.camel.CamelContext;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
 import org.apache.camel.component.google.storage.localstorage.LocalStorageHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
new file mode 100644
index 0000000..73e5c89
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
@@ -0,0 +1,54 @@
+package org.apache.camel.component.google.storage.unit;
+
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration;
+import org.apache.camel.component.google.storage.GoogleCloudStorageEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class GoogleCloudStorageComponentConfigurationTest extends CamelTestSupport {
+
+    @Test
+    public void createEndpointWithMinimalConfiguration() throws Exception {
+        final String bucketName = "myCamelBucket";
+        final String serviceAccountCredentialsFile = "somefile.json";
+
+        GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
+        GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
+                String.format("google-storage://%s?serviceAccountCredentials=%s", bucketName, serviceAccountCredentialsFile));
+
+        assertEquals(endpoint.getConfiguration().getBucketName(), bucketName);
+        assertEquals(endpoint.getConfiguration().getServiceAccountCredentials(), serviceAccountCredentialsFile);
+    }
+
+    public void createEndpointForComplexConsumer() throws Exception {
+
+        final String bucketName = "sourceCamelBucket";
+        final String serviceAccountCredentialsFile = "somefile.json";
+        final boolean moveAfterRead = false;
+        final String destinationBucket = "destinationCamelBucket";
+        final boolean autoCreateBucket = true;
+        final boolean deleteAfterRead = false;
+        final boolean includeBody = true;
+
+        GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
+        GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
+                String.format(
+                        "google-storage://%s?serviceAccountCredentials=%s&moveAfterRead=%s&destinationBucket=%s&autoCreateBucket=%s&deleteAfterRead=%s&includeBody=%s",
+                        bucketName, serviceAccountCredentialsFile, moveAfterRead, destinationBucket, autoCreateBucket,
+                        deleteAfterRead, includeBody));
+
+        GoogleCloudStorageComponentConfiguration configuration = endpoint.getConfiguration();
+        assertEquals(configuration.getBucketName(), bucketName);
+        assertEquals(configuration.getServiceAccountCredentials(), serviceAccountCredentialsFile);
+        assertEquals(configuration.isMoveAfterRead(), moveAfterRead);
+        assertEquals(configuration.getDestinationBucket(), destinationBucket);
+        assertEquals(configuration.isAutoCreateBucket(), autoCreateBucket);
+        assertEquals(configuration.isDeleteAfterRead(), deleteAfterRead);
+        assertEquals(configuration.isIncludeBody(), includeBody);
+
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
similarity index 96%
rename from components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java
rename to components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
index 71b2419..591c633 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
@@ -1,4 +1,4 @@
-package org.apache.camel.component.google.storage;
+package org.apache.camel.component.google.storage.unit;
 
 import java.io.ByteArrayInputStream;
 import java.util.List;
@@ -9,6 +9,8 @@ import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations;
+import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;