This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch CAMEL-21186 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 3d4d33b33bc35243372f9b01c5005702de3754cd Author: Andrea Cosentino <[email protected]> AuthorDate: Wed Sep 11 10:08:16 2024 +0200 CAMEL-21186 - AWS Secrets Manager: Support Batch Retrieval for Secrets Signed-off-by: Andrea Cosentino <[email protected]> --- .../aws/secretsmanager/aws-secrets-manager.json | 12 +-- .../secretsmanager/SecretsManagerConstants.java | 4 + .../secretsmanager/SecretsManagerOperations.java | 1 + .../aws/secretsmanager/SecretsManagerProducer.java | 79 +++++++++++++----- ...sManagerBatchGetSecretProducerLocalstackIT.java | 93 ++++++++++++++++++++++ 5 files changed, 165 insertions(+), 24 deletions(-) diff --git a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json index f48b89e7b99..9c7d8c9103c 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json +++ b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json @@ -28,7 +28,7 @@ "binaryPayload": { "index": 0, "kind": "property", "displayName": "Binary Payload", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set if the secret is binary or not" }, "configuration": { "index": 1, "kind": "property", "displayName": "Configuration", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "Component configuration" }, "lazyStartProducer": { "index": 2, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail [...] - "operation": { "index": 3, "kind": "property", "displayName": "Operation", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", "enum": [ "listSecrets", "createSecret", "getSecret", "describeSecret", "deleteSecret", "rotateSecret", "updateSecret", "restoreSecret", "replicateSecretToRegions" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configur [...] + "operation": { "index": 3, "kind": "property", "displayName": "Operation", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", "enum": [ "listSecrets", "createSecret", "getSecret", "batchGetSecret", "describeSecret", "deleteSecret", "rotateSecret", "updateSecret", "restoreSecret", "replicateSecretToRegions" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret" [...] "overrideEndpoint": { "index": 4, "kind": "property", "displayName": "Override Endpoint", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set the need for overriding the endpoint. This option needs to be us [...] "pojoRequest": { "index": 5, "kind": "property", "displayName": "Pojo Request", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "If we want to use a POJO request as body or not" }, "profileCredentialsName": { "index": 6, "kind": "property", "displayName": "Profile Credentials Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "If using a profile credentials provider, this parameter will set the p [...] @@ -55,14 +55,16 @@ "CamelAwsSecretsManagerSecretName": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_NAME" }, "CamelAwsSecretsManagerSecretDescription": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The description of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_DESCRIPTION" }, "CamelAwsSecretsManagerSecretId": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ARN or name of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_ID" }, - "CamelAwsSecretsManagerLambdaRotationFunctionArn": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ARN of the Lambda rotation function that can rotate the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#LAMBDA_ROTATION_FUNCTION_ARN" }, - "CamelAwsSecretsManagerSecretVersionId": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The unique identifier of the version of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_VERSION_ID" }, - "CamelAwsSecretsManagerSecretReplicationRegions": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A comma separated list of Regions in which to replicate the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_REPLICATION_REGIONS" } + "CamelAwsSecretsManagerSecretIds": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A comma separated list of the ARN or name of the secrets.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_IDS" }, + "CamelAwsSecretsManagerLambdaRotationFunctionArn": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ARN of the Lambda rotation function that can rotate the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#LAMBDA_ROTATION_FUNCTION_ARN" }, + "CamelAwsSecretsManagerSecretVersionId": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The unique identifier of the version of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_VERSION_ID" }, + "CamelAwsSecretsManagerSecretVersionIds": { "index": 8, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The unique identifier of the version of the secrets in batch operation.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_VERSION_IDS" }, + "CamelAwsSecretsManagerSecretReplicationRegions": { "index": 9, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A comma separated list of Regions in which to replicate the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_REPLICATION_REGIONS" } }, "properties": { "label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Logical name" }, "binaryPayload": { "index": 1, "kind": "parameter", "displayName": "Binary Payload", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set if the secret is binary or not" }, - "operation": { "index": 2, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", "enum": [ "listSecrets", "createSecret", "getSecret", "describeSecret", "deleteSecret", "rotateSecret", "updateSecret", "restoreSecret", "replicateSecretToRegions" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configu [...] + "operation": { "index": 2, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", "enum": [ "listSecrets", "createSecret", "getSecret", "batchGetSecret", "describeSecret", "deleteSecret", "rotateSecret", "updateSecret", "restoreSecret", "replicateSecretToRegions" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret [...] "overrideEndpoint": { "index": 3, "kind": "parameter", "displayName": "Override Endpoint", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set the need for overriding the endpoint. This option needs to be u [...] "pojoRequest": { "index": 4, "kind": "parameter", "displayName": "Pojo Request", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "If we want to use a POJO request as body or not" }, "profileCredentialsName": { "index": 5, "kind": "parameter", "displayName": "Profile Credentials Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "If using a profile credentials provider, this parameter will set the [...] diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java index ad3d0e5da8c..7862cc90c97 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java +++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java @@ -32,10 +32,14 @@ public interface SecretsManagerConstants { String SECRET_DESCRIPTION = "CamelAwsSecretsManagerSecretDescription"; @Metadata(description = "The ARN or name of the secret.", javaType = "String") String SECRET_ID = "CamelAwsSecretsManagerSecretId"; + @Metadata(description = "A comma separated list of the ARN or name of the secrets.", javaType = "String") + String SECRET_IDS = "CamelAwsSecretsManagerSecretIds"; @Metadata(description = "The ARN of the Lambda rotation function that can rotate the secret.", javaType = "String") String LAMBDA_ROTATION_FUNCTION_ARN = "CamelAwsSecretsManagerLambdaRotationFunctionArn"; @Metadata(description = "The unique identifier of the version of the secret.", javaType = "String") String SECRET_VERSION_ID = "CamelAwsSecretsManagerSecretVersionId"; + @Metadata(description = "The unique identifier of the version of the secrets in batch operation.", javaType = "String") + String SECRET_VERSION_IDS = "CamelAwsSecretsManagerSecretVersionIds"; @Metadata(description = "A comma separated list of Regions in which to replicate the secret.", javaType = "String") String SECRET_REPLICATION_REGIONS = "CamelAwsSecretsManagerSecretReplicationRegions"; } diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java index c8bc0284aae..a4c6e51b627 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java +++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java @@ -21,6 +21,7 @@ public enum SecretsManagerOperations { listSecrets, createSecret, getSecret, + batchGetSecret, describeSecret, deleteSecret, rotateSecret, diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java index 40e42a9d8fe..4e06c57263b 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java +++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java @@ -16,7 +16,10 @@ */ package org.apache.camel.component.aws.secretsmanager; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Base64; +import java.util.List; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; @@ -33,26 +36,8 @@ import org.slf4j.LoggerFactory; import software.amazon.awssdk.awscore.exception.AwsServiceException; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient; -import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest; -import software.amazon.awssdk.services.secretsmanager.model.CreateSecretResponse; -import software.amazon.awssdk.services.secretsmanager.model.DeleteSecretRequest; -import software.amazon.awssdk.services.secretsmanager.model.DeleteSecretResponse; -import software.amazon.awssdk.services.secretsmanager.model.DescribeSecretRequest; -import software.amazon.awssdk.services.secretsmanager.model.DescribeSecretResponse; -import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest; -import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse; -import software.amazon.awssdk.services.secretsmanager.model.ListSecretsRequest; +import software.amazon.awssdk.services.secretsmanager.model.*; import software.amazon.awssdk.services.secretsmanager.model.ListSecretsRequest.Builder; -import software.amazon.awssdk.services.secretsmanager.model.ListSecretsResponse; -import software.amazon.awssdk.services.secretsmanager.model.ReplicaRegionType; -import software.amazon.awssdk.services.secretsmanager.model.ReplicateSecretToRegionsRequest; -import software.amazon.awssdk.services.secretsmanager.model.ReplicateSecretToRegionsResponse; -import software.amazon.awssdk.services.secretsmanager.model.RestoreSecretRequest; -import software.amazon.awssdk.services.secretsmanager.model.RestoreSecretResponse; -import software.amazon.awssdk.services.secretsmanager.model.RotateSecretRequest; -import software.amazon.awssdk.services.secretsmanager.model.RotateSecretResponse; -import software.amazon.awssdk.services.secretsmanager.model.UpdateSecretRequest; -import software.amazon.awssdk.services.secretsmanager.model.UpdateSecretResponse; /** * A Producer which sends messages to the Amazon Secrets Manager Service SDK v2 @@ -82,6 +67,9 @@ public class SecretsManagerProducer extends DefaultProducer { case getSecret: getSecret(getEndpoint().getSecretsManagerClient(), exchange); break; + case batchGetSecret: + batchGetSecret(getEndpoint().getSecretsManagerClient(), exchange); + break; case describeSecret: describeSecret(getEndpoint().getSecretsManagerClient(), exchange); break; @@ -407,6 +395,59 @@ public class SecretsManagerProducer extends DefaultProducer { message.setBody(result); } + private void batchGetSecret(SecretsManagerClient secretsManagerClient, Exchange exchange) + throws InvalidPayloadException { + BatchGetSecretValueRequest request = null; + BatchGetSecretValueResponse result; + if (getConfiguration().isPojoRequest()) { + request = exchange.getIn().getMandatoryBody(BatchGetSecretValueRequest.class); + } else { + BatchGetSecretValueRequest.Builder builder = BatchGetSecretValueRequest.builder(); + if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(SecretsManagerConstants.SECRET_IDS))) { + List<String> secretIds + = Arrays.asList( + exchange.getIn().getHeader(SecretsManagerConstants.SECRET_IDS, String.class).split(",")); + builder.secretIdList(secretIds); + } else { + throw new IllegalArgumentException("Secret Ids must be specified"); + } + request = builder.build(); + } + try { + result = secretsManagerClient.batchGetSecretValue(request); + } catch (AwsServiceException ase) { + LOG.trace("Batch Get Secret value command returned the error code {}", ase.awsErrorDetails().errorCode()); + throw ase; + } + Message message = getMessageForResponse(exchange); + if (getConfiguration().isBinaryPayload()) { + List<String> secretsReturned = new ArrayList<String>(); + if (!result.secretValues().isEmpty()) { + for (SecretValueEntry entry : result.secretValues()) { + secretsReturned.add(new String(Base64.getDecoder().decode(entry.secretBinary().asByteBuffer()).array())); + } + } + message.setBody(secretsReturned); + } else { + List<String> secretsReturned = new ArrayList<String>(); + if (!result.secretValues().isEmpty()) { + for (SecretValueEntry entry : result.secretValues()) { + secretsReturned.add(entry.secretString()); + } + } + message.setBody(secretsReturned); + } + List<String> versionIds = new ArrayList<String>(); + if (!result.secretValues().isEmpty()) { + for (SecretValueEntry entry : result.secretValues()) { + if (ObjectHelper.isNotEmpty(entry.versionId())) { + versionIds.add(entry.versionId()); + } + } + } + exchange.getMessage().setHeader(SecretsManagerConstants.SECRET_VERSION_IDS, versionIds); + } + public static Message getMessageForResponse(final Exchange exchange) { return exchange.getMessage(); } diff --git a/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerBatchGetSecretProducerLocalstackIT.java b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerBatchGetSecretProducerLocalstackIT.java new file mode 100644 index 00000000000..188b1d4ab23 --- /dev/null +++ b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerBatchGetSecretProducerLocalstackIT.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.aws.secretsmanager.integration; + +import java.util.List; + +import org.apache.camel.EndpointInject; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; +import software.amazon.awssdk.services.secretsmanager.model.CreateSecretResponse; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class SecretsManagerBatchGetSecretProducerLocalstackIT extends AwsSecretsManagerBaseTest { + + @EndpointInject("mock:result") + private MockEndpoint mock; + + @Test + public void createSecretTest() { + + mock.expectedMessageCount(1); + Exchange sec1 = template.request("direct:createSecret", new Processor() { + @Override + public void process(Exchange exchange) { + exchange.getIn().setHeader(SecretsManagerConstants.SECRET_NAME, "TestSecret2"); + exchange.getIn().setBody("Secret 2"); + } + }); + + Exchange sec2 = template.request("direct:createSecret", new Processor() { + @Override + public void process(Exchange exchange) { + exchange.getIn().setHeader(SecretsManagerConstants.SECRET_NAME, "TestSecret1"); + exchange.getIn().setBody("Secret 1"); + } + }); + + CreateSecretResponse resultGet1 = (CreateSecretResponse) sec1.getIn().getBody(); + assertNotNull(resultGet1); + + CreateSecretResponse resultGet2 = (CreateSecretResponse) sec2.getIn().getBody(); + assertNotNull(resultGet2); + + Exchange exchangeFinal = template.request("direct:batchGetSecret", new Processor() { + @Override + public void process(Exchange exchange) { + String secretsIds = resultGet1.arn() + "," + resultGet2.arn(); + exchange.getIn().setHeader(SecretsManagerConstants.SECRET_IDS, secretsIds); + } + }); + + List<String> secrets = exchangeFinal.getIn().getBody(List.class); + assertEquals(2, secrets.size()); + assertEquals("Secret 2", secrets.get(0)); + assertEquals("Secret 1", secrets.get(1)); + assertEquals(2, exchangeFinal.getMessage().getHeader(SecretsManagerConstants.SECRET_VERSION_IDS, List.class).size()); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:createSecret") + .to("aws-secrets-manager://test?operation=createSecret"); + + from("direct:batchGetSecret") + .to("aws-secrets-manager://test?operation=batchGetSecret") + .to("mock:result"); + } + }; + } +}
