Skip to content

Commit 9720fa8

Browse files
committed
Fix Vault Unit Tests
1 parent 9acd002 commit 9720fa8

2 files changed

Lines changed: 60 additions & 28 deletions

File tree

exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/TestVaultUserAuthenticator.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@
2626
import org.apache.drill.test.ClientFixture;
2727
import org.apache.drill.test.ClusterFixture;
2828
import org.apache.drill.test.ClusterTest;
29+
import org.junit.AfterClass;
2930
import org.junit.BeforeClass;
30-
import org.junit.ClassRule;
3131
import org.junit.Test;
3232
import org.junit.experimental.categories.Category;
33+
import org.testcontainers.DockerClientFactory;
3334
import org.testcontainers.utility.DockerImageName;
3435
import org.testcontainers.vault.VaultContainer;
3536
import org.testcontainers.vault.VaultLogLevel;
@@ -38,6 +39,7 @@
3839
import java.util.List;
3940

4041
import static org.junit.Assert.fail;
42+
import static org.junit.Assume.assumeTrue;
4143

4244
@Category(SecurityTest.class)
4345
public class TestVaultUserAuthenticator extends ClusterTest {
@@ -46,26 +48,40 @@ public class TestVaultUserAuthenticator extends ClusterTest {
4648

4749
private static String vaultAddr;
4850

49-
@ClassRule
50-
public static final VaultContainer<?> vaultContainer =
51-
new VaultContainer<>(DockerImageName.parse("vault").withTag("1.10.3"))
52-
.withLogLevel(VaultLogLevel.Debug)
53-
.withVaultToken(VAULT_ROOT_TOKEN)
54-
.withInitCommand(
55-
"auth enable userpass",
56-
"write auth/userpass/users/alice password=pass1 policies=admins",
57-
"write auth/userpass/users/bob password=buzzkill policies=admins"
58-
);
51+
private static VaultContainer<?> vaultContainer;
5952

6053
@BeforeClass
6154
public static void init() throws Exception {
55+
assumeTrue(
56+
"Docker is not available, skipping Vault container tests",
57+
DockerClientFactory.instance().isDockerAvailable()
58+
);
59+
60+
vaultContainer =
61+
new VaultContainer<>(DockerImageName.parse("vault").withTag("1.10.3"))
62+
.withLogLevel(VaultLogLevel.Debug)
63+
.withVaultToken(VAULT_ROOT_TOKEN)
64+
.withInitCommand(
65+
"auth enable userpass",
66+
"write auth/userpass/users/alice password=pass1 policies=admins",
67+
"write auth/userpass/users/bob password=buzzkill policies=admins"
68+
);
69+
vaultContainer.start();
70+
6271
vaultAddr = String.format(
6372
"http://%s:%d",
6473
vaultContainer.getHost(),
6574
vaultContainer.getMappedPort(8200)
6675
);
6776
}
6877

78+
@AfterClass
79+
public static void tearDown() {
80+
if (vaultContainer != null) {
81+
vaultContainer.stop();
82+
}
83+
}
84+
6985
@Test
7086
public void testUserPassAuth() throws Exception {
7187
cluster = ClusterFixture.bareBuilder(dirTestWatcher)

exec/java-exec/src/test/java/org/apache/drill/storage/CredentialsProviderImplementationsTest.java

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@
3232
import org.apache.drill.test.ClusterFixture;
3333
import org.apache.drill.test.ClusterTest;
3434
import org.apache.hadoop.conf.Configuration;
35+
import org.junit.AfterClass;
3536
import org.junit.BeforeClass;
36-
import org.junit.ClassRule;
3737
import org.junit.Test;
38+
import org.testcontainers.DockerClientFactory;
3839
import org.testcontainers.containers.BindMode;
3940
import org.testcontainers.utility.DockerImageName;
4041
import org.testcontainers.vault.VaultContainer;
@@ -43,6 +44,7 @@
4344
import java.util.Map;
4445

4546
import static org.junit.Assert.assertEquals;
47+
import static org.junit.Assume.assumeTrue;
4648

4749
public class CredentialsProviderImplementationsTest extends ClusterTest {
4850

@@ -52,25 +54,32 @@ public class CredentialsProviderImplementationsTest extends ClusterTest {
5254
private static final String USER_SECRET_PATH = "secret/testing/$user";
5355
private static final String CONTAINER_POLICY_PATH = "/tmp/read-vault-secrets.hcl";
5456

55-
@ClassRule
56-
public static final VaultContainer<?> vaultContainer =
57-
new VaultContainer<>(DockerImageName.parse("vault").withTag("1.10.3"))
58-
.withVaultToken(VAULT_ROOT_TOKEN)
59-
.withSecretInVault(SHARED_SECRET_PATH,
60-
"top_secret=password1",
61-
"db_password=dbpassword1")
62-
.withSecretInVault(USER_SECRET_PATH.replace(VaultCredentialsProvider.QUERY_USER_VAR, "alice"),
63-
"top_secret=password1",
64-
"db_password=dbpassword1")
65-
.withClasspathResourceMapping("vault/read-vault-secrets.hcl", CONTAINER_POLICY_PATH, BindMode.READ_ONLY)
66-
.withInitCommand(
67-
"auth enable approle",
68-
String.format("policy write read-secrets %s", CONTAINER_POLICY_PATH),
69-
String.format("write %s policies=read-secrets", VAULT_APP_ROLE_PATH)
70-
);
57+
private static VaultContainer<?> vaultContainer;
7158

7259
@BeforeClass
7360
public static void init() throws Exception {
61+
assumeTrue(
62+
"Docker is not available, skipping Vault container tests",
63+
DockerClientFactory.instance().isDockerAvailable()
64+
);
65+
66+
vaultContainer =
67+
new VaultContainer<>(DockerImageName.parse("vault").withTag("1.10.3"))
68+
.withVaultToken(VAULT_ROOT_TOKEN)
69+
.withSecretInVault(SHARED_SECRET_PATH,
70+
"top_secret=password1",
71+
"db_password=dbpassword1")
72+
.withSecretInVault(USER_SECRET_PATH.replace(VaultCredentialsProvider.QUERY_USER_VAR, "alice"),
73+
"top_secret=password1",
74+
"db_password=dbpassword1")
75+
.withClasspathResourceMapping("vault/read-vault-secrets.hcl", CONTAINER_POLICY_PATH, BindMode.READ_ONLY)
76+
.withInitCommand(
77+
"auth enable approle",
78+
String.format("policy write read-secrets %s", CONTAINER_POLICY_PATH),
79+
String.format("write %s policies=read-secrets", VAULT_APP_ROLE_PATH)
80+
);
81+
vaultContainer.start();
82+
7483
String vaultAddr = String.format(
7584
"http://%s:%d",
7685
vaultContainer.getHost(),
@@ -104,6 +113,13 @@ public static void init() throws Exception {
104113
);
105114
}
106115

116+
@AfterClass
117+
public static void tearDown() {
118+
if (vaultContainer != null) {
119+
vaultContainer.stop();
120+
}
121+
}
122+
107123
@Test
108124
public void testEnvCredentialsProvider() {
109125
String variableName = "USER";

0 commit comments

Comments
 (0)