diff --git a/persistence-modules/spring-data-dynamodb/pom.xml b/persistence-modules/spring-data-dynamodb/pom.xml
index bf90779c29..0b78aac10e 100644
--- a/persistence-modules/spring-data-dynamodb/pom.xml
+++ b/persistence-modules/spring-data-dynamodb/pom.xml
@@ -23,6 +23,10 @@
4.4.1
1.11.64
3.3.7-1
+ 1.0.392
+ 1.11.106
+ 1.11.86
+ https://s3.eu-central-1.amazonaws.com/dynamodb-local-frankfurt/release
@@ -103,6 +107,57 @@
httpclient
${httpclient.version}
+
+
+
+
+ com.amazonaws
+ DynamoDBLocal
+ ${dynamodblocal.version}
+ test
+
+
+ com.almworks.sqlite4java
+ sqlite4java
+ ${sqlite4java.version}
+ test
+
+
+ com.almworks.sqlite4java
+ sqlite4java-win32-x86
+ ${sqlite4java.version}
+ dll
+ test
+
+
+ com.almworks.sqlite4java
+ sqlite4java-win32-x64
+ ${sqlite4java.version}
+ dll
+ test
+
+
+ com.almworks.sqlite4java
+ libsqlite4java-osx
+ ${sqlite4java.version}
+ dylib
+ test
+
+
+ com.almworks.sqlite4java
+ libsqlite4java-linux-i386
+ ${sqlite4java.version}
+ so
+ test
+
+
+ com.almworks.sqlite4java
+ libsqlite4java-linux-amd64
+ ${sqlite4java.version}
+ so
+ test
+
+
@@ -120,6 +175,25 @@
org.apache.maven.plugins
maven-war-plugin
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 2.10
+
+
+ copy-dependencies
+ test-compile
+
+ copy-dependencies
+
+
+ test
+ so,dll,dylib
+ ${project.basedir}/native-libs
+
+
+
+
@@ -142,6 +216,11 @@
false
+
+ dynamodb-local
+ DynamoDB Local Release Repository
+ ${dynamodblocal.repository.url}
+
diff --git a/persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java b/persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java
index 2ff418b4ec..8052aba3df 100644
--- a/persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java
@@ -8,8 +8,9 @@ import com.amazonaws.services.dynamodbv2.model.ResourceInUseException;
import com.baeldung.Application;
import com.baeldung.spring.data.dynamodb.model.ProductInfo;
import com.baeldung.spring.data.dynamodb.repositories.ProductInfoRepository;
+import com.baeldung.spring.data.dynamodb.repository.rule.LocalDynamoDBCreationRule;
import org.junit.Before;
-import org.junit.Ignore;
+import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,7 +22,10 @@ import org.springframework.test.context.web.WebAppConfiguration;
import java.util.List;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
@@ -30,6 +34,9 @@ import static org.junit.Assert.assertTrue;
@TestPropertySource(properties = { "amazon.dynamodb.endpoint=http://localhost:8000/", "amazon.aws.accesskey=test1", "amazon.aws.secretkey=test231" })
public class ProductInfoRepositoryIntegrationTest {
+ @ClassRule
+ public static LocalDynamoDBCreationRule dynamoDB = new LocalDynamoDBCreationRule();
+
private DynamoDBMapper dynamoDBMapper;
@Autowired
@@ -42,7 +49,6 @@ public class ProductInfoRepositoryIntegrationTest {
private static final String EXPECTED_PRICE = "50";
@Before
- @Ignore // TODO Remove Ignore annotations when running locally with Local DynamoDB instance
public void setup() throws Exception {
try {
@@ -57,19 +63,18 @@ public class ProductInfoRepositoryIntegrationTest {
// Do nothing, table already created
}
- // TODO How to handle different environments. i.e. AVOID deleting all entries in ProductInfoion table
+ // TODO How to handle different environments. i.e. AVOID deleting all entries in ProductInfo on table
dynamoDBMapper.batchDelete((List) repository.findAll());
}
@Test
- @Ignore // TODO Remove Ignore annotations when running locally with Local DynamoDB instance
public void givenItemWithExpectedCost_whenRunFindAll_thenItemIsFound() {
ProductInfo productInfo = new ProductInfo(EXPECTED_COST, EXPECTED_PRICE);
repository.save(productInfo);
List result = (List) repository.findAll();
- assertTrue("Not empty", result.size() > 0);
- assertTrue("Contains item with expected cost", result.get(0).getCost().equals(EXPECTED_COST));
+ assertThat(result.size(), is(greaterThan(0)));
+ assertThat(result.get(0).getCost(), is(equalTo(EXPECTED_COST)));
}
}
diff --git a/persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/rule/LocalDynamoDBCreationRule.java b/persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/rule/LocalDynamoDBCreationRule.java
new file mode 100644
index 0000000000..62334b6d00
--- /dev/null
+++ b/persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/rule/LocalDynamoDBCreationRule.java
@@ -0,0 +1,37 @@
+package com.baeldung.spring.data.dynamodb.repository.rule;
+
+import com.amazonaws.services.dynamodbv2.local.main.ServerRunner;
+import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer;
+import org.junit.rules.ExternalResource;
+
+import java.util.Optional;
+
+public class LocalDynamoDBCreationRule extends ExternalResource {
+
+ protected DynamoDBProxyServer server;
+
+ public LocalDynamoDBCreationRule() {
+ System.setProperty("sqlite4java.library.path", "native-libs");
+ }
+
+ @Override
+ protected void before() throws Exception {
+ String port = "8000";
+ this.server = ServerRunner.createServerFromCommandLineArgs(new String[]{"-inMemory", "-port", port});
+ server.start();
+ }
+
+ @Override
+ protected void after() {
+ Optional.ofNullable(server).ifPresent(this::stopUnchecked);
+ }
+
+ protected void stopUnchecked(DynamoDBProxyServer dynamoDbServer) {
+ try {
+ dynamoDbServer.stop();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}