Skip to content

Commit 09df58a

Browse files
committed
remove trailing slash for multiple params
1 parent 17b456b commit 09df58a

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

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

+6-4
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,15 @@ public BaseProvider withTransformation(Class<? extends Transformer> transformerC
123123
*/
124124
@Override
125125
public Map<String, String> getMultiple(String path) {
126+
// remove trailing whitespace
127+
String pathWithoutTrailingSlash = path.replaceAll("\\/+$", "");
126128
try {
127-
return (Map<String, String>) cacheManager.getIfNotExpired(path, now()).orElseGet(() -> {
128-
Map<String, String> params = getMultipleValues(path);
129+
return (Map<String, String>) cacheManager.getIfNotExpired(pathWithoutTrailingSlash, now()).orElseGet(() -> {
130+
Map<String, String> params = getMultipleValues(pathWithoutTrailingSlash);
129131

130-
cacheManager.putInCache(path, params);
132+
cacheManager.putInCache(pathWithoutTrailingSlash, params);
131133

132-
params.forEach((k, v) -> cacheManager.putInCache(path + "/" + k, v));
134+
params.forEach((k, v) -> cacheManager.putInCache(pathWithoutTrailingSlash + "/" + k, v));
133135

134136
return params;
135137
});

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

+23
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,29 @@ public void getMultiple() {
103103
assertThat(paramByPathCaptor.getValue().recursive()).isFalse();
104104
}
105105

106+
@Test
107+
public void getMultipleWithTrailingSlash() {
108+
List<Parameter> parameters = new ArrayList<>();
109+
parameters.add(Parameter.builder().name("/prod/app1/key1").value("foo1").build());
110+
parameters.add(Parameter.builder().name("/prod/app1/key2").value("foo2").build());
111+
parameters.add(Parameter.builder().name("/prod/app1/key3").value("foo3").build());
112+
GetParametersByPathResponse response = GetParametersByPathResponse.builder().parameters(parameters).build();
113+
when(client.getParametersByPath(paramByPathCaptor.capture())).thenReturn(response);
114+
115+
Map<String, String> params = provider.getMultiple("/prod/app1/");
116+
assertThat(params).contains(
117+
MapEntry.entry("key1", "foo1"),
118+
MapEntry.entry("key2", "foo2"),
119+
MapEntry.entry("key3", "foo3"));
120+
assertThat(provider.get("/prod/app1/key1")).isEqualTo("foo1");
121+
assertThat(provider.get("/prod/app1/key2")).isEqualTo("foo2");
122+
assertThat(provider.get("/prod/app1/key3")).isEqualTo("foo3");
123+
124+
assertThat(paramByPathCaptor.getValue().path()).isEqualTo("/prod/app1");
125+
assertThat(paramByPathCaptor.getValue().withDecryption()).isFalse();
126+
assertThat(paramByPathCaptor.getValue().recursive()).isFalse();
127+
}
128+
106129
@Test
107130
public void getMultiple_cached_shouldNotCallSSM() {
108131
List<Parameter> parameters = new ArrayList<>();

0 commit comments

Comments
 (0)