diff --git a/config/vaultconfig.json b/config/vaultconfig.json new file mode 100644 index 00000000..18b0f8cc --- /dev/null +++ b/config/vaultconfig.json @@ -0,0 +1,15 @@ +{ + "storage": { + "inmem": {} + }, + "listener": { + "tcp": { + "address": "0.0.0.0:8200", + "tls_cert_file": "/tmp/localhost.cert.pem", + "tls_key_file": "/tmp/localhost.decrypted.key.pem" + } + }, + "plugin_directory": "plugins", + "api_addr": "https://0.0.0.0:8200", + "disable_mlock": true +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0b72be56..c47a4395 100644 --- a/pom.xml +++ b/pom.xml @@ -181,6 +181,13 @@ 3.18.1 test + + + org.testcontainers + vault + 1.21.4 + test + @@ -209,6 +216,25 @@ org.apache.maven.plugins maven-checkstyle-plugin + + org.codehaus.mojo + exec-maven-plugin + 3.6.3 + + + generate-certificates + generate-sources + + ./src/test/bash/create_certificates.sh + + + exec + + + false + + + @@ -301,14 +327,6 @@ false - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone-local - - false - - spring-releases Spring Releases @@ -330,18 +348,10 @@ false - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone-local - - false - - spring-releases Spring Releases - https://repo.spring.io/libs-release-local + https://repo.spring.io/release false diff --git a/spring-cloud-vault-config-aws/pom.xml b/spring-cloud-vault-config-aws/pom.xml index 37b9e40a..0df8be9a 100644 --- a/spring-cloud-vault-config-aws/pom.xml +++ b/spring-cloud-vault-config-aws/pom.xml @@ -38,12 +38,6 @@ - - org.junit.vintage - junit-vintage-engine - test - - io.netty netty-all diff --git a/spring-cloud-vault-config-aws/src/test/java/org/springframework/cloud/vault/config/aws/AwsSecretIntegrationTests.java b/spring-cloud-vault-config-aws/src/test/java/org/springframework/cloud/vault/config/aws/AwsSecretIntegrationTests.java index 1281d43d..8004ffdf 100644 --- a/spring-cloud-vault-config-aws/src/test/java/org/springframework/cloud/vault/config/aws/AwsSecretIntegrationTests.java +++ b/spring-cloud-vault-config-aws/src/test/java/org/springframework/cloud/vault/config/aws/AwsSecretIntegrationTests.java @@ -33,7 +33,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.aws.VaultConfigAwsBootstrapConfiguration.AwsSecretBackendMetadataFactory.forAws; /** diff --git a/spring-cloud-vault-config-aws/src/test/java/org/springframework/cloud/vault/config/aws/VaultConfigAwsTests.java b/spring-cloud-vault-config-aws/src/test/java/org/springframework/cloud/vault/config/aws/VaultConfigAwsTests.java index 72a69038..81f41c26 100644 --- a/spring-cloud-vault-config-aws/src/test/java/org/springframework/cloud/vault/config/aws/VaultConfigAwsTests.java +++ b/spring-cloud-vault-config-aws/src/test/java/org/springframework/cloud/vault/config/aws/VaultConfigAwsTests.java @@ -32,7 +32,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the aws secret backend. In case this test should fail because diff --git a/spring-cloud-vault-config-consul/pom.xml b/spring-cloud-vault-config-consul/pom.xml index 2bf8a4d3..8d12a2a0 100644 --- a/spring-cloud-vault-config-consul/pom.xml +++ b/spring-cloud-vault-config-consul/pom.xml @@ -40,12 +40,6 @@ - - org.junit.vintage - junit-vintage-engine - test - - org.apache.httpcomponents.client5 httpclient5 diff --git a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/ConsulSecretIntegrationTests.java b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/ConsulSecretIntegrationTests.java index 101422d5..6f839fb6 100644 --- a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/ConsulSecretIntegrationTests.java +++ b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/ConsulSecretIntegrationTests.java @@ -32,7 +32,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests for {@link VaultConfigTemplate} using the consul secret backend. This diff --git a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/DiscoveryBootstrapConfigurationTests.java b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/DiscoveryBootstrapConfigurationTests.java index 5db96ad4..818f0baf 100644 --- a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/DiscoveryBootstrapConfigurationTests.java +++ b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/DiscoveryBootstrapConfigurationTests.java @@ -36,7 +36,7 @@ import org.springframework.vault.support.VaultHealth; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Tests for {@link DiscoveryBootstrapConfigurationTests}. diff --git a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/SetupConsul.java b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/SetupConsul.java index f19f85c0..5c6f4726 100644 --- a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/SetupConsul.java +++ b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/SetupConsul.java @@ -30,7 +30,7 @@ import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; -import static org.junit.Assume.assumeFalse; +import static org.junit.jupiter.api.Assumptions.assumeFalse; /** * Utility to setup Consul. @@ -72,8 +72,8 @@ static void setupConsul(VaultOperations vaultOperations, String consulBackend) { } catch (HttpStatusCodeException e) { - assumeFalse("Skipping because Consul is not configured as we expect it to be", - e.getStatusCode().is4xxClientError()); + assumeFalse(e.getStatusCode().is4xxClientError(), + "Skipping because Consul is not configured as we expect it to be"); throw e; } diff --git a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/VaultConfigConsulConfigDataTests.java b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/VaultConfigConsulConfigDataTests.java index b3a49b06..68c303df 100644 --- a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/VaultConfigConsulConfigDataTests.java +++ b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/VaultConfigConsulConfigDataTests.java @@ -38,7 +38,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Tests for {@link VaultConfigConsulConfigDataTests}. diff --git a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/VaultConfigConsulTests.java b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/VaultConfigConsulTests.java index 39902a2b..576750a3 100644 --- a/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/VaultConfigConsulTests.java +++ b/spring-cloud-vault-config-consul/src/test/java/org/springframework/cloud/vault/config/consul/VaultConfigConsulTests.java @@ -45,8 +45,8 @@ import org.springframework.web.client.RestTemplate; import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.junit.Assume.assumeFalse; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeFalse; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the consul secret backend. In case this test should fail @@ -135,8 +135,8 @@ public static void beforeClass() { } catch (HttpStatusCodeException e) { - assumeFalse("Skipping because Consul is not configured as we expect it to be", - e.getStatusCode().is4xxClientError()); + assumeFalse(e.getStatusCode().is4xxClientError(), + "Skipping because Consul is not configured as we expect it to be"); throw e; } diff --git a/spring-cloud-vault-config-databases/pom.xml b/spring-cloud-vault-config-databases/pom.xml index 00b61450..cf1ec387 100644 --- a/spring-cloud-vault-config-databases/pom.xml +++ b/spring-cloud-vault-config-databases/pom.xml @@ -36,12 +36,6 @@ - - org.junit.vintage - junit-vintage-engine - test - - org.apache.cassandra java-driver-core diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/CassandraSecretIntegrationTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/CassandraSecretIntegrationTests.java index 1e83c121..0c23723b 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/CassandraSecretIntegrationTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/CassandraSecretIntegrationTests.java @@ -32,7 +32,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.databases.VaultConfigDatabaseBootstrapConfiguration.DatabaseSecretBackendMetadataFactory.forDatabase; /** diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/CouchbaseSecretIntegrationTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/CouchbaseSecretIntegrationTests.java index 2a19a35c..6833877b 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/CouchbaseSecretIntegrationTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/CouchbaseSecretIntegrationTests.java @@ -33,7 +33,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.databases.VaultConfigDatabaseBootstrapConfiguration.DatabaseSecretBackendMetadataFactory.forDatabase; /** diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/ElasticsearchSecretIntegrationTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/ElasticsearchSecretIntegrationTests.java index b3c111cd..df18af11 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/ElasticsearchSecretIntegrationTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/ElasticsearchSecretIntegrationTests.java @@ -33,7 +33,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.databases.VaultConfigDatabaseBootstrapConfiguration.DatabaseSecretBackendMetadataFactory.forDatabase; /** diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MongoSecretIntegrationTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MongoSecretIntegrationTests.java index 650e0a4d..6e3d734e 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MongoSecretIntegrationTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MongoSecretIntegrationTests.java @@ -34,7 +34,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.databases.VaultConfigDatabaseBootstrapConfiguration.DatabaseSecretBackendMetadataFactory.forDatabase; /** diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MySqlDatabaseSecretIntegrationTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MySqlDatabaseSecretIntegrationTests.java index d520e6df..f1ad7f0a 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MySqlDatabaseSecretIntegrationTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MySqlDatabaseSecretIntegrationTests.java @@ -31,7 +31,7 @@ import org.springframework.cloud.vault.util.Version; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.databases.VaultConfigDatabaseBootstrapConfiguration.DatabaseSecretBackendMetadataFactory.forDatabase; /** diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MySqlSecretIntegrationTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MySqlSecretIntegrationTests.java index 527bf515..aed6b010 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MySqlSecretIntegrationTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/MySqlSecretIntegrationTests.java @@ -32,7 +32,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.databases.VaultConfigDatabaseBootstrapConfiguration.DatabaseSecretBackendMetadataFactory.forDatabase; /** diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/PostgreSqlSecretIntegrationTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/PostgreSqlSecretIntegrationTests.java index 88ffce09..0395243d 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/PostgreSqlSecretIntegrationTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/PostgreSqlSecretIntegrationTests.java @@ -32,7 +32,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.databases.VaultConfigDatabaseBootstrapConfiguration.DatabaseSecretBackendMetadataFactory.forDatabase; /** diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCassandraTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCassandraTests.java index 73b82d26..1b743816 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCassandraTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCassandraTests.java @@ -34,7 +34,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the cassandra secret backend. In case this test should fail diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCouchbaseDatabaseTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCouchbaseDatabaseTests.java index af3cddb2..a0921cfb 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCouchbaseDatabaseTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCouchbaseDatabaseTests.java @@ -36,7 +36,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the database secret backend. In case this test should fail diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCouchbaseTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCouchbaseTests.java index d43598eb..4100634f 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCouchbaseTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigCouchbaseTests.java @@ -35,7 +35,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the couchbase secret backend. In case this test should fail diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMongoTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMongoTests.java index 90861cdb..ca104c08 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMongoTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMongoTests.java @@ -39,7 +39,7 @@ import org.springframework.cloud.vault.util.Version; import org.springframework.vault.core.VaultOperations; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the mongodb secret backend. In case this test should fail diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabaseTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabaseTests.java index e3d01129..f29ec832 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabaseTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabaseTests.java @@ -34,7 +34,7 @@ import org.springframework.cloud.vault.util.VaultRule; import org.springframework.cloud.vault.util.Version; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the database secret backend. In case this test should fail diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabasesBootstrapTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabasesBootstrapTests.java index 95c2e0e3..2271961f 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabasesBootstrapTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabasesBootstrapTests.java @@ -37,7 +37,7 @@ import org.springframework.cloud.vault.util.Version; import org.springframework.vault.core.VaultOperations; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the database secret backend with multi-database support. In diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabasesTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabasesTests.java index c3dea56b..c24a6fae 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabasesTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlDatabasesTests.java @@ -34,7 +34,7 @@ import org.springframework.cloud.vault.util.VaultRule; import org.springframework.cloud.vault.util.Version; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the database secret backend with multi-database support. In diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlTests.java index a1422df8..0f514c28 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigMySqlTests.java @@ -35,7 +35,7 @@ import org.springframework.cloud.vault.util.VaultRule; import org.springframework.vault.core.VaultOperations; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the mysql secret backend. In case this test should fail because diff --git a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigPostgreSqlTests.java b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigPostgreSqlTests.java index 7b0bc84d..199124d1 100644 --- a/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigPostgreSqlTests.java +++ b/spring-cloud-vault-config-databases/src/test/java/org/springframework/cloud/vault/config/databases/VaultConfigPostgreSqlTests.java @@ -37,7 +37,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the postgresql secret backend. In case this test should fail diff --git a/spring-cloud-vault-config-rabbitmq/pom.xml b/spring-cloud-vault-config-rabbitmq/pom.xml index 474ad96e..d9a83315 100644 --- a/spring-cloud-vault-config-rabbitmq/pom.xml +++ b/spring-cloud-vault-config-rabbitmq/pom.xml @@ -38,12 +38,6 @@ - - org.junit.vintage - junit-vintage-engine - test - - org.apache.httpcomponents.client5 httpclient5 diff --git a/spring-cloud-vault-config-rabbitmq/src/test/java/org/springframework/cloud/vault/config/rabbitmq/RabbitMqSecretIntegrationTests.java b/spring-cloud-vault-config-rabbitmq/src/test/java/org/springframework/cloud/vault/config/rabbitmq/RabbitMqSecretIntegrationTests.java index 7ec36b66..2ebed952 100644 --- a/spring-cloud-vault-config-rabbitmq/src/test/java/org/springframework/cloud/vault/config/rabbitmq/RabbitMqSecretIntegrationTests.java +++ b/spring-cloud-vault-config-rabbitmq/src/test/java/org/springframework/cloud/vault/config/rabbitmq/RabbitMqSecretIntegrationTests.java @@ -34,7 +34,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.config.rabbitmq.VaultConfigRabbitMqBootstrapConfiguration.RabbitMqSecretBackendMetadataFactory.forRabbitMq; /** diff --git a/spring-cloud-vault-config-rabbitmq/src/test/java/org/springframework/cloud/vault/config/rabbitmq/VaultConfigRabbitMqTests.java b/spring-cloud-vault-config-rabbitmq/src/test/java/org/springframework/cloud/vault/config/rabbitmq/VaultConfigRabbitMqTests.java index f0edcdd5..662d56d3 100644 --- a/spring-cloud-vault-config-rabbitmq/src/test/java/org/springframework/cloud/vault/config/rabbitmq/VaultConfigRabbitMqTests.java +++ b/spring-cloud-vault-config-rabbitmq/src/test/java/org/springframework/cloud/vault/config/rabbitmq/VaultConfigRabbitMqTests.java @@ -37,7 +37,7 @@ import org.springframework.cloud.vault.util.Version; import org.springframework.vault.core.VaultOperations; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests using the rabbitmq secret backend. In case this test should fail diff --git a/spring-cloud-vault-config/pom.xml b/spring-cloud-vault-config/pom.xml index 3c32ab75..bce7e1d0 100644 --- a/spring-cloud-vault-config/pom.xml +++ b/spring-cloud-vault-config/pom.xml @@ -180,11 +180,6 @@ test - - org.junit.vintage - junit-vintage-engine - test - diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/ReactiveVaultOperationsTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/ReactiveVaultOperationsTests.java index 133c3342..41fd6637 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/ReactiveVaultOperationsTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/ReactiveVaultOperationsTests.java @@ -44,8 +44,7 @@ * @author Mark Paluch */ @SpringBootTest(classes = ReactiveVaultOperationsTests.TestApplication.class, - properties = { "spring.cloud.vault.host=foo", "spring.cloud.vault.uri=https://localhost:8200", - "spring.cloud.bootstrap.enabled=true" }) + properties = { "spring.cloud.bootstrap.enabled=true" }) public class ReactiveVaultOperationsTests { @Autowired @@ -56,12 +55,13 @@ public static void beforeClass() { VaultRule vaultRule = new VaultRule(); vaultRule.before(); + VaultRule.initializeSystemProperties(); Map object = new HashMap<>(); object.put("vault.value", "foo"); object.put("nested", Collections.singletonMap("key", "value")); - vaultRule.prepare().getVaultOperations().write("secret/testVaultApp", object); + VaultRule.prepare().getVaultOperations().write("secret/testVaultApp", object); } @Test diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigAppRoleTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigAppRoleTests.java index 831024da..f4c812f3 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigAppRoleTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigAppRoleTests.java @@ -33,7 +33,7 @@ import org.springframework.vault.core.VaultOperations; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration test using config infrastructure with AppRole authentication. diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigCubbyholeAuthenticationTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigCubbyholeAuthenticationTests.java index 8968f77c..4b03440a 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigCubbyholeAuthenticationTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigCubbyholeAuthenticationTests.java @@ -34,7 +34,7 @@ import org.springframework.vault.support.VaultResponse; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration test using config infrastructure with Cubbyhole authentication. diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigKubernetesTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigKubernetesTests.java index 41e22515..4c8b0f02 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigKubernetesTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigKubernetesTests.java @@ -39,7 +39,7 @@ import org.springframework.vault.support.Policy.Rule; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.springframework.cloud.vault.util.Settings.findWorkDir; /** diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigLoaderSingleLocationTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigLoaderSingleLocationTests.java index 58d11b15..4998cb71 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigLoaderSingleLocationTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigLoaderSingleLocationTests.java @@ -44,8 +44,8 @@ * * @author Mark Paluch */ -@SpringBootTest(classes = VaultConfigLoaderSingleLocationTests.TestApplication.class, properties = { - "spring.cloud.vault.uri=https://localhost:8200", "spring.config.import=vault:secret/config-location" }) +@SpringBootTest(classes = VaultConfigLoaderSingleLocationTests.TestApplication.class, + properties = { "spring.config.import=vault:secret/config-location" }) public class VaultConfigLoaderSingleLocationTests { @Autowired @@ -59,12 +59,13 @@ public static void beforeClass() { VaultRule vaultRule = new VaultRule(); vaultRule.before(); + VaultRule.initializeSystemProperties(); Map object = new HashMap<>(); object.put("vault-key", "config-data works"); object.put("nested", Collections.singletonMap("key", "value")); - vaultRule.prepare().getVaultOperations().write("secret/config-location", object); + VaultRule.prepare().getVaultOperations().write("secret/config-location", object); } @Test diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigLoaderTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigLoaderTests.java index 47a7810e..34e45e8e 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigLoaderTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigLoaderTests.java @@ -48,8 +48,7 @@ * @author Mark Paluch */ @SpringBootTest(classes = VaultConfigLoaderTests.TestApplication.class, - properties = { "spring.cloud.vault.uri=https://localhost:8200", - "spring.cloud.vault.application-name=config-data", "spring.config.import=vault:" }) + properties = { "spring.cloud.vault.application-name=config-data", "spring.config.import=vault:" }) public class VaultConfigLoaderTests { @Value("${vault.value}") diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTemplateIntegrationTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTemplateIntegrationTests.java index a2f8c6ea..f6dfdd51 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTemplateIntegrationTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTemplateIntegrationTests.java @@ -26,7 +26,7 @@ import org.springframework.cloud.vault.util.Version; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests for {@link VaultConfigTemplate}. diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTests.java index c7033fe0..88a8fa4f 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTests.java @@ -48,9 +48,7 @@ * @author Mark Paluch */ @SpringBootTest(classes = VaultConfigTests.TestApplication.class, - properties = { "spring.cloud.vault.host=foo", "spring.cloud.vault.port=80", - "spring.cloud.vault.uri=https://localhost:8200", "spring.cloud.vault.application-name=testVaultApp", - "spring.cloud.bootstrap.enabled=true" }) + properties = { "spring.cloud.vault.application-name=testVaultApp", "spring.cloud.bootstrap.enabled=true" }) public class VaultConfigTests { @Value("${vault.value}") @@ -67,12 +65,13 @@ public static void beforeClass() { VaultRule vaultRule = new VaultRule(); vaultRule.before(); + VaultRule.initializeSystemProperties(); Map object = new HashMap<>(); object.put("vault.value", "foo"); object.put("nested", Collections.singletonMap("key", "value")); - vaultRule.prepare().getVaultOperations().write("secret/testVaultApp", object); + VaultRule.prepare().getVaultOperations().write("secret/testVaultApp", object); } @Test diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTlsCertAuthenticationMountPathTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTlsCertAuthenticationMountPathTests.java index 23d99d71..b836544d 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTlsCertAuthenticationMountPathTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultConfigTlsCertAuthenticationMountPathTests.java @@ -61,6 +61,7 @@ public static void beforeClass() { VaultRule vaultRule = new VaultRule(); vaultRule.before(); + VaultRule.initializeSystemProperties(); VaultProperties vaultProperties = Settings.createVaultProperties(); @@ -73,7 +74,7 @@ public static void beforeClass() { .authMount(vaultProperties.getSsl().getCertAuthPath(), VaultMount.builder().type("cert").build()); } - VaultOperations vaultOperations = vaultRule.prepare().getVaultOperations(); + VaultOperations vaultOperations = VaultRule.prepare().getVaultOperations(); String rules = "path \"*\" {\n capabilities = [\"read\"]\n}"; diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultNamespaceTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultNamespaceTests.java index 6722f6ec..51ff2d27 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultNamespaceTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultNamespaceTests.java @@ -22,8 +22,7 @@ import java.util.List; import java.util.Map; -import org.junit.Assume; -import org.junit.ClassRule; +import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import reactor.core.publisher.Mono; @@ -31,6 +30,7 @@ import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.Status; +import org.springframework.cloud.vault.util.PrepareVault; import org.springframework.cloud.vault.util.Settings; import org.springframework.cloud.vault.util.TestRestTemplateFactory; import org.springframework.cloud.vault.util.VaultRule; @@ -58,9 +58,6 @@ public class VaultNamespaceTests { - @ClassRule - public static VaultRule vaultRule = new VaultRule(); - static final Policy POLICY = Policy.of(Policy.Rule.builder() .path("/*") .capabilities(Policy.BuiltinCapabilities.READ, Policy.BuiltinCapabilities.CREATE, @@ -78,15 +75,15 @@ public class VaultNamespaceTests { @BeforeEach public void before() { - Assume.assumeTrue("Namespaces require enterprise version", - this.vaultRule.prepare().getVersion().isEnterprise()); + PrepareVault prepareVault = VaultRule.prepare(); + Assumptions.assumeTrue(prepareVault.getVersion().isEnterprise(), "Namespaces require enterprise version"); List namespaces = new ArrayList<>(Arrays.asList("dev/", "marketing/")); - List list = this.vaultRule.prepare().getVaultOperations().list("sys/namespaces"); + List list = prepareVault.getVaultOperations().list("sys/namespaces"); namespaces.removeAll(list); for (String namespace : namespaces) { - this.vaultRule.prepare().getVaultOperations().write("sys/namespaces/" + namespace.replaceAll("/", "")); + prepareVault.getVaultOperations().write("sys/namespaces/" + namespace.replaceAll("/", "")); } this.maketingRestTemplate = RestTemplateBuilder.builder() diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultPropertySourceIntegrationTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultPropertySourceIntegrationTests.java index 85871c29..6af6a792 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultPropertySourceIntegrationTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultPropertySourceIntegrationTests.java @@ -26,7 +26,7 @@ import org.springframework.cloud.vault.util.Version; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration tests for {@link VaultPropertySource}. diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultVersionedKvBackendConfigTests.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultVersionedKvBackendConfigTests.java index d2d9718e..a9011db7 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultVersionedKvBackendConfigTests.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/config/VaultVersionedKvBackendConfigTests.java @@ -37,7 +37,7 @@ import org.springframework.web.client.RestTemplate; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Integration test using config infrastructure with token authentication. @@ -51,10 +51,8 @@ */ @SpringBootTest(classes = VaultVersionedKvBackendConfigTests.TestApplication.class, - properties = { "spring.cloud.vault.host=foo", "spring.cloud.vault.port=80", - "spring.cloud.vault.uri=https://localhost:8200", "spring.cloud.vault.kv.enabled=true", - "spring.cloud.vault.kv.backend=versioned", "spring.cloud.vault.application-name=testVaultApp", - "spring.cloud.bootstrap.enabled=true" }) + properties = { "spring.cloud.vault.kv.enabled=true", "spring.cloud.vault.kv.backend=versioned", + "spring.cloud.vault.application-name=testVaultApp", "spring.cloud.bootstrap.enabled=true" }) public class VaultVersionedKvBackendConfigTests { @Value("${vault.value}") diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/IntegrationTestSupport.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/IntegrationTestSupport.java index ea2efe7b..88976f9e 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/IntegrationTestSupport.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/IntegrationTestSupport.java @@ -29,7 +29,7 @@ public abstract class IntegrationTestSupport { public final VaultRule vaultRule = new VaultRule(); public final PrepareVault prepare() { - return this.vaultRule.prepare(); + return VaultRule.prepare(); } } diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/Settings.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/Settings.java index 052b33af..f7244009 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/Settings.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/Settings.java @@ -73,11 +73,41 @@ public static File findWorkDir() { * @throws IllegalStateException If the {@code work} directory cannot be found. */ public static File findWorkDir(File directory) { + return findDir(directory, "work"); + } + + /** + * Find the {@code work} directory, starting at the {@code user.dir} directory. Search + * is performed by walking the parent directories. + * @return the {@link File} pointing to the {@code work} directory + * @throws IllegalStateException If the {@code work} directory cannot be found. + */ + public static File findConfigDir() { + return findConfigDir(new File(System.getProperty("user.dir"))); + } + + /** + * Find the {@code work} directory, starting at the given {@code directory}. Search is + * performed by walking the parent directories. + * @return the {@link File} pointing to the {@code work} directory + * @throws IllegalStateException If the {@code work} directory cannot be found. + */ + public static File findConfigDir(File directory) { + return findDir(directory, "config"); + } + + /** + * Find the {@code toFind} directory, starting at the given {@code dirToSearch}. + * Search is performed by walking the parent directories. + * @return the {@link File} pointing to the {@code toFind} directory + * @throws IllegalStateException If the {@code toFind} directory cannot be found. + */ + public static File findDir(File dirToSearch, String toFind) { - File searchLevel = directory; + File searchLevel = dirToSearch; while (searchLevel.getParentFile() != null && searchLevel.getParentFile() != searchLevel) { - File work = new File(searchLevel, "work"); + File work = new File(searchLevel, toFind); if (work.isDirectory() && work.exists()) { return work; } @@ -86,7 +116,7 @@ public static File findWorkDir(File directory) { } throw new IllegalStateException(String.format("Cannot find work directory in %s or any parent directories", - directory.getAbsoluteFile())); + dirToSearch.getAbsoluteFile())); } /** diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/TestRestTemplateFactory.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/TestRestTemplateFactory.java index f47b6b61..48298a57 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/TestRestTemplateFactory.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/TestRestTemplateFactory.java @@ -39,7 +39,13 @@ */ public class TestRestTemplateFactory { - public static final VaultEndpoint TEST_VAULT_ENDPOINT = new VaultEndpoint(); + public static final VaultEndpoint TEST_VAULT_ENDPOINT; + + static { + VaultRule.createContainer(); + VaultRule.initializeSystemProperties(); + TEST_VAULT_ENDPOINT = VaultRule.vaultEndpoint(); + } private static final AtomicReference factoryCache = new AtomicReference<>(); diff --git a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/VaultRule.java b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/VaultRule.java index 69b3d101..3c89f292 100644 --- a/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/VaultRule.java +++ b/spring-cloud-vault-config/src/test/java/org/springframework/cloud/vault/util/VaultRule.java @@ -16,13 +16,29 @@ package org.springframework.cloud.vault.util; +import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.HashMap; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; - +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.MountableFile; +import org.testcontainers.vault.VaultContainer; + +import org.springframework.cloud.vault.config.VaultProperties; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.MapPropertySource; +import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.io.FileSystemResource; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.util.Assert; import org.springframework.vault.authentication.SessionManager; @@ -31,13 +47,18 @@ import org.springframework.vault.support.SslConfiguration; import org.springframework.vault.support.VaultToken; -public class VaultRule implements BeforeEachCallback { +public class VaultRule implements BeforeEachCallback, + /* ParameterResolver, */ ApplicationContextInitializer { + + static final Logger logger = LoggerFactory.getLogger(VaultRule.class); public static final Version VERSIONING_INTRODUCED_WITH = Version.parse("0.10.0"); + public static final VaultContainer vaultContainer = createContainer(); + private final VaultEndpoint vaultEndpoint; - private final PrepareVault prepareVault; + private static PrepareVault prepareVault = null; private VaultToken token; @@ -48,7 +69,7 @@ public class VaultRule implements BeforeEachCallback { * @see VaultEndpoint */ public VaultRule() { - this(Settings.createSslConfiguration(), TestRestTemplateFactory.TEST_VAULT_ENDPOINT); + this(Settings.createSslConfiguration(), null); } /** @@ -60,15 +81,95 @@ public VaultRule() { public VaultRule(SslConfiguration sslConfiguration, VaultEndpoint vaultEndpoint) { Assert.notNull(sslConfiguration, "SslConfiguration must not be null"); - Assert.notNull(vaultEndpoint, "VaultEndpoint must not be null"); ClientHttpRequestFactory requestFactory = TestRestTemplateFactory.create(sslConfiguration).getRequestFactory(); - VaultTemplate vaultTemplate = new VaultTemplate(vaultEndpoint, requestFactory, new PreparingSessionManager()); + startVault(); + if (vaultEndpoint == null) { + this.vaultEndpoint = vaultEndpoint(); + // this.vaultEndpoint.setScheme("http"); // ignore ssl for now + } + else { + this.vaultEndpoint = vaultEndpoint; + } + + VaultTemplate vaultTemplate = new VaultTemplate(this.vaultEndpoint, requestFactory, + new PreparingSessionManager()); this.token = Settings.token(); - this.prepareVault = new PrepareVault(vaultTemplate); - this.vaultEndpoint = vaultEndpoint; + prepareVault = new PrepareVault(vaultTemplate); + } + + public static VaultEndpoint vaultEndpoint() { + return VaultEndpoint.create(vaultContainer.getHost(), vaultContainer.getMappedPort(8200)); + } + + public static PrepareVault prepare() { + return prepareVault; + } + + public static void startVault() { + if (vaultContainer != null && !vaultContainer.isRunning()) { + vaultContainer.start(); + } + } + + @SuppressWarnings({ "rawtypes" }) + public static VaultContainer createContainer() { + return createContainer("1.11.0"); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static VaultContainer createContainer(String version) { + Path config = Settings.findConfigDir().toPath(); + String vaultConfig = null; + try { + vaultConfig = new FileSystemResource(config.resolve("vaultconfig.json")) + .getContentAsString(StandardCharsets.UTF_8); + vaultConfig = vaultConfig.replaceAll("\\n", ""); + } + catch (IOException e) { + throw new RuntimeException(e); + } + Path work = Settings.findWorkDir().toPath(); + String dockerImageName = "hashicorp/vault:" + version; + VaultContainer container = (VaultContainer) new VaultContainer(dockerImageName) + // .withEnv("VAULT_LOG_LEVEL", "debug") + .withEnv("VAULT_LOCAL_CONFIG", vaultConfig) + .withCopyFileToContainer(MountableFile.forHostPath(work.resolve("ca/certs/localhost.cert.pem"), 0777), + "/tmp/localhost.cert.pem") + .withCopyFileToContainer( + MountableFile.forHostPath(work.resolve("ca/private/localhost.decrypted.key.pem"), 0777), + "/tmp/localhost.decrypted.key.pem") + .withCommand("server") + .withLogConsumer(new Slf4jLogConsumer(logger).withSeparateOutputStreams()); + // because of the tls setup, resetting wait to default for now + container.setWaitStrategy(Wait.defaultWaitStrategy()); + return container; + } + + public static void initializeSystemProperties() { + startVault(); + Integer mappedPort = vaultContainer.getMappedPort(8200); + + System.setProperty(VaultProperties.PREFIX + ".port", String.valueOf(mappedPort)); + System.setProperty(VaultProperties.PREFIX + ".host", vaultContainer.getHost()); + } + + @Override + public void initialize(ConfigurableApplicationContext context) { + startVault(); + + MutablePropertySources sources = context.getEnvironment().getPropertySources(); + + if (!sources.contains("vaultTestcontainer")) { + Integer mappedPort = vaultContainer.getMappedPort(8200); + HashMap map = new HashMap<>(); + map.put(VaultProperties.PREFIX + ".port", String.valueOf(mappedPort)); + map.put(VaultProperties.PREFIX + ".host", vaultContainer.getHost()); + + sources.addFirst(new MapPropertySource("vaultTestcontainer", map)); + } } @Override @@ -88,24 +189,31 @@ public void before() { this.vaultEndpoint.getPort(), getClass().getSimpleName())); } - if (!this.prepareVault.isAvailable()) { + if (!prepareVault.isAvailable()) { - this.token = this.prepareVault.initializeVault(); - this.prepareVault.awaitAvailable(); - this.prepareVault.createToken(Settings.token().getToken(), "root"); + this.token = prepareVault.initializeVault(); + prepareVault.awaitAvailable(); + prepareVault.createToken(Settings.token().getToken(), "root"); - if (this.prepareVault.getVersion().isGreaterThanOrEqualTo(VERSIONING_INTRODUCED_WITH)) { - this.prepareVault.ensureUnversionedSecretsEngine(); - this.prepareVault.mountVersionedKvSecretsEngine(); + if (prepareVault.getVersion().isGreaterThanOrEqualTo(VERSIONING_INTRODUCED_WITH)) { + prepareVault.ensureUnversionedSecretsEngine(); + prepareVault.mountVersionedKvSecretsEngine(); } this.token = Settings.token(); } + initializeSystemProperties(); } - public PrepareVault prepare() { - return this.prepareVault; - } + /* + * @Override public boolean supportsParameter(ParameterContext parameterContext, + * ExtensionContext extensionContext) throws ParameterResolutionException { return + * parameterContext.getParameter().getType().equals(PrepareVault.class); } + * + * @Override public Object resolveParameter(ParameterContext parameterContext, + * ExtensionContext extensionContext) throws ParameterResolutionException { return + * prepareVault; } + */ private class PreparingSessionManager implements SessionManager { diff --git a/spring-cloud-vault-config/src/test/resources/logback-test.xml b/spring-cloud-vault-config/src/test/resources/logback-test.xml new file mode 100644 index 00000000..a42f8ffc --- /dev/null +++ b/spring-cloud-vault-config/src/test/resources/logback-test.xml @@ -0,0 +1,17 @@ + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n + + + + + + + + + + + + + \ No newline at end of file