]> git.basschouten.com Git - openhab-addons.git/blob
7923ff4881cb5ef5ec11dcfc484830d9b16f1a4b
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.persistence.dynamodb.internal;
14
15 import static org.junit.jupiter.api.Assertions.*;
16
17 import java.io.File;
18 import java.nio.file.Files;
19 import java.nio.file.Path;
20 import java.nio.file.Paths;
21 import java.nio.file.StandardOpenOption;
22 import java.util.Collections;
23 import java.util.HashMap;
24 import java.util.Map;
25 import java.util.Optional;
26
27 import org.eclipse.jdt.annotation.NonNullByDefault;
28 import org.junit.jupiter.api.Test;
29 import org.junit.jupiter.api.io.TempDir;
30
31 import software.amazon.awssdk.core.retry.RetryMode;
32 import software.amazon.awssdk.core.retry.RetryPolicy;
33 import software.amazon.awssdk.regions.Region;
34
35 /**
36  *
37  * @author Sami Salonen - Initial contribution
38  *
39  */
40 @NonNullByDefault
41 public class DynamoDBConfigTest {
42
43     private static Map<String, Object> mapFrom(String... args) {
44         assert args.length % 2 == 0;
45         Map<String, String> config = new HashMap<>();
46         for (int i = 1; i < args.length; i++) {
47             String key = args[i - 1];
48             String val = args[i];
49             config.put(key, val);
50         }
51         return Collections.unmodifiableMap(config);
52     }
53
54     public @TempDir @NonNullByDefault({}) File folder;
55
56     @Test
57     public void testEmpty() throws Exception {
58         assertNull(DynamoDBConfig.fromConfig(new HashMap<>()));
59     }
60
61     @Test
62     public void testInvalidRegion() throws Exception {
63         assertNull(DynamoDBConfig.fromConfig(Map.of("region", "foobie")));
64     }
65
66     @Test
67     public void testRegionOnly() throws Exception {
68         assertNull(DynamoDBConfig.fromConfig(Map.of("region", "eu-west-1")));
69     }
70
71     @Test
72     public void testRegionWithAccessKeys() throws Exception {
73         DynamoDBConfig fromConfig = DynamoDBConfig
74                 .fromConfig(mapFrom("region", "eu-west-1", "accessKey", "access1", "secretKey", "secret1"));
75         assert fromConfig != null;
76         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
77         assertEquals("access1", fromConfig.getCredentials().accessKeyId());
78         assertEquals("secret1", fromConfig.getCredentials().secretAccessKey());
79         assertEquals("openhab-", fromConfig.getTablePrefixLegacy());
80         assertEquals(1, fromConfig.getReadCapacityUnits());
81         assertEquals(1, fromConfig.getWriteCapacityUnits());
82         assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
83         assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision());
84     }
85
86     @SuppressWarnings("null")
87     @Test
88     public void testRegionWithProfilesConfigFile() throws Exception {
89         Path credsFile = Files.createFile(Paths.get(folder.getPath(), "creds"));
90         Files.write(credsFile, ("""
91                 [fooprofile]
92                 aws_access_key_id=testAccessKey
93                 aws_secret_access_key=testSecretKey
94                 aws_session_token=testSessionToken
95                 """).getBytes(), StandardOpenOption.TRUNCATE_EXISTING);
96
97         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "profilesConfigFile",
98                 credsFile.toAbsolutePath().toString(), "profile", "fooprofile"));
99         assertNotNull(fromConfig);
100         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
101         assertEquals("openhab-", fromConfig.getTablePrefixLegacy());
102         assertEquals(1, fromConfig.getReadCapacityUnits());
103         assertEquals(1, fromConfig.getWriteCapacityUnits());
104         assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
105         assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision());
106     }
107
108     @SuppressWarnings("null")
109     @Test
110     public void testProfilesConfigFileRetryMode() throws Exception {
111         Path credsFile = Files.createFile(Paths.get(folder.getPath(), "creds"));
112         Files.write(credsFile, ("""
113                 [fooprofile]
114                 aws_access_key_id=testAccessKey
115                 aws_secret_access_key=testSecretKey
116                 aws_session_token=testSessionToken
117                 retry_mode=legacy\
118                 """).getBytes(), StandardOpenOption.TRUNCATE_EXISTING);
119
120         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "profilesConfigFile",
121                 credsFile.toAbsolutePath().toString(), "profile", "fooprofile"));
122         assertNotNull(fromConfig);
123         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
124         assertEquals("openhab-", fromConfig.getTablePrefixLegacy());
125         assertEquals(1, fromConfig.getReadCapacityUnits());
126         assertEquals(1, fromConfig.getWriteCapacityUnits());
127         assertEquals(Optional.of(RetryMode.LEGACY), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
128         assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision());
129     }
130
131     @Test
132     public void testEmptyConfiguration() throws Exception {
133         assertNull(DynamoDBConfig.fromConfig(mapFrom()));
134     }
135
136     @Test
137     public void testRegionWithInvalidProfilesConfigFile() throws Exception {
138         Path credsFile = Files.createFile(Paths.get(folder.getPath(), "creds"));
139         Files.write(credsFile, ("""
140                 [fooprofile]
141                 aws_access_key_idINVALIDKEY=testAccessKey
142                 aws_secret_access_key=testSecretKey
143                 aws_session_token=testSessionToken
144                 """).getBytes(), StandardOpenOption.TRUNCATE_EXISTING);
145
146         assertNull(DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "profilesConfigFile",
147                 credsFile.toFile().getAbsolutePath(), "profile", "fooprofile")));
148     }
149
150     @Test
151     public void testRegionWithProfilesConfigFileMissingProfile() throws Exception {
152         Path credsFile = Files.createFile(Paths.get(folder.getPath(), "creds"));
153         Files.write(credsFile, ("""
154                 [fooprofile]
155                 aws_access_key_id=testAccessKey
156                 aws_secret_access_key=testSecretKey
157                 aws_session_token=testSessionToken
158                 """).getBytes(), StandardOpenOption.TRUNCATE_EXISTING);
159
160         assertNull(DynamoDBConfig.fromConfig(
161                 mapFrom("region", "eu-west-1", "profilesConfigFile", credsFile.toAbsolutePath().toString())));
162     }
163
164     @SuppressWarnings("null")
165     @Test
166     public void testRegionWithAccessKeysWithLegacyPrefix() throws Exception {
167         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "accessKey", "access1",
168                 "secretKey", "secret1", "tablePrefix", "foobie-", "expireDays", "105"));
169         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
170         assertEquals("access1", fromConfig.getCredentials().accessKeyId());
171         assertEquals("secret1", fromConfig.getCredentials().secretAccessKey());
172         assertEquals("foobie-", fromConfig.getTablePrefixLegacy());
173         assertEquals(1, fromConfig.getReadCapacityUnits());
174         assertEquals(1, fromConfig.getWriteCapacityUnits());
175         assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
176         assertEquals(ExpectedTableSchema.LEGACY, fromConfig.getTableRevision());
177         assertNull(fromConfig.getExpireDays()); // not supported with legacy
178     }
179
180     @SuppressWarnings("null")
181     @Test
182     public void testRegionWithAccessKeysWithTable() throws Exception {
183         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "accessKey", "access1",
184                 "secretKey", "secret1", "table", "mytable", "expireDays", "105"));
185         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
186         assertEquals("access1", fromConfig.getCredentials().accessKeyId());
187         assertEquals("secret1", fromConfig.getCredentials().secretAccessKey());
188         assertEquals("mytable", fromConfig.getTable());
189         assertEquals(1, fromConfig.getReadCapacityUnits());
190         assertEquals(1, fromConfig.getWriteCapacityUnits());
191         assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
192         assertEquals(ExpectedTableSchema.NEW, fromConfig.getTableRevision());
193         assertEquals(105, fromConfig.getExpireDays());
194     }
195
196     @SuppressWarnings("null")
197     @Test
198     public void testRegionWithAccessKeysWithoutPrefixWithReadCapacityUnits() throws Exception {
199         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "accessKey", "access1",
200                 "secretKey", "secret1", "readCapacityUnits", "5", "expireDays", "105"));
201         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
202         assertEquals("access1", fromConfig.getCredentials().accessKeyId());
203         assertEquals("secret1", fromConfig.getCredentials().secretAccessKey());
204         assertEquals("openhab-", fromConfig.getTablePrefixLegacy());
205         assertEquals(5, fromConfig.getReadCapacityUnits());
206         assertEquals(1, fromConfig.getWriteCapacityUnits());
207         assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
208         assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision());
209         assertEquals(105, fromConfig.getExpireDays());
210     }
211
212     @SuppressWarnings("null")
213     @Test
214     public void testRegionWithAccessKeysWithoutPrefixWithWriteCapacityUnits() throws Exception {
215         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "accessKey", "access1",
216                 "secretKey", "secret1", "writeCapacityUnits", "5"));
217         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
218         assertEquals("access1", fromConfig.getCredentials().accessKeyId());
219         assertEquals("secret1", fromConfig.getCredentials().secretAccessKey());
220         assertEquals("openhab-", fromConfig.getTablePrefixLegacy());
221         assertEquals(1, fromConfig.getReadCapacityUnits());
222         assertEquals(5, fromConfig.getWriteCapacityUnits());
223         assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
224         assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision());
225         assertNull(fromConfig.getExpireDays()); // default is null
226     }
227
228     @SuppressWarnings("null")
229     @Test
230     public void testRegionWithAccessKeysWithoutPrefixWithReadWriteCapacityUnits() throws Exception {
231         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "accessKey", "access1",
232                 "secretKey", "secret1", "readCapacityUnits", "3", "writeCapacityUnits", "5", "expireDays", "105"));
233         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
234         assertEquals("access1", fromConfig.getCredentials().accessKeyId());
235         assertEquals("secret1", fromConfig.getCredentials().secretAccessKey());
236         assertEquals("openhab-", fromConfig.getTablePrefixLegacy());
237         assertEquals(3, fromConfig.getReadCapacityUnits());
238         assertEquals(5, fromConfig.getWriteCapacityUnits());
239         assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
240         assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision());
241     }
242
243     @SuppressWarnings("null")
244     @Test
245     public void testRegionWithAccessKeysWithPrefixWithReadWriteCapacityUnitsWithBufferSettings() throws Exception {
246         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(
247                 mapFrom("region", "eu-west-1", "accessKey", "access1", "secretKey", "secret1", "readCapacityUnits", "3",
248                         "writeCapacityUnits", "5", "bufferCommitIntervalMillis", "501", "bufferSize", "112"));
249         assertEquals(Region.EU_WEST_1, fromConfig.getRegion());
250         assertEquals("access1", fromConfig.getCredentials().accessKeyId());
251         assertEquals("secret1", fromConfig.getCredentials().secretAccessKey());
252         assertEquals("openhab-", fromConfig.getTablePrefixLegacy());
253         assertEquals(3, fromConfig.getReadCapacityUnits());
254         assertEquals(5, fromConfig.getWriteCapacityUnits());
255         assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode));
256         assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision());
257     }
258 }