Skip to content

Commit

Permalink
Add option for using aws param store in deposit services
Browse files Browse the repository at this point in the history
  • Loading branch information
rpoet-jh committed Oct 7, 2024
1 parent 471bd10 commit 32d32d9
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 13 deletions.
5 changes: 5 additions & 0 deletions pass-deposit-services/deposit-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,11 @@
<artifactId>spring-cloud-aws-starter-s3</artifactId>
</dependency>

<dependency>
<groupId>io.awspring.cloud</groupId>
<artifactId>spring-cloud-aws-starter-parameter-store</artifactId>
</dependency>

<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
Original file line number Diff line number Diff line change
@@ -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("[email protected]", 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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,8 @@
<logger name="org.eclipse" additivity="false" level="${org.eclipse.level:-WARN}">
<appender-ref ref="STDERR"/>
</logger>
<logger name="org.eclipse.pass.deposit" additivity="false"
level="${org.eclipse.pass.deposit.level:-DEBUG}">
<appender-ref ref="STDERR"/>
</logger>
<logger name="org.eclipse.pass.client" additivity="false"
level="${org.eclipse.pass.client.level:-ERROR}">
<appender-ref ref="STDERR"/>
</logger>
<logger name="org.testcontainers" additivity="false"
level="${org.testcontainers:-INFO}">
<appender-ref ref="STDERR"/>
</logger>
</configuration>
1 change: 1 addition & 0 deletions pass-deposit-services/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,7 @@
<!-- These come from bundled jars -->
<ignoredDependency>org.springframework*::</ignoredDependency>
<ignoredDependency>software.amazon.awssdk::</ignoredDependency>
<ignoredDependency>io.awspring.cloud::</ignoredDependency>
<!-- Comes from outdated sword2 client -->
<ignoredDependency>org.apache.abdera::</ignoredDependency>
<ignoredDependency>junit:junit:</ignoredDependency>
Expand Down

0 comments on commit 32d32d9

Please sign in to comment.