Integration Testing of DynamoDB
First, configure maven-dependency-plugin to unpack DynamoDB Local ZIP archive (it is in Maven Central):
<project>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>unpack-dynamodb-local</id>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.jcabi</groupId>
<artifactId>DynamoDBLocal</artifactId>
<version>2013-09-12</version>
<type>zip</type>
<outputDirectory>${project.build.directory}/dynamodb-dist</outputDirectory>
<overWrite>false</overWrite>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
[...]
</project>This example uses version 2013-09-12, which is the first one (and the oldest one). Full list of currently packaged and supported versions is here.
Then, add build-helper-maven-plugin to reserve a random TCP port for DynamoDB Local running instance:
<project>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>reserver-dynamodb-port</id>
<goals>
<goal>reserve-network-port</goal>
</goals>
<configuration>
<portNames>
<portName>dynamodblocal.port</portName>
</portNames>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>And now, configure jcabi-dynamodb-maven-plugin:
<project>
<build>
<plugins>
<plugin>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-dynamodb-maven-plugin</artifactId>
<version>0.10.1</version>
<executions>
<execution>
<id>dynamodb-integration-test</id>
<goals>
<goal>start</goal>
<goal>stop</goal>
</goals>
<configuration>
<port>${dynamodblocal.port}</port>
<dist>${project.build.directory}/dynamodb-dist</dist>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>Now you need to know this temporary port number in your integration tests:
<project>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<dynamodb.port>${dynamodblocal.port}</dynamodb.port>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
[...]
</project>In your integration tests make sure that you set a correct entry point for AWS Dynamo:
public class FooITCase {
private static final String PORT = System.getProperty("dynamodb.port");
@Test
public void worksWithAwsDynamoDb() {
AmazonDynamoDB aws = new AmazonDynamoDBClient(
new BasicAWSCredentials("", "")
);
aws.setEndpoint(String.format("http://localhost:%s", FooTest.PORT));
// and now your code
}
}Cutting Edge Version
If you want to use current version of the product, you can do it with this configuration in your pom.xml:
<pluginRepositories>
<pluginRepository>
<id>oss.sonatype.org</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-dynamodb-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
[...]
</plugin>
</plugins>
</build>