diff --git a/pass-deposit-services/deposit-core/pom.xml b/pass-deposit-services/deposit-core/pom.xml index d46ca1b5..41cbe2ec 100644 --- a/pass-deposit-services/deposit-core/pom.xml +++ b/pass-deposit-services/deposit-core/pom.xml @@ -92,6 +92,11 @@ spring-cloud-aws-starter-s3 + + io.awspring.cloud + spring-cloud-aws-starter-parameter-store + + org.jsoup jsoup diff --git a/pass-deposit-services/deposit-core/src/main/resources/application.properties b/pass-deposit-services/deposit-core/src/main/resources/application.properties index d88ed61e..9cd3b7f9 100644 --- a/pass-deposit-services/deposit-core/src/main/resources/application.properties +++ b/pass-deposit-services/deposit-core/src/main/resources/application.properties @@ -16,9 +16,9 @@ spring.jms.listener.auto-startup=true aws.sqs.endpoint.override= -pass.client.url=${PASS_CLIENT_URL:localhost:8080} -pass.client.user=${PASS_CLIENT_USER:fakeuser} -pass.client.password=${PASS_CLIENT_PASSWORD:fakepassword} +pass.client.url=${PASS_CORE_URL:localhost:8080} +pass.client.user=${PASS_CORE_USER:fakeuser} +pass.client.password=${PASS_CORE_PASSWORD:fakepassword} pmc.ftp.host=${PMC_FTP_HOST:localhost} pmc.ftp.port=${PMC_FTP_PORT:21} diff --git a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/AbstractDepositSubmissionIT.java b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/AbstractDepositSubmissionIT.java index b2671e06..37326fe7 100644 --- a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/AbstractDepositSubmissionIT.java +++ b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/AbstractDepositSubmissionIT.java @@ -93,8 +93,8 @@ public abstract class AbstractDepositSubmissionIT { @Container protected static final GenericContainer PASS_CORE_CONTAINER = new GenericContainer<>(PASS_CORE_IMG) .withEnv("PASS_CORE_BASE_URL", "http://localhost:8080") - .withEnv("PASS_CORE_BACKEND_USER", "backend") - .withEnv("PASS_CORE_BACKEND_PASSWORD", "backend") + .withEnv("PASS_CORE_USER", "backend") + .withEnv("PASS_CORE_PASSWORD", "backend") .waitingFor(Wait.forHttp("/data/grant").forStatusCode(200).withBasicCredentials("backend", "backend")) .withExposedPorts(8080); diff --git a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/config/spring/AwsParamStoreConfigTest.java b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/config/spring/AwsParamStoreConfigTest.java new file mode 100644 index 00000000..a631e493 --- /dev/null +++ b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/config/spring/AwsParamStoreConfigTest.java @@ -0,0 +1,87 @@ +/* + * Copyright 2024 Johns Hopkins University + * + * Licensed 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.eclipse.pass.deposit.config.spring; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.testcontainers.containers.localstack.LocalStackContainer.Service.SSM; + +import java.io.IOException; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.core.env.Environment; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.testcontainers.containers.localstack.LocalStackContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +@SpringBootTest( + properties = { + "spring.cloud.aws.credentials.access-key=noop", + "spring.cloud.aws.credentials.secret-key=noop", + "spring.cloud.aws.region.static=us-east-1", + "spring.jms.listener.auto-startup=false" + }) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@Testcontainers +class AwsParamStoreConfigTest { + private static final DockerImageName LOCALSTACK_IMG = + DockerImageName.parse("localstack/localstack:3.1.0"); + + @Container + private static final LocalStackContainer localStack = new LocalStackContainer(LOCALSTACK_IMG).withServices(SSM); + + @Autowired private Environment environment; + + @DynamicPropertySource + static void properties(DynamicPropertyRegistry registry) { + registry.add("spring.cloud.aws.parameterstore.endpoint", () -> localStack.getEndpoint().toString()); + registry.add("spring.cloud.aws.parameterstore.region", localStack::getRegion); + registry.add("spring.cloud.aws.endpoint", () -> localStack.getEndpoint().toString()); + registry.add("spring.cloud.aws.region.static", localStack::getRegion); + registry.add("spring.config.import[0]", () -> "aws-parameterstore:/config/pass-core-client/"); + registry.add("spring.config.import[1]", () -> "aws-parameterstore:/config/pass-deposit/"); + } + + @BeforeAll + static void beforeAll() throws IOException, InterruptedException { + localStack.execInContainer("awslocal", "ssm", "put-parameter", + "--name", "/config/pass-core-client/PASS_CORE_PASSWORD", + "--value", "aws-param-store-core-pw", + "--type", "SecureString"); + localStack.execInContainer("awslocal", "ssm", "put-parameter", + "--name", "/config/pass-deposit/DSPACE_PASSWORD", + "--value", "aws-param-store-dspace-pw", + "--type", "SecureString"); + } + + @Test + public void testLoadPropFromParamStore() { + String userNameProp = environment.getProperty("dspace.user"); + assertEquals("test@test.edu", userNameProp); + String dspacePwProp = environment.getProperty("dspace.password"); + assertEquals("aws-param-store-dspace-pw", dspacePwProp); + String passClientPwProp = environment.getProperty("pass.client.password"); + assertEquals("aws-param-store-core-pw", passClientPwProp); + } + +} diff --git a/pass-deposit-services/deposit-core/src/test/resources/logback-test.xml b/pass-deposit-services/deposit-core/src/test/resources/logback-test.xml index 30735b03..c1c9d7b2 100644 --- a/pass-deposit-services/deposit-core/src/test/resources/logback-test.xml +++ b/pass-deposit-services/deposit-core/src/test/resources/logback-test.xml @@ -31,16 +31,8 @@ - - - - - - \ No newline at end of file diff --git a/pass-deposit-services/pom.xml b/pass-deposit-services/pom.xml index 444940fd..ba6144cd 100644 --- a/pass-deposit-services/pom.xml +++ b/pass-deposit-services/pom.xml @@ -459,6 +459,7 @@ org.springframework*:: software.amazon.awssdk:: + io.awspring.cloud:: org.apache.abdera:: junit:junit: