package org.rakam.aws.dynamodb; import org.rakam.analysis.ApiKeyService; import org.rakam.analysis.TestApiKeyService; import org.rakam.aws.AWSConfig; import org.rakam.aws.dynamodb.apikey.DynamodbApiKeyConfig; import org.rakam.aws.dynamodb.apikey.DynamodbApiKeyService; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import java.io.File; import java.io.IOException; 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 TestDynamodbApiKeyService extends TestApiKeyService { private final DynamodbApiKeyService service; private Process dynamodbServer; public TestDynamodbApiKeyService() throws Exception { int dynamodb = createDynamodb(); // int dynamodb = 8000; service = new DynamodbApiKeyService(new AWSConfig() .setAccessKey("AKIAIOSFODNN7EXAMPLE") .setSecretAccessKey("wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY") .setDynamodbEndpoint("http://127.0.0.1:" + dynamodb), new DynamodbApiKeyConfig().setTableName("test")); } @BeforeSuite public void setUp() throws Exception { service.setup(); } @AfterSuite public void tearDown() throws Exception { dynamodbServer.destroy(); } @Override public ApiKeyService getApiKeyService() { return service; } public int createDynamodb() throws Exception { int randomPort = randomPort(); Path mainDir = new File(getProperty("user.dir"), ".test/dynamodb").toPath(); 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(); return randomPort; } private static int randomPort() throws IOException { try (ServerSocket socket = new ServerSocket(0)) { return socket.getLocalPort(); } } }