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 cd704e9377adabc1496e2cea734d71002a54456a
Author: Raffaele Marcello <marcelloraffa...@gmail.com>
AuthorDate: Mon Mar 8 20:44:20 2021 +0100

    CAMEL-15963 Create a Google Cloud Functions component
---
 .../functions/GoogleCloudFunctionsOperations.java  |  27 +-
 .../functions/GoogleCloudFunctionsProducer.java    | 183 ++++++++--
 .../unit/GoogleCloudFunctionsComponentTest.java    | 388 ++++++++++++++++++---
 ...GoogleCloudFunctionsEndpointBuilderFactory.java |   7 +-
 4 files changed, 522 insertions(+), 83 deletions(-)

diff --git 
a/components/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsOperations.java
 
b/components/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsOperations.java
index fa48fd9..cbf8b78 100644
--- 
a/components/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsOperations.java
+++ 
b/components/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsOperations.java
@@ -20,25 +20,10 @@ public enum GoogleCloudFunctionsOperations {
 
     listFunctions,
     getFunction,
-    callFunction;
-
-    //TODO Clean up
-    // listFunctions,
-    // getFunction,
-    // createAlias,
-    // deleteAlias,
-    // getAlias,
-    // listAliases,
-    // createFunction,
-    // deleteFunction,
-    // invokeFunction,
-    // updateFunction,
-    // createEventSourceMapping,
-    // deleteEventSourceMapping,
-    // listEventSourceMapping,
-    // listTags,
-    // tagResource,
-    // untagResource,
-    // publishVersion,
-    // listVersions
+    callFunction,
+    generateDownloadUrl,
+    generateUploadUrl,
+    createFunction,
+    updateFunction,
+    deleteFunction;
 }
diff --git 
a/components/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsProducer.java
 
b/components/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsProducer.java
index d5328ce..3464705 100644
--- 
a/components/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsProducer.java
+++ 
b/components/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsProducer.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.google.functions;
 
 import java.util.List;
+import java.util.concurrent.ExecutionException;
 
 import com.google.api.client.util.Lists;
 import com.google.api.gax.rpc.ApiException;
@@ -26,8 +27,16 @@ import com.google.cloud.functions.v1.CloudFunction;
 import com.google.cloud.functions.v1.CloudFunctionName;
 import com.google.cloud.functions.v1.CloudFunctionsServiceClient;
 import 
com.google.cloud.functions.v1.CloudFunctionsServiceClient.ListFunctionsPagedResponse;
+import com.google.cloud.functions.v1.CreateFunctionRequest;
+import com.google.cloud.functions.v1.DeleteFunctionRequest;
+import com.google.cloud.functions.v1.GenerateDownloadUrlRequest;
+import com.google.cloud.functions.v1.GenerateDownloadUrlResponse;
+import com.google.cloud.functions.v1.GenerateUploadUrlRequest;
+import com.google.cloud.functions.v1.GenerateUploadUrlResponse;
 import com.google.cloud.functions.v1.ListFunctionsRequest;
 import com.google.cloud.functions.v1.LocationName;
+import com.google.cloud.functions.v1.UpdateFunctionRequest;
+import com.google.protobuf.Empty;
 import org.apache.camel.Exchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.Message;
@@ -51,18 +60,33 @@ public class GoogleCloudFunctionsProducer extends 
DefaultProducer {
     @Override
     public void process(final Exchange exchange) throws Exception {
         switch (determineOperation(exchange)) {
-        case listFunctions:
-            listFunctions(endpoint.getClient(), exchange);
-            break;
-        case getFunction:
-            getFunction(endpoint.getClient(), exchange);
-            break;
-        case callFunction:
-            callFunction(endpoint.getClient(), exchange);
-            break;
-
-        default:
-            throw new IllegalArgumentException("Unsupported operation");
+            case listFunctions:
+                listFunctions(endpoint.getClient(), exchange);
+                break;
+            case getFunction:
+                getFunction(endpoint.getClient(), exchange);
+                break;
+            case callFunction:
+                callFunction(endpoint.getClient(), exchange);
+                break;
+            case generateDownloadUrl:
+                generateDownloadUrl(endpoint.getClient(), exchange);
+                break;
+            case generateUploadUrl:
+                generateUploadUrl(endpoint.getClient(), exchange);
+                break;
+            case createFunction:
+                createFunction(endpoint.getClient(), exchange);
+                break;
+            case updateFunction:
+                updateFunction(endpoint.getClient(), exchange);
+                break;
+            case deleteFunction:
+                deleteFunction(endpoint.getClient(), exchange);
+                break;
+
+            default:
+                throw new IllegalArgumentException("Unsupported operation");
         }
     }
 
@@ -123,32 +147,151 @@ public class GoogleCloudFunctionsProducer extends 
DefaultProducer {
             if (payload instanceof CallFunctionRequest) {
                 CallFunctionResponse result;
                 try {
-                    result = client.callFunction( (CallFunctionRequest) 
payload );
+                    result = client.callFunction((CallFunctionRequest) 
payload);
                     Message message = getMessageForResponse(exchange);
                     message.setBody(result);
                 } catch (ApiException ae) {
                     LOG.trace("callFunction command returned the error code 
{}", ae.getStatusCode());
                     throw ae;
-                }                
+                }
             }
         } else {
             String data = exchange.getIn().getBody(String.class);
-            CloudFunctionName cfName = 
CloudFunctionName.of(getConfiguration().getProject(), 
getConfiguration().getLocation(), getConfiguration().getFunctionName());
-            CallFunctionRequest request = CallFunctionRequest.newBuilder()
-                .setName(cfName.toString())
-                .setData(data)
-                .build();
+            CloudFunctionName cfName = 
CloudFunctionName.of(getConfiguration().getProject(),
+                    getConfiguration().getLocation(), 
getConfiguration().getFunctionName());
+            CallFunctionRequest request = 
CallFunctionRequest.newBuilder().setName(cfName.toString()).setData(data)
+                    .build();
             CallFunctionResponse result = client.callFunction(request);
             Message message = getMessageForResponse(exchange);
             message.setBody(result);
         }
     }
 
+    private void generateDownloadUrl(CloudFunctionsServiceClient client, 
Exchange exchange)
+            throws InvalidPayloadException {
+        if (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof GenerateDownloadUrlRequest) {
+                try {
+                    GenerateDownloadUrlResponse result = client
+                            .generateDownloadUrl((GenerateDownloadUrlRequest) 
payload);
+                    Message message = getMessageForResponse(exchange);
+                    message.setBody(result);
+                } catch (ApiException ae) {
+                    LOG.trace("generateDownloadUrl command returned the error 
code {}", ae.getStatusCode());
+                    throw ae;
+                }
+            }
+        } else {
+            CloudFunctionName cfName = 
CloudFunctionName.of(getConfiguration().getProject(),
+                    getConfiguration().getLocation(), 
getConfiguration().getFunctionName());
+            GenerateDownloadUrlRequest request = 
GenerateDownloadUrlRequest.newBuilder().setName(cfName.toString())
+                    .build();
+            GenerateDownloadUrlResponse result = 
client.generateDownloadUrl(request);
+            Message message = getMessageForResponse(exchange);
+            message.setBody(result);
+        }
+    }
+
+    private void generateUploadUrl(CloudFunctionsServiceClient client, 
Exchange exchange)
+            throws InvalidPayloadException {
+        if (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof GenerateUploadUrlRequest) {
+                try {
+                    GenerateUploadUrlResponse result = 
client.generateUploadUrl((GenerateUploadUrlRequest) payload);
+                    Message message = getMessageForResponse(exchange);
+                    message.setBody(result);
+                } catch (ApiException ae) {
+                    LOG.trace("generateUploadUrl command returned the error 
code {}", ae.getStatusCode());
+                    throw ae;
+                }
+            }
+        } else {
+            LocationName locationName = 
LocationName.of(getConfiguration().getProject(),
+                    getConfiguration().getLocation());
+            GenerateUploadUrlRequest request = 
GenerateUploadUrlRequest.newBuilder().setParent(locationName.toString())
+                    .build();
+            GenerateUploadUrlResponse result = 
client.generateUploadUrl(request);
+            Message message = getMessageForResponse(exchange);
+            message.setBody(result);
+        }
+    }
+
+    private void createFunction(CloudFunctionsServiceClient client, Exchange 
exchange)
+            throws InvalidPayloadException, InterruptedException, 
ExecutionException {
+        if (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof CreateFunctionRequest) {
+                try {
+                    CloudFunction result = 
client.createFunctionAsync((CreateFunctionRequest) payload).get();
+                    Message message = getMessageForResponse(exchange);
+                    message.setBody(result);
+                } catch (ApiException ae) {
+                    LOG.trace("createFunction command returned the error code 
{}", ae.getStatusCode());
+                    throw ae;
+                }
+            }
+        } else {
+            LocationName locationName = 
LocationName.of(getConfiguration().getProject(),
+                    getConfiguration().getLocation());
+            CreateFunctionRequest request = 
CreateFunctionRequest.newBuilder().setLocation(locationName.toString())
+                    .setFunction(CloudFunction.newBuilder().build()).build(); 
// TODO check if add function name
+            CloudFunction result = client.createFunctionAsync(request).get();
+            Message message = getMessageForResponse(exchange);
+            message.setBody(result);
+        }
+    }
+
+    private void updateFunction(CloudFunctionsServiceClient client, Exchange 
exchange)
+            throws InvalidPayloadException, InterruptedException, 
ExecutionException {
+        if (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof UpdateFunctionRequest) {
+                try {
+                    CloudFunction result = 
client.updateFunctionAsync((UpdateFunctionRequest) payload).get();
+                    Message message = getMessageForResponse(exchange);
+                    message.setBody(result);
+                } catch (ApiException ae) {
+                    LOG.trace("updateFunction command returned the error code 
{}", ae.getStatusCode());
+                    throw ae;
+                }
+            }
+        } else {
+            throw new IllegalArgumentException("updateFunction supported only 
in pojo mode");   // TODO check
+        }
+    }
+
+    private void deleteFunction(CloudFunctionsServiceClient client, Exchange 
exchange)
+            throws InvalidPayloadException, InterruptedException, 
ExecutionException {
+        if (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof DeleteFunctionRequest) {
+                try {
+                    Empty result = 
client.deleteFunctionAsync((DeleteFunctionRequest) payload).get();
+                    Message message = getMessageForResponse(exchange);
+                    message.setBody(result);
+                } catch (ApiException ae) {
+                    LOG.trace("deleteFunction command returned the error code 
{}", ae.getStatusCode());
+                    throw ae;
+                }
+            }
+        } else {
+            CloudFunctionName cfName = 
CloudFunctionName.of(getConfiguration().getProject(),
+                    getConfiguration().getLocation(), 
getConfiguration().getFunctionName());
+            DeleteFunctionRequest request = 
DeleteFunctionRequest.newBuilder().setName(cfName.toString()).build();
+            Empty result = client.deleteFunctionAsync(request).get();
+            Message message = getMessageForResponse(exchange);
+            message.setBody(result);
+        }
+    }
+
     private GoogleCloudFunctionsOperations determineOperation(Exchange 
exchange) {
         GoogleCloudFunctionsOperations operation = 
exchange.getIn().getHeader(GoogleCloudFunctionsConstants.OPERATION,
                 GoogleCloudFunctionsOperations.class);
         if (operation == null) {
-            operation = getConfiguration().getOperation() == null ? 
GoogleCloudFunctionsOperations.callFunction
+            operation = getConfiguration().getOperation() == null
+                    ? GoogleCloudFunctionsOperations.callFunction
                     : getConfiguration().getOperation();
         }
         return operation;
diff --git 
a/components/camel-google-functions/src/test/java/org/apache/camel/component/google/functions/unit/GoogleCloudFunctionsComponentTest.java
 
b/components/camel-google-functions/src/test/java/org/apache/camel/component/google/functions/unit/GoogleCloudFunctionsComponentTest.java
index 898684b..f478683 100644
--- 
a/components/camel-google-functions/src/test/java/org/apache/camel/component/google/functions/unit/GoogleCloudFunctionsComponentTest.java
+++ 
b/components/camel-google-functions/src/test/java/org/apache/camel/component/google/functions/unit/GoogleCloudFunctionsComponentTest.java
@@ -16,10 +16,6 @@
  */
 package org.apache.camel.component.google.functions.unit;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -31,26 +27,37 @@ import com.google.cloud.functions.v1.CallFunctionResponse;
 import com.google.cloud.functions.v1.CloudFunction;
 import com.google.cloud.functions.v1.CloudFunctionName;
 import com.google.cloud.functions.v1.CloudFunctionStatus;
+import com.google.cloud.functions.v1.CreateFunctionRequest;
+import com.google.cloud.functions.v1.DeleteFunctionRequest;
+import com.google.cloud.functions.v1.GenerateDownloadUrlRequest;
+import com.google.cloud.functions.v1.GenerateDownloadUrlResponse;
+import com.google.cloud.functions.v1.GenerateUploadUrlRequest;
+import com.google.cloud.functions.v1.GenerateUploadUrlResponse;
 import com.google.cloud.functions.v1.GetFunctionRequest;
 import com.google.cloud.functions.v1.ListFunctionsRequest;
 import com.google.cloud.functions.v1.ListFunctionsResponse;
 import com.google.cloud.functions.v1.LocationName;
+import com.google.cloud.functions.v1.UpdateFunctionRequest;
+import com.google.longrunning.Operation;
 import com.google.protobuf.AbstractMessage;
+import com.google.protobuf.Any;
 import com.google.protobuf.Duration;
+import com.google.protobuf.Empty;
+import com.google.protobuf.FieldMask;
 import com.google.protobuf.Timestamp;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseTest {
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-    private static final Logger log = 
LoggerFactory.getLogger(GoogleCloudFunctionsComponentTest.class);
+public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseTest {
 
     @EndpointInject("mock:result")
     private MockEndpoint mock;
@@ -63,25 +70,87 @@ public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseT
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() {
-                //simple routes
-                from("direct:listFunctions").to("google-functions://" + 
functionName + "?project=" + project
-                        + "&location=" + location + 
"&operation=listFunctions").to("mock:result");
-                from("direct:getFunction").to("google-functions://" + 
functionName + "?project=" + project
-                        + "&location=" + location + 
"&operation=getFunction").to("mock:result");
-                from("direct:callFunction").to("google-functions://" + 
functionName + "?project=" + project
-                        + "&location=" + location + 
"&operation=callFunction").to("mock:result");
-                //pojo routes
-                from("direct:listFunctionsPojo").to("google-functions://" + 
functionName + "?project=" + project
-                        + "&location=" + location + 
"&operation=listFunctions&pojoRequest=true").to("mock:result");
-                from("direct:getFunctionPojo").to("google-functions://" + 
functionName + "?project=" + project
-                        + "&location=" + location + 
"&operation=getFunction&pojoRequest=true").to("mock:result");
-                from("direct:callFunctionPojo").to("google-functions://" + 
functionName + "?project=" + project
-                        + "&location=" + location + 
"&operation=callFunction&pojoRequest=true").to("mock:result");
+                // simple routes
+                from("direct:listFunctions")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location + 
"&operation=listFunctions")
+                        .to("mock:result");
+                from("direct:getFunction")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location + 
"&operation=getFunction")
+                        .to("mock:result");
+                from("direct:callFunction")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location + 
"&operation=callFunction")
+                        .to("mock:result");
+
+                from("direct:generateDownloadUrl").to("google-functions://" + 
functionName + "?project="
+                                                      + project + "&location=" 
+ location + "&operation=generateDownloadUrl")
+                        .to("mock:result");
+                from("direct:generateUploadUrl").to("google-functions://" + 
functionName + "?project="
+                                                    + project + "&location=" + 
location + "&operation=generateUploadUrl")
+                        .to("mock:result");
+                from("direct:createFunction")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location + 
"&operation=createFunction")
+                        .to("mock:result");
+                from("direct:updateFunction")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location + 
"&operation=updateFunction")
+                        .to("mock:result");
+                from("direct:deleteFunction")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location + 
"&operation=deleteFunction")
+                        .to("mock:result");
+
+                // pojo routes
+                from("direct:listFunctionsPojo")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location
+                            + "&operation=listFunctions&pojoRequest=true")
+                        .to("mock:result");
+                from("direct:getFunctionPojo")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location
+                            + "&operation=getFunction&pojoRequest=true")
+                        .to("mock:result");
+                from("direct:callFunctionPojo")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location
+                            + "&operation=callFunction&pojoRequest=true")
+                        .to("mock:result");
+
+                from("direct:generateDownloadUrlPojo")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location
+                            + 
"&operation=generateDownloadUrl&pojoRequest=true")
+                        .to("mock:result");
+                from("direct:generateUploadUrlPojo")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location
+                            + "&operation=generateUploadUrl&pojoRequest=true")
+                        .to("mock:result");
+                from("direct:createFunctionPojo")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location
+                            + "&operation=createFunction&pojoRequest=true")
+                        .to("mock:result");
+                from("direct:updateFunctionPojo")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location
+                            + "&operation=updateFunction&pojoRequest=true")
+                        .to("mock:result");
+                from("direct:deleteFunctionPojo")
+                        .to("google-functions://" + functionName + "?project=" 
+ project
+                            + "&location=" + location
+                            + "&operation=deleteFunction&pojoRequest=true")
+                        .to("mock:result");
             }
         };
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     public void listFunctionsTest() throws Exception {
         CloudFunction cf1 = CloudFunction.newBuilder().build();
         CloudFunction cf2 = CloudFunction.newBuilder().build();
@@ -92,6 +161,7 @@ public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseT
 
         Exchange exchange = template.send("direct:listFunctions", 
ExchangePattern.InOut, exc -> {
         });
+
         List<CloudFunction> result = exchange.getMessage().getBody(List.class);
         assertNotNull(result);
         assertEquals(cfList.size(), result.size());
@@ -103,6 +173,7 @@ public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseT
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     public void listFunctionsPojoTest() throws Exception {
         CloudFunction cf1 = CloudFunction.newBuilder().build();
         CloudFunction cf2 = CloudFunction.newBuilder().build();
@@ -135,11 +206,12 @@ public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseT
                 
.setDescription("description-1724546052").setStatus(CloudFunctionStatus.forNumber(0))
                 
.setEntryPoint("entryPoint-1979329474").setRuntime("runtime1550962648")
                 
.setTimeout(Duration.newBuilder().build()).setAvailableMemoryMb(1964533661)
-                
.setServiceAccountEmail("serviceAccountEmail1825953988").setUpdateTime(Timestamp.newBuilder().build())
-                .setVersionId(-670497310).putAllLabels(new HashMap<String, 
String>())
-                .putAllEnvironmentVariables(new HashMap<String, 
String>()).setNetwork("network1843485230")
-                
.setMaxInstances(-330682013).setVpcConnector("vpcConnector2101559652").setBuildId("buildId230943785")
-                .build();
+                .setServiceAccountEmail("serviceAccountEmail1825953988")
+                
.setUpdateTime(Timestamp.newBuilder().build()).setVersionId(-670497310)
+                .putAllLabels(new HashMap<String, String>())
+                .putAllEnvironmentVariables(new HashMap<String, String>())
+                .setNetwork("network1843485230").setMaxInstances(-330682013)
+                
.setVpcConnector("vpcConnector2101559652").setBuildId("buildId230943785").build();
         mockCloudFunctionsService.addResponse(expectedResponse);
         CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
 
@@ -160,18 +232,18 @@ public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseT
     @Test
     public void getFunctionPojoTest() throws Exception {
         CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
-        CloudFunction expectedResponse = CloudFunction.newBuilder()
-                .setName( cfName.toString())
+        CloudFunction expectedResponse = 
CloudFunction.newBuilder().setName(cfName.toString())
                 
.setDescription("description-1724546052").setStatus(CloudFunctionStatus.forNumber(0))
                 
.setEntryPoint("entryPoint-1979329474").setRuntime("runtime1550962648")
                 
.setTimeout(Duration.newBuilder().build()).setAvailableMemoryMb(1964533661)
-                
.setServiceAccountEmail("serviceAccountEmail1825953988").setUpdateTime(Timestamp.newBuilder().build())
-                .setVersionId(-670497310).putAllLabels(new HashMap<String, 
String>())
-                .putAllEnvironmentVariables(new HashMap<String, 
String>()).setNetwork("network1843485230")
-                
.setMaxInstances(-330682013).setVpcConnector("vpcConnector2101559652").setBuildId("buildId230943785")
-                .build();
+                .setServiceAccountEmail("serviceAccountEmail1825953988")
+                
.setUpdateTime(Timestamp.newBuilder().build()).setVersionId(-670497310)
+                .putAllLabels(new HashMap<String, String>())
+                .putAllEnvironmentVariables(new HashMap<String, String>())
+                .setNetwork("network1843485230").setMaxInstances(-330682013)
+                
.setVpcConnector("vpcConnector2101559652").setBuildId("buildId230943785").build();
         mockCloudFunctionsService.addResponse(expectedResponse);
-        
+
         Exchange exchange = template.send("direct:getFunctionPojo", 
ExchangePattern.InOut, exc -> {
             exc.getIn().setBody(cfName);
         });
@@ -190,8 +262,8 @@ public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseT
     @Test
     public void callFunctionTest() throws Exception {
         CallFunctionResponse expectedResponse = 
CallFunctionResponse.newBuilder()
-                
.setExecutionId("executionId-454906285").setResult("result-934426595").setError("error96784904")
-                .build();
+                
.setExecutionId("executionId-454906285").setResult("result-934426595")
+                .setError("error96784904").build();
         mockCloudFunctionsService.addResponse(expectedResponse);
 
         CloudFunctionName name = CloudFunctionName.of(project, location, 
functionName);
@@ -216,13 +288,14 @@ public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseT
     @Test
     public void callFunctionPojoTest() throws Exception {
         CallFunctionResponse expectedResponse = 
CallFunctionResponse.newBuilder()
-                
.setExecutionId("executionId-454906285").setResult("result-934426595").setError("error96784904")
-                .build();
+                
.setExecutionId("executionId-454906285").setResult("result-934426595")
+                .setError("error96784904").build();
         mockCloudFunctionsService.addResponse(expectedResponse);
 
         CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
         String data = "data3076010";
-        CallFunctionRequest request = 
CallFunctionRequest.newBuilder().setName(cfName.toString()).setData(data).build();
+        CallFunctionRequest request = 
CallFunctionRequest.newBuilder().setName(cfName.toString()).setData(data)
+                .build();
 
         Exchange exchange = template.send("direct:callFunctionPojo", 
ExchangePattern.InOut, exc -> {
             exc.getIn().setBody(request);
@@ -240,4 +313,237 @@ public class GoogleCloudFunctionsComponentTest extends 
GoogleCloudFunctionsBaseT
                 GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
     }
 
+    @Test
+    public void generateDownloadUrlTest() throws Exception {
+        CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
+
+        GenerateDownloadUrlResponse expectedResponse = 
GenerateDownloadUrlResponse.newBuilder()
+                .setDownloadUrl("downloadUrl-1211148345").build();
+        mockCloudFunctionsService.addResponse(expectedResponse);
+
+        Exchange exchange = template.send("direct:generateDownloadUrl", 
ExchangePattern.InOut, exc -> {
+        });
+        GenerateDownloadUrlResponse actualResponse = exchange.getMessage()
+                .getBody(GenerateDownloadUrlResponse.class);
+        assertEquals(expectedResponse, actualResponse);
+
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+        GenerateDownloadUrlRequest actualRequest = 
((GenerateDownloadUrlRequest) actualRequests.get(0));
+        assertEquals(cfName.toString(), actualRequest.getName());
+
+    }
+
+    @Test
+    public void generateDownloadUrlPojoTest() throws Exception {
+        CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
+
+        GenerateDownloadUrlResponse expectedResponse = 
GenerateDownloadUrlResponse.newBuilder()
+                .setDownloadUrl("downloadUrl-1211148345").build();
+        mockCloudFunctionsService.addResponse(expectedResponse);
+
+        GenerateDownloadUrlRequest request = 
GenerateDownloadUrlRequest.newBuilder().setName(cfName.toString())
+                .build();
+
+        Exchange exchange = template.send("direct:generateDownloadUrlPojo", 
ExchangePattern.InOut, exc -> {
+            exc.getIn().setBody(request);
+        });
+        GenerateDownloadUrlResponse actualResponse = exchange.getMessage()
+                .getBody(GenerateDownloadUrlResponse.class);
+        assertEquals(expectedResponse, actualResponse);
+
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+        GenerateDownloadUrlRequest actualRequest = 
((GenerateDownloadUrlRequest) actualRequests.get(0));
+        assertEquals(cfName.toString(), actualRequest.getName());
+    }
+
+    @Test
+    public void generateUploadUrlTest() throws Exception {
+        LocationName locationName = LocationName.of(project, location);
+        GenerateUploadUrlResponse expectedResponse = 
GenerateUploadUrlResponse.newBuilder()
+                .setUploadUrl("uploadUrl1239085998").build();
+        mockCloudFunctionsService.addResponse(expectedResponse);
+
+        Exchange exchange = template.send("direct:generateUploadUrl", 
ExchangePattern.InOut, exc -> {
+        });
+        GenerateUploadUrlResponse actualResponse = exchange.getMessage()
+                .getBody(GenerateUploadUrlResponse.class);
+        assertEquals(expectedResponse, actualResponse);
+
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+        GenerateUploadUrlRequest actualRequest = ((GenerateUploadUrlRequest) 
actualRequests.get(0));
+        assertEquals(locationName.toString(), actualRequest.getParent());
+    }
+
+    @Test
+    public void generateUploadUrlTestPojo() throws Exception {
+        LocationName locationName = LocationName.of(project, location);
+        GenerateUploadUrlResponse expectedResponse = 
GenerateUploadUrlResponse.newBuilder()
+                .setUploadUrl("uploadUrl1239085998").build();
+        mockCloudFunctionsService.addResponse(expectedResponse);
+
+        GenerateUploadUrlRequest request = 
GenerateUploadUrlRequest.newBuilder()
+                .setParent(locationName.toString()).build();
+        Exchange exchange = template.send("direct:generateUploadUrlPojo", 
ExchangePattern.InOut, exc -> {
+            exc.getIn().setBody(request);
+        });
+        GenerateUploadUrlResponse actualResponse = exchange.getMessage()
+                .getBody(GenerateUploadUrlResponse.class);
+        assertEquals(expectedResponse, actualResponse);
+
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+        GenerateUploadUrlRequest actualRequest = ((GenerateUploadUrlRequest) 
actualRequests.get(0));
+        assertEquals(locationName.toString(), actualRequest.getParent());
+    }
+
+    @Test
+    public void createFunctionTest() throws Exception {
+        CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
+        CloudFunction expectedResponse = 
CloudFunction.newBuilder().setName(cfName.toString())
+                
.setDescription("description-1724546052").setStatus(CloudFunctionStatus.forNumber(0))
+                
.setEntryPoint("entryPoint-1979329474").setRuntime("runtime1550962648")
+                
.setTimeout(Duration.newBuilder().build()).setAvailableMemoryMb(1964533661)
+                .setServiceAccountEmail("serviceAccountEmail1825953988")
+                
.setUpdateTime(Timestamp.newBuilder().build()).setVersionId(-670497310)
+                .putAllLabels(new HashMap<String, String>())
+                .putAllEnvironmentVariables(new HashMap<String, String>())
+                .setNetwork("network1843485230").setMaxInstances(-330682013)
+                
.setVpcConnector("vpcConnector2101559652").setBuildId("buildId230943785").build();
+        Operation resultOperation = 
Operation.newBuilder().setName("createFunctionTest").setDone(true)
+                .setResponse(Any.pack(expectedResponse)).build();
+        mockCloudFunctionsService.addResponse(resultOperation);
+        Exchange exchange = template.send("direct:createFunction", 
ExchangePattern.InOut, exc -> {
+        });
+        CloudFunction actualResponse = 
exchange.getMessage().getBody(CloudFunction.class);
+        assertEquals(expectedResponse, actualResponse);
+
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+    }
+
+    @Test
+    public void createFunctionTestPojo() throws Exception {
+        CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
+        CloudFunction expectedResponse = 
CloudFunction.newBuilder().setName(cfName.toString())
+                
.setDescription("description-1724546052").setStatus(CloudFunctionStatus.forNumber(0))
+                
.setEntryPoint("entryPoint-1979329474").setRuntime("runtime1550962648")
+                
.setTimeout(Duration.newBuilder().build()).setAvailableMemoryMb(1964533661)
+                .setServiceAccountEmail("serviceAccountEmail1825953988")
+                
.setUpdateTime(Timestamp.newBuilder().build()).setVersionId(-670497310)
+                .putAllLabels(new HashMap<String, String>())
+                .putAllEnvironmentVariables(new HashMap<String, String>())
+                .setNetwork("network1843485230").setMaxInstances(-330682013)
+                
.setVpcConnector("vpcConnector2101559652").setBuildId("buildId230943785").build();
+        Operation resultOperation = 
Operation.newBuilder().setName("createFunctionTest").setDone(true)
+                .setResponse(Any.pack(expectedResponse)).build();
+        mockCloudFunctionsService.addResponse(resultOperation);
+
+        LocationName locationName = LocationName.of(project, location);
+        CreateFunctionRequest request = 
CreateFunctionRequest.newBuilder().setLocation(locationName.toString())
+                .setFunction(CloudFunction.newBuilder().build()).build();
+        Exchange exchange = template.send("direct:createFunctionPojo", 
ExchangePattern.InOut, exc -> {
+            exc.getIn().setBody(request);
+        });
+        CloudFunction actualResponse = 
exchange.getMessage().getBody(CloudFunction.class);
+        assertEquals(expectedResponse, actualResponse);
+
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+    }
+
+    @Disabled
+    @Test
+    public void updateFunctionTest() throws Exception {
+        CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
+        CloudFunction expectedResponse = 
CloudFunction.newBuilder().setName(cfName.toString())
+                
.setDescription("description-1724546052").setStatus(CloudFunctionStatus.forNumber(0))
+                
.setEntryPoint("entryPoint-1979329474").setRuntime("runtime1550962648")
+                
.setTimeout(Duration.newBuilder().build()).setAvailableMemoryMb(1964533661)
+                .setServiceAccountEmail("serviceAccountEmail1825953988")
+                
.setUpdateTime(Timestamp.newBuilder().build()).setVersionId(-670497310)
+                .putAllLabels(new HashMap<String, String>())
+                .putAllEnvironmentVariables(new HashMap<String, String>())
+                .setNetwork("network1843485230").setMaxInstances(-330682013)
+                
.setVpcConnector("vpcConnector2101559652").setBuildId("buildId230943785").build();
+        Operation resultOperation = 
Operation.newBuilder().setName("updateFunctionTest").setDone(true)
+                .setResponse(Any.pack(expectedResponse)).build();
+        mockCloudFunctionsService.addResponse(resultOperation);
+
+        Exchange exchange = template.send("direct:updateFunction", 
ExchangePattern.InOut, exc -> {
+        });
+        CloudFunction actualResponse = 
exchange.getMessage().getBody(CloudFunction.class);
+        assertEquals(expectedResponse, actualResponse);
+
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+    }
+
+    @Test
+    public void updateFunctionTestPojo() throws Exception {
+        CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
+        CloudFunction expectedResponse = 
CloudFunction.newBuilder().setName(cfName.toString())
+                
.setDescription("description-1724546052").setStatus(CloudFunctionStatus.forNumber(0))
+                
.setEntryPoint("entryPoint-1979329474").setRuntime("runtime1550962648")
+                
.setTimeout(Duration.newBuilder().build()).setAvailableMemoryMb(1964533661)
+                .setServiceAccountEmail("serviceAccountEmail1825953988")
+                
.setUpdateTime(Timestamp.newBuilder().build()).setVersionId(-670497310)
+                .putAllLabels(new HashMap<String, String>())
+                .putAllEnvironmentVariables(new HashMap<String, String>())
+                .setNetwork("network1843485230").setMaxInstances(-330682013)
+                
.setVpcConnector("vpcConnector2101559652").setBuildId("buildId230943785").build();
+        Operation resultOperation = 
Operation.newBuilder().setName("updateFunctionTest").setDone(true)
+                .setResponse(Any.pack(expectedResponse)).build();
+        mockCloudFunctionsService.addResponse(resultOperation);
+
+        UpdateFunctionRequest request = UpdateFunctionRequest.newBuilder()
+                .setFunction(CloudFunction.newBuilder().build())
+                .setUpdateMask(FieldMask.newBuilder().build()).build();
+        Exchange exchange = template.send("direct:updateFunctionPojo", 
ExchangePattern.InOut, exc -> {
+            exc.getIn().setBody(request);
+        });
+        CloudFunction actualResponse = 
exchange.getMessage().getBody(CloudFunction.class);
+        assertEquals(expectedResponse, actualResponse);
+
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+    }
+
+    @Test
+    public void deleteFunctionTest() throws Exception {
+        CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
+        Empty expectedResponse = Empty.newBuilder().build();
+        Operation resultOperation = 
Operation.newBuilder().setName(cfName.toString()).setDone(true)
+                .setResponse(Any.pack(expectedResponse)).build();
+        mockCloudFunctionsService.addResponse(resultOperation);
+        Exchange exchange = template.send("direct:deleteFunction", 
ExchangePattern.InOut, exc -> {
+        });
+        Empty actualResponse = exchange.getMessage().getBody(Empty.class);
+        assertNotNull(actualResponse);
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+        DeleteFunctionRequest actualRequest = ((DeleteFunctionRequest) 
actualRequests.get(0));
+        assertEquals(cfName.toString(), actualRequest.getName());
+    }
+
+    @Test
+    public void deleteFunctionPojoTest() throws Exception {
+        CloudFunctionName cfName = CloudFunctionName.of(project, location, 
functionName);
+        Empty expectedResponse = Empty.newBuilder().build();
+        Operation resultOperation = 
Operation.newBuilder().setName(cfName.toString()).setDone(true)
+                .setResponse(Any.pack(expectedResponse)).build();
+        mockCloudFunctionsService.addResponse(resultOperation);
+        DeleteFunctionRequest request = 
DeleteFunctionRequest.newBuilder().setName(cfName.toString()).build();
+        Exchange exchange = template.send("direct:deleteFunctionPojo", 
ExchangePattern.InOut, exc -> {
+            exc.getIn().setBody(request);
+        });
+        Empty actualResponse = exchange.getMessage().getBody(Empty.class);
+        assertNotNull(actualResponse);
+        List<AbstractMessage> actualRequests = 
mockCloudFunctionsService.getRequests();
+        assertEquals(1, actualRequests.size());
+        DeleteFunctionRequest actualRequest = ((DeleteFunctionRequest) 
actualRequests.get(0));
+        assertEquals(cfName.toString(), actualRequest.getName());
+    }
 }
diff --git 
a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudFunctionsEndpointBuilderFactory.java
 
b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudFunctionsEndpointBuilderFactory.java
index 230ef09..2ab5f20 100644
--- 
a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudFunctionsEndpointBuilderFactory.java
+++ 
b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudFunctionsEndpointBuilderFactory.java
@@ -247,7 +247,12 @@ public interface 
GoogleCloudFunctionsEndpointBuilderFactory {
     enum GoogleCloudFunctionsOperations {
         listFunctions,
         getFunction,
-        callFunction;
+        callFunction,
+        generateDownloadUrl,
+        generateUploadUrl,
+        createFunction,
+        updateFunction,
+        deleteFunction;
     }
 
     public interface GoogleCloudFunctionsBuilders {

Reply via email to