Skip to content

Commit c8793da

Browse files
committed
More testing
1 parent 86fca8e commit c8793da

File tree

3 files changed

+71
-7
lines changed

3 files changed

+71
-7
lines changed

powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/DynamoDBProvider.java

+21-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@
1212
import java.util.Map;
1313
import java.util.stream.Collectors;
1414

15+
/**
16+
* Implements a {@link ParamProvider} on top of DynamoDB. The schema of the table
17+
* is described in the Python powertools documentation.
18+
*
19+
* @see <a href="https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/parameters/#dynamodbprovider">Python DynamoDB provider</a>
20+
*
21+
*/
1522
public class DynamoDBProvider extends BaseProvider {
1623

1724
private final DynamoDbClient client;
@@ -20,8 +27,8 @@ public class DynamoDBProvider extends BaseProvider {
2027
public DynamoDBProvider(CacheManager cacheManager, String tableName) {
2128
this(cacheManager, DynamoDbClient.builder()
2229
.httpClientBuilder(UrlConnectionHttpClient.builder())
23-
//.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
24-
//.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())))
30+
.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
31+
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())))
2532
.build(),
2633
tableName
2734
);
@@ -34,6 +41,12 @@ public DynamoDBProvider(CacheManager cacheManager, String tableName) {
3441
this.tableName = tableName;
3542
}
3643

44+
/**
45+
* Return a single value from the DynamoDB parameter provider.
46+
*
47+
* @param key key of the parameter
48+
* @return The value, if it exists, null if it doesn't. Throws if the row exists but doesn't match the schema.
49+
*/
3750
@Override
3851
protected String getValue(String key) {
3952
GetItemResponse resp = client.getItem(GetItemRequest.builder()
@@ -52,6 +65,12 @@ protected String getValue(String key) {
5265
return null;
5366
}
5467

68+
/**
69+
* Returns multiple values from the DynamoDB parameter provider.
70+
*
71+
* @param path Parameter store path
72+
* @return All values matching the given path, and an empty map if none do. Throws if any records exist that don't match the schema.
73+
*/
5574
@Override
5675
protected Map<String, String> getMultipleValues(String path) {
5776

powertools-parameters/src/test/java/software/amazon/lambda/powertools/parameters/DynamoDBProviderE2ETest.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ public class DynamoDBProviderE2ETest {
2626

2727
final String ParamsTestTable = "ddb-params-test";
2828
final String MultiparamsTestTable = "ddb-multiparams-test";
29-
private DynamoDbClient ddbClient;
29+
private final DynamoDbClient ddbClient;
3030

3131
public DynamoDBProviderE2ETest() {
3232
// Create a DDB client to inject test data into our test tables
3333
ddbClient = DynamoDbClient.builder()
3434
.httpClientBuilder(UrlConnectionHttpClient.builder())
3535
.build();
36+
37+
3638
}
3739

3840
@Test
@@ -48,10 +50,10 @@ public void TestGetValue() {
4850
.build());
4951

5052
// Act
51-
DynamoDBProvider provider = new DynamoDBProvider(new CacheManager(), ParamsTestTable);
53+
DynamoDBProvider provider = makeProvider(ParamsTestTable);
54+
String value = provider.getValue("test_param");
5255

5356
// Assert
54-
String value = provider.getValue("test_param");
5557
assertThat(value).isEqualTo("the_value_is_hello!");
5658
}
5759

@@ -78,12 +80,19 @@ public void TestGetValues() {
7880
.build());
7981

8082
// Act
81-
DynamoDBProvider provider = new DynamoDBProvider(new CacheManager(), MultiparamsTestTable);
83+
DynamoDBProvider provider = makeProvider(MultiparamsTestTable);
8284
Map<String, String> values = provider.getMultipleValues("test_param");
8385

8486
// Assert
8587
assertThat(values.size()).isEqualTo(2);
8688
assertThat(values.get("test_param_part_1")).isEqualTo("the_value_is_hello!");
8789
assertThat(values.get("test_param_part_2")).isEqualTo("the_value_is_still_hello!");
8890
}
91+
92+
private DynamoDBProvider makeProvider(String tableName) {
93+
return new DynamoDBProvider(new CacheManager(), DynamoDbClient.builder()
94+
.httpClientBuilder(UrlConnectionHttpClient.builder()).build(),
95+
tableName);
96+
}
97+
8998
}

powertools-parameters/src/test/java/software/amazon/lambda/powertools/parameters/DynamoDBProviderTest.java

+37-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import java.util.HashMap;
1515
import java.util.Map;
16+
import java.util.UUID;
1617

1718
import static org.assertj.core.api.Assertions.assertThat;
1819
import static org.mockito.MockitoAnnotations.openMocks;
@@ -95,7 +96,7 @@ public void getValueWithMalformedRowThrows() {
9596
}
9697

9798

98-
@Test
99+
@Test
99100
public void getValues() {
100101

101102
// Arrange
@@ -128,4 +129,39 @@ public void getValues() {
128129
assertThat(queryRequestCaptor.getValue().keyConditionExpression()).isEqualTo("id = :v_id");
129130
assertThat(queryRequestCaptor.getValue().expressionAttributeValues().get(":v_id").s()).isEqualTo(key);
130131
}
132+
133+
@Test
134+
public void getValuesWithoutResultsReturnsNull() {
135+
// Arrange
136+
Mockito.when(client.query(queryRequestCaptor.capture())).thenReturn(
137+
QueryResponse.builder().items().build());
138+
139+
// Act
140+
Map<String, String> values = provider.getMultipleValues(UUID.randomUUID().toString());
141+
142+
// Assert
143+
assertThat(values.size()).isEqualTo(0);
144+
}
145+
146+
@Test
147+
public void getValuesWithMalformedRowThrows() {
148+
// Arrange
149+
String key = "Key1";
150+
HashMap<String, AttributeValue> item1 = new HashMap<String, AttributeValue>();
151+
item1.put("id", AttributeValue.fromS(key));
152+
item1.put("sk", AttributeValue.fromS("some-subkey"));
153+
item1.put("notVal", AttributeValue.fromS("somevalue"));
154+
QueryResponse response = QueryResponse.builder()
155+
.items(item1)
156+
.build();
157+
Mockito.when(client.query(queryRequestCaptor.capture())).thenReturn(response);
158+
159+
// Assert
160+
Assertions.assertThrows(NullPointerException.class, () -> {
161+
// Act
162+
Map<String, String> values = provider.getMultipleValues(key);
163+
});
164+
}
165+
166+
131167
}

0 commit comments

Comments
 (0)