package org.rakam.aws;
import io.airlift.log.Logger;
import org.rakam.aws.dynamodb.TestDynamodbMetastore;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.nio.file.Path;
import static com.google.common.collect.ImmutableList.of;
import static java.lang.String.format;
import static java.lang.System.getProperty;
public class DynamodbUtil
{
private final static Logger LOGGER = Logger.get(TestDynamodbMetastore.class);
public static int randomPort()
throws IOException
{
try (ServerSocket socket = new ServerSocket(0)) {
return socket.getLocalPort();
}
}
public static DynamodbProcess createDynamodbProcess()
throws Exception
{
int randomPort = randomPort();
Path mainDir = new File(getProperty("user.dir"), ".test/dynamodb").toPath();
Process dynamodbServer = new ProcessBuilder(of("java", format("-Djava.library.path=%s",
mainDir.resolve("DynamoDBLocal_lib").toFile().getAbsolutePath()),
"-jar", mainDir.resolve("DynamoDBLocal.jar").toFile().getAbsolutePath(),
"-inMemory", "--port", Integer.toString(randomPort)))
.start();
LOGGER.info("Dynamodb local started at %d port", randomPort);
return new DynamodbProcess(dynamodbServer, randomPort);
}
public static class DynamodbProcess
{
public final Process process;
public final int port;
public DynamodbProcess(Process process, int port)
{
this.process = process;
this.port = port;
}
}
}