Skip to content

Commit

Permalink
Adds Vault support. (#73)
Browse files Browse the repository at this point in the history
* Adds Vault support.
  • Loading branch information
lordofthejars committed Apr 11, 2017
1 parent d0996fc commit 1d260fd
Show file tree
Hide file tree
Showing 11 changed files with 476 additions and 1 deletion.
15 changes: 14 additions & 1 deletion arquillian-ape-nosql/pom.xml
Expand Up @@ -15,7 +15,8 @@
<version.jedis>2.9.0</version.jedis>
<version.couchbase>2.4.3</version.couchbase>
<version.awaitility>2.0.0</version.awaitility>
<version.nosqlunit>1.0.0-rc.2</version.nosqlunit>
<version.nosqlunit>1.0.0-rc.3</version.nosqlunit>
<version.vault>2.0.0</version.vault>
</properties>

<artifactId>arquillian-ape-nosql-parent</artifactId>
Expand All @@ -40,6 +41,11 @@
<artifactId>nosqlunit-couchbase</artifactId>
<version>${version.nosqlunit}</version>
</dependency>
<dependency>
<groupId>com.lordofthejars</groupId>
<artifactId>nosqlunit-vault</artifactId>
<version>${version.nosqlunit}</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
Expand All @@ -55,6 +61,11 @@
<artifactId>java-client</artifactId>
<version>${version.couchbase}</version>
</dependency>
<dependency>
<groupId>com.bettercloud</groupId>
<artifactId>vault-java-driver</artifactId>
<version>${version.vault}</version>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
Expand All @@ -71,6 +82,8 @@
<module>mongodb-ftest</module>
<module>redis</module>
<module>redis-ftest</module>
<module>vault</module>
<module>vault-ftest</module>
</modules>

</project>
71 changes: 71 additions & 0 deletions arquillian-ape-nosql/vault-ftest/pom.xml
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<parent>
<groupId>org.arquillian.ape</groupId>
<artifactId>arquillian-ape-nosql-parent</artifactId>
<version>2.0.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>

<properties>
</properties>

<artifactId>arquillian-ape-nosql-vault-ftest</artifactId>
<packaging>jar</packaging>

<name>Arquillian Ape NoSQL Vault Functional Test</name>

<dependencies>
<dependency>
<groupId>com.lordofthejars</groupId>
<artifactId>nosqlunit-vault</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.bettercloud</groupId>
<artifactId>vault-java-driver</artifactId>
</dependency>
<dependency>
<groupId>org.arquillian.cube</groupId>
<artifactId>arquillian-cube-docker</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.arquillian.ape</groupId>
<artifactId>arquillian-ape-nosql-vault</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-standalone</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<!-- This artifact shouldn't be deployed to maven repository -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>

</project>

@@ -0,0 +1,22 @@
package org.arquillian.ape.nosql.vault;

import com.bettercloud.vault.Vault;
import com.bettercloud.vault.VaultConfig;
import com.bettercloud.vault.VaultException;
import java.util.Map;

public class Secrets {

private com.bettercloud.vault.VaultConfig vaultConfig;
private Vault vault;

public Secrets(String host, int port, String token) throws VaultException {
this.vaultConfig = new VaultConfig(String.format("http://%s:%d", host, port), token);
this.vault = new Vault(this.vaultConfig);
}

public Map<String, String> getFooSecret() throws VaultException {
return this.vault.logical().read("secret/foo").getData();
}

}
@@ -0,0 +1,52 @@
package org.arquillian.ape.nosql.vault;

import com.bettercloud.vault.VaultException;
import java.util.Map;
import org.arquillian.ape.nosql.NoSqlPopulator;
import org.arquillian.cube.docker.impl.client.containerobject.dsl.Container;
import org.arquillian.cube.docker.impl.client.containerobject.dsl.DockerContainer;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.junit.Test;
import org.junit.runner.RunWith;

import static org.arquillian.ape.nosql.vault.VaultOptions.options;
import static org.assertj.core.api.Assertions.assertThat;

@RunWith(Arquillian.class)
public class VaultTest {

public static final String ROOT_TOKEN = "c56a4180-65aa-42ec-a945-5fd21dec0538";
@ArquillianResource
@Vault
NoSqlPopulator vaultPopulator;

@DockerContainer
Container vault = Container.withContainerName("vault")
.fromImage("vault:0.7.0")
.withPortBinding(8200)
.withEnvironment("VAULT_DEV_ROOT_TOKEN_ID", ROOT_TOKEN)
.build();

@Test
public void should_read_secrets_from_vault() throws VaultException {

// given

vaultPopulator.forServer("http://" + vault.getIpAddress(), vault.getBindPort(8200))
.usingDataSet("mysecret.yml")
.withOptions(options()
.token(ROOT_TOKEN)
.build())
.execute();

// when

final Secrets secrets = new Secrets(vault.getIpAddress(), vault.getBindPort(8200), ROOT_TOKEN);
final Map<String, String> data = secrets.getFooSecret();

// then

assertThat(data).containsEntry("zip", "zap").containsEntry("a", "b");
}
}
@@ -0,0 +1,3 @@
- secret/foo:
zip: zap
a: b
40 changes: 40 additions & 0 deletions arquillian-ape-nosql/vault/pom.xml
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<parent>
<groupId>org.arquillian.ape</groupId>
<artifactId>arquillian-ape-nosql-parent</artifactId>
<version>2.0.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>

<artifactId>arquillian-ape-nosql-vault</artifactId>
<packaging>jar</packaging>

<name>Arquillian Ape NoSQL Vault</name>

<dependencies>
<dependency>
<groupId>com.bettercloud</groupId>
<artifactId>vault-java-driver</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.lordofthejars</groupId>
<artifactId>nosqlunit-vault</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.arquillian.ape</groupId>
<artifactId>arquillian-ape-nosql-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>

</project>
@@ -0,0 +1,16 @@
package org.arquillian.ape.nosql.vault;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.arquillian.ape.api.Populator;

/**
* Annotation to set Populator of Vault.
*/
@Populator
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface Vault {
}

0 comments on commit 1d260fd

Please sign in to comment.