From f6f3d1feb97350db19837d640a8af29ffd1d287e Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 13 May 2016 22:37:15 +0200 Subject: [PATCH] Polishing. Relocate tests using Vault as config source to config client. Move integration tests to parent package as all tests are integration tests. Enhance JavaDoc. Order travis.yml file according the execution sequence. --- .travis.yml | 22 +++++----- .../cloud/vault/AppIdUserIdMechanism.java | 3 +- .../cloud/vault/SecureBackendAccessors.java | 40 +++++++++++++------ .../springframework/cloud/vault/Sha256.java | 19 +++++---- .../vault/VaultBootstrapConfiguration.java | 30 ++++++++++---- .../cloud/vault/VaultClient.java | 3 +- .../cloud/vault/VaultProperties.java | 19 ++++----- .../vault/VaultPropertySourceLocator.java | 2 + .../cloud/vault/VaultResponse.java | 5 +++ .../cloud/vault/VaultToken.java | 18 ++++++++- .../AbstractIntegrationTests.java | 2 +- .../AppIdAuthenticationIntegrationTests.java | 6 +-- ...AuthenticationMethodsIntegrationTests.java | 12 +++--- .../CassandraSecretIntegrationTests.java | 7 +--- .../GenericSecretIntegrationTests.java | 15 +++---- .../MySqlSecretIntegrationTests.java | 10 ++--- .../PostgreSqlSecretIntegrationTests.java | 4 +- .../{integration => }/PrepareVaultTests.java | 2 +- .../vault/VaultAppIdCustomMechanismTests.java | 20 +++++++--- .../{ => configclient}/VaultAppIdTests.java | 14 +++++-- .../VaultCassandraTests.java | 3 +- .../{ => configclient}/VaultMySqlTests.java | 7 ++-- .../VaultPostgreSqlTests.java | 2 +- .../vault/{ => configclient}/VaultTests.java | 28 +++++++++---- 24 files changed, 179 insertions(+), 114 deletions(-) rename src/test/java/org/springframework/cloud/vault/{integration => }/AbstractIntegrationTests.java (95%) rename src/test/java/org/springframework/cloud/vault/{integration => }/AppIdAuthenticationIntegrationTests.java (88%) rename src/test/java/org/springframework/cloud/vault/{integration => }/AppIdAuthenticationMethodsIntegrationTests.java (94%) rename src/test/java/org/springframework/cloud/vault/{integration => }/CassandraSecretIntegrationTests.java (93%) rename src/test/java/org/springframework/cloud/vault/{integration => }/GenericSecretIntegrationTests.java (81%) rename src/test/java/org/springframework/cloud/vault/{integration => }/MySqlSecretIntegrationTests.java (91%) rename src/test/java/org/springframework/cloud/vault/{integration => }/PostgreSqlSecretIntegrationTests.java (95%) rename src/test/java/org/springframework/cloud/vault/{integration => }/PrepareVaultTests.java (96%) rename src/test/java/org/springframework/cloud/vault/{ => configclient}/VaultAppIdTests.java (85%) rename src/test/java/org/springframework/cloud/vault/{ => configclient}/VaultCassandraTests.java (98%) rename src/test/java/org/springframework/cloud/vault/{ => configclient}/VaultMySqlTests.java (97%) rename src/test/java/org/springframework/cloud/vault/{ => configclient}/VaultPostgreSqlTests.java (98%) rename src/test/java/org/springframework/cloud/vault/{ => configclient}/VaultTests.java (56%) diff --git a/.travis.yml b/.travis.yml index 41bc8b54..a0cf4ab0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,13 +7,6 @@ services: jdk: - oraclejdk8 -before_script: - - mysql -e "CREATE USER 'spring' IDENTIFIED by 'vault';" - - mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'spring'@'%' WITH GRANT OPTION;"; - - psql -U postgres -c "CREATE ROLE spring WITH LOGIN PASSWORD 'vault' CREATEROLE CREATEUSER;" - - sleep 30 # wait until Cassandra is up - - apache-cassandra-2.2.6/bin/cqlsh 127.0.0.1 -u cassandra -p cassandra -e "CREATE USER 'spring' WITH PASSWORD 'vault' SUPERUSER" - install: - mkdir -p download - test -f download/apache-cassandra-2.2.6-bin.tar.gz || wget http://www-eu.apache.org/dist/cassandra/2.2.6/apache-cassandra-2.2.6-bin.tar.gz -O download/apache-cassandra-2.2.6-bin.tar.gz @@ -23,11 +16,20 @@ install: - src/test/bash/install_vault.sh - src/test/bash/local_run_vault.sh & -after_script: pkill vault +before_script: + - mysql -e "CREATE USER 'spring' IDENTIFIED by 'vault';" + - mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'spring'@'%' WITH GRANT OPTION;"; + - psql -U postgres -c "CREATE ROLE spring WITH LOGIN PASSWORD 'vault' CREATEROLE CREATEUSER;" + - sleep 30 # wait until Cassandra is up + - apache-cassandra-2.2.6/bin/cqlsh localhost -u cassandra -p cassandra -e "CREATE USER 'spring' WITH PASSWORD 'vault' SUPERUSER" + script: mvn clean verify +after_script: + - apache-cassandra-2.2.6/bin/nodetool stopdaemon + - pkill vault + cache: directories: - '$HOME/.m2/repository' - - '$HOME/vault/download' - - '$HOME/download' \ No newline at end of file + - 'download' \ No newline at end of file diff --git a/src/main/java/org/springframework/cloud/vault/AppIdUserIdMechanism.java b/src/main/java/org/springframework/cloud/vault/AppIdUserIdMechanism.java index 211c3e0d..4a2089ab 100644 --- a/src/main/java/org/springframework/cloud/vault/AppIdUserIdMechanism.java +++ b/src/main/java/org/springframework/cloud/vault/AppIdUserIdMechanism.java @@ -26,8 +26,7 @@ public interface AppIdUserIdMechanism { /** * Creates a UserId for AppId authentication. * - * @return + * @return the UserId. */ String createUserId(); - } diff --git a/src/main/java/org/springframework/cloud/vault/SecureBackendAccessors.java b/src/main/java/org/springframework/cloud/vault/SecureBackendAccessors.java index 380ba161..d29a83f2 100644 --- a/src/main/java/org/springframework/cloud/vault/SecureBackendAccessors.java +++ b/src/main/java/org/springframework/cloud/vault/SecureBackendAccessors.java @@ -19,9 +19,12 @@ package org.springframework.cloud.vault; import java.util.HashMap; import java.util.Map; +import org.springframework.util.Assert; + /** * Collection of common used {@link SecureBackendAccessor accessors} to access secure * backends. + * * @author Mark Paluch */ public class SecureBackendAccessors { @@ -29,24 +32,30 @@ public class SecureBackendAccessors { /** * Creates a {@link SecureBackendAccessor} for the {@code generic} secure backend. * - * @param vaultProperties - * @param key - * @return + * @param vaultProperties must not be {@literal null}. + * @param key must not be {@literal null} and not empty. + * @return the {@link SecureBackendAccessor} */ public static SecureBackendAccessor generic(VaultProperties vaultProperties, String key) { + + Assert.notNull(vaultProperties, "VaultProperties must not be null"); return generic(vaultProperties.getBackend(), key); } /** * Creates a {@link SecureBackendAccessor} for the {@code generic} secure backend. * - * @param secretBackendPath - * @param key - * @return + * @param secretBackendPath must not be {@literal null} and not empty. + * @param key must not be {@literal null} and not empty. + * @return the {@link SecureBackendAccessor} */ public static SecureBackendAccessor generic(final String secretBackendPath, final String key) { + + Assert.hasText(secretBackendPath, "Secret Backend Path must not be empty"); + Assert.hasText(key, "Key must not be empty"); + return new SecureBackendAccessor() { @Override @@ -65,19 +74,25 @@ public class SecureBackendAccessors { } /** - * Creates a {@link SecureBackendAccessor} for a secure backend using {@link org.springframework.cloud.vault.VaultProperties.DatabaseSecretProperties}. This - * accessor transforms Vault's username/password property names to names provided with - * {@link VaultProperties.DatabaseSecretProperties#getUsernameProperty()} and + * Creates a {@link SecureBackendAccessor} for a secure backend using + * {@link org.springframework.cloud.vault.VaultProperties.DatabaseSecretProperties}. + * This accessor transforms Vault's username/password property names to names provided + * with {@link VaultProperties.DatabaseSecretProperties#getUsernameProperty()} and * {@link VaultProperties.DatabaseSecretProperties#getUsernameProperty()}. * - * @param properties - * @return + * @param properties must not be {@literal null}. + * @return the {@link SecureBackendAccessor} */ - public static SecureBackendAccessor database(final VaultProperties.DatabaseSecretProperties properties) { + public static SecureBackendAccessor database( + final VaultProperties.DatabaseSecretProperties properties) { + + Assert.notNull(properties, "DatabaseSecretProperties must not be null"); + return new SecureBackendAccessor() { @Override public Map variables() { + Map variables = new HashMap<>(); variables.put("backend", properties.getBackend()); variables.put("key", String.format("creds/%s", properties.getRole())); @@ -95,5 +110,4 @@ public class SecureBackendAccessors { } }; } - } diff --git a/src/main/java/org/springframework/cloud/vault/Sha256.java b/src/main/java/org/springframework/cloud/vault/Sha256.java index 1dcc6758..54072f1d 100644 --- a/src/main/java/org/springframework/cloud/vault/Sha256.java +++ b/src/main/java/org/springframework/cloud/vault/Sha256.java @@ -24,7 +24,7 @@ import org.springframework.security.crypto.codec.Hex; import org.springframework.util.Assert; /** - * Utility to generate SHA 256 checksums. + * Utility to generate a SHA 256 checksum. * * @author Mark Paluch */ @@ -33,28 +33,31 @@ class Sha256 { /** * Generates a hex-encoded SHA256 checksum from the supplied {@code content}. * - * @param content - * @return + * @param content must not be {@literal null} and not empty. + * @return hex-encoded SHA256 checksum */ public static String toSha256(String content) { - Assert.hasText(content, "Content must not be empty!"); + Assert.hasText(content, "Content must not be empty"); + MessageDigest messageDigest = getMessageDigest("SHA-256"); byte[] digest = messageDigest.digest(content.getBytes(StandardCharsets.US_ASCII)); return new String(Hex.encode(digest)); } /** - * Get a MessageDigest instance for the given algorithm. Throws an IllegalArgumentException if algorithm is - * unknown + * Get a MessageDigest instance for the given algorithm. Throws an + * IllegalArgumentException if algorithm is unknown * * @return MessageDigest instance * @throws IllegalArgumentException if NoSuchAlgorithmException is thrown */ - private static MessageDigest getMessageDigest(String algorithm) throws IllegalArgumentException { + private static MessageDigest getMessageDigest(String algorithm) + throws IllegalArgumentException { try { return MessageDigest.getInstance(algorithm); - } catch (NoSuchAlgorithmException e) { + } + catch (NoSuchAlgorithmException e) { throw new IllegalArgumentException("No such algorithm [" + algorithm + "]"); } } diff --git a/src/main/java/org/springframework/cloud/vault/VaultBootstrapConfiguration.java b/src/main/java/org/springframework/cloud/vault/VaultBootstrapConfiguration.java index da21f59c..39ac35fe 100644 --- a/src/main/java/org/springframework/cloud/vault/VaultBootstrapConfiguration.java +++ b/src/main/java/org/springframework/cloud/vault/VaultBootstrapConfiguration.java @@ -18,6 +18,7 @@ package org.springframework.cloud.vault; import java.util.Map; +import org.springframework.beans.BeanUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -25,6 +26,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.Assert; +import org.springframework.util.ClassUtils; /** * @author Spencer Gibb @@ -40,9 +42,11 @@ public class VaultBootstrapConfiguration { VaultClient vaultClient = new VaultClient(vaultProperties()); - Map appIdUserIdMechanisms = applicationContext.getBeansOfType(AppIdUserIdMechanism.class); - if(!appIdUserIdMechanisms.isEmpty()){ - vaultClient.setAppIdUserIdMechanism(appIdUserIdMechanisms.values().iterator().next()); + Map appIdUserIdMechanisms = applicationContext + .getBeansOfType(AppIdUserIdMechanism.class); + if (!appIdUserIdMechanisms.isEmpty()) { + vaultClient.setAppIdUserIdMechanism( + appIdUserIdMechanisms.values().iterator().next()); } return vaultClient; @@ -59,20 +63,30 @@ public class VaultBootstrapConfiguration { public AppIdUserIdMechanism appIdUserIdMechanism(VaultProperties vaultProperties) { String userId = vaultProperties.getAppId().getUserId(); - Assert.hasText(userId, "UserId (spring.cloud.vault.app-id.user-id) must not be empty."); + Assert.hasText(userId, + "UserId (spring.cloud.vault.app-id.user-id) must not be empty."); - switch (userId.toUpperCase()) { + try { + Class userIdClass = ClassUtils.forName(userId, null); + return (AppIdUserIdMechanism) BeanUtils.instantiateClass(userIdClass); + } + catch (ClassNotFoundException ex) { + + switch (userId.toUpperCase()) { case VaultProperties.AppIdProperties.IP_ADDRESS: return new IpAddressUserId(); - case VaultProperties.AppIdProperties.MAC_ADDRESS: + case VaultProperties.AppIdProperties.MAC_ADDRESS: return new MacAddressUserId(vaultProperties); default: return new StaticUserId(vaultProperties); + } } } @Bean - public VaultPropertySourceLocator vaultPropertySourceLocator(ApplicationContext applicationContext) { - return new VaultPropertySourceLocator(vaultClient(applicationContext), vaultProperties()); + public VaultPropertySourceLocator vaultPropertySourceLocator( + ApplicationContext applicationContext) { + return new VaultPropertySourceLocator(vaultClient(applicationContext), + vaultProperties()); } } diff --git a/src/main/java/org/springframework/cloud/vault/VaultClient.java b/src/main/java/org/springframework/cloud/vault/VaultClient.java index b8c27c5f..d8b614e3 100644 --- a/src/main/java/org/springframework/cloud/vault/VaultClient.java +++ b/src/main/java/org/springframework/cloud/vault/VaultClient.java @@ -83,6 +83,7 @@ public class VaultClient { } private HttpHeaders createHeaders(VaultToken vaultToken) { + HttpHeaders headers = new HttpHeaders(); headers.add(VAULT_TOKEN, vaultToken.getToken()); return headers; @@ -91,7 +92,7 @@ public class VaultClient { /** * Creates a token using a configured authentication mechanism. * - * @return + * @return the {@link VaultToken}. */ public VaultToken createToken() { diff --git a/src/main/java/org/springframework/cloud/vault/VaultProperties.java b/src/main/java/org/springframework/cloud/vault/VaultProperties.java index 31d2d3a7..dcb0d057 100644 --- a/src/main/java/org/springframework/cloud/vault/VaultProperties.java +++ b/src/main/java/org/springframework/cloud/vault/VaultProperties.java @@ -16,12 +16,12 @@ package org.springframework.cloud.vault; -import lombok.Data; - import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; import org.springframework.boot.context.properties.ConfigurationProperties; +import lombok.Data; + /** * @author Spencer Gibb * @author Mark Paluch @@ -77,11 +77,11 @@ public class VaultProperties { private AppIdProperties appId = new AppIdProperties(); - private final MySql mysql = new MySql(); + private MySql mysql = new MySql(); - private final PostgreSql postgresql = new PostgreSql(); + private PostgreSql postgresql = new PostgreSql(); - private final Cassandra cassandra = new Cassandra(); + private Cassandra cassandra = new Cassandra(); /** * Application name for AppId authentication. @@ -117,7 +117,8 @@ public class VaultProperties { private String networkInterface = null; /** - * UserId mechanism. Can be either "MAC_ADDRESS", "IP_ADDRESS". Any other values are passed as UserId. + * UserId mechanism. Can be either "MAC_ADDRESS", "IP_ADDRESS", a string or a + * class name. */ @NotEmpty private String userId = MAC_ADDRESS; @@ -220,21 +221,21 @@ public class VaultProperties { } /** - * Configuration properties for database secrets. + * Configuration properties interface for database secrets. */ public interface DatabaseSecretProperties { /** * Role name. * - * @return + * @return the role name */ String getRole(); /** * Backend path. * - * @return + * @return the backend path. */ String getBackend(); diff --git a/src/main/java/org/springframework/cloud/vault/VaultPropertySourceLocator.java b/src/main/java/org/springframework/cloud/vault/VaultPropertySourceLocator.java index d51de11f..29d77285 100644 --- a/src/main/java/org/springframework/cloud/vault/VaultPropertySourceLocator.java +++ b/src/main/java/org/springframework/cloud/vault/VaultPropertySourceLocator.java @@ -28,6 +28,8 @@ import org.springframework.core.env.Environment; import org.springframework.core.env.PropertySource; /** + * {@link PropertySourceLocator} using {@link VaultClient}. + * * @author Spencer Gibb */ public class VaultPropertySourceLocator implements PropertySourceLocator { diff --git a/src/main/java/org/springframework/cloud/vault/VaultResponse.java b/src/main/java/org/springframework/cloud/vault/VaultResponse.java index e50b4362..e8b1d433 100644 --- a/src/main/java/org/springframework/cloud/vault/VaultResponse.java +++ b/src/main/java/org/springframework/cloud/vault/VaultResponse.java @@ -23,16 +23,21 @@ import lombok.Data; import com.fasterxml.jackson.annotation.JsonProperty; /** + * Value object to bind HTTP API responses. + * * @author Spencer Gibb * @author Mark Paluch */ @Data public class VaultResponse { + private Map auth; private Map data; private Map metadata; + @JsonProperty("lease_duration") private long leaseDuration; + @JsonProperty("lease_id") private String leaseId; private boolean renewable; diff --git a/src/main/java/org/springframework/cloud/vault/VaultToken.java b/src/main/java/org/springframework/cloud/vault/VaultToken.java index 292048e9..693a248c 100644 --- a/src/main/java/org/springframework/cloud/vault/VaultToken.java +++ b/src/main/java/org/springframework/cloud/vault/VaultToken.java @@ -16,26 +16,40 @@ package org.springframework.cloud.vault; +import org.springframework.util.Assert; + import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Value; -import org.springframework.util.Assert; - /** + * Value object for a Vault token. + * * @author Mark Paluch */ @Value @AllArgsConstructor(access = AccessLevel.PRIVATE) public class VaultToken { + private String token; private long leaseDuration; + /** + * Creates a new {@link VaultToken}. + * @param token must not be {@literal null}. + * @return the created {@link VaultToken} + */ public static VaultToken of(String token) { return of(token, 0); } + /** + * Creates a new {@link VaultToken} with a {@code leaseDuration}. + * @param token must not be {@literal null}. + * @return the created {@link VaultToken} + */ public static VaultToken of(String token, long leaseDuration) { + Assert.hasText(token, "Token must not be empty"); return new VaultToken(token, leaseDuration); } diff --git a/src/test/java/org/springframework/cloud/vault/integration/AbstractIntegrationTests.java b/src/test/java/org/springframework/cloud/vault/AbstractIntegrationTests.java similarity index 95% rename from src/test/java/org/springframework/cloud/vault/integration/AbstractIntegrationTests.java rename to src/test/java/org/springframework/cloud/vault/AbstractIntegrationTests.java index 207d95d7..901c84da 100644 --- a/src/test/java/org/springframework/cloud/vault/integration/AbstractIntegrationTests.java +++ b/src/test/java/org/springframework/cloud/vault/AbstractIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.vault.integration; +package org.springframework.cloud.vault; import org.junit.Rule; import org.springframework.cloud.vault.util.PrepareVault; diff --git a/src/test/java/org/springframework/cloud/vault/integration/AppIdAuthenticationIntegrationTests.java b/src/test/java/org/springframework/cloud/vault/AppIdAuthenticationIntegrationTests.java similarity index 88% rename from src/test/java/org/springframework/cloud/vault/integration/AppIdAuthenticationIntegrationTests.java rename to src/test/java/org/springframework/cloud/vault/AppIdAuthenticationIntegrationTests.java index 78c2ed20..1666772c 100644 --- a/src/test/java/org/springframework/cloud/vault/integration/AppIdAuthenticationIntegrationTests.java +++ b/src/test/java/org/springframework/cloud/vault/AppIdAuthenticationIntegrationTests.java @@ -14,15 +14,11 @@ * limitations under the License. */ -package org.springframework.cloud.vault.integration; +package org.springframework.cloud.vault; import org.junit.Before; -import org.springframework.cloud.vault.IpAddressUserId; -import org.springframework.cloud.vault.VaultClient; -import org.springframework.cloud.vault.VaultProperties; import org.springframework.cloud.vault.VaultProperties.AppIdProperties; import org.springframework.cloud.vault.VaultProperties.AuthenticationMethod; -import org.springframework.cloud.vault.VaultToken; import org.springframework.cloud.vault.util.Settings; /** diff --git a/src/test/java/org/springframework/cloud/vault/integration/AppIdAuthenticationMethodsIntegrationTests.java b/src/test/java/org/springframework/cloud/vault/AppIdAuthenticationMethodsIntegrationTests.java similarity index 94% rename from src/test/java/org/springframework/cloud/vault/integration/AppIdAuthenticationMethodsIntegrationTests.java rename to src/test/java/org/springframework/cloud/vault/AppIdAuthenticationMethodsIntegrationTests.java index 3cc0b5bb..e9cbc33c 100644 --- a/src/test/java/org/springframework/cloud/vault/integration/AppIdAuthenticationMethodsIntegrationTests.java +++ b/src/test/java/org/springframework/cloud/vault/AppIdAuthenticationMethodsIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.vault.integration; +package org.springframework.cloud.vault; import static org.assertj.core.api.Assertions.*; @@ -26,7 +26,6 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.springframework.cloud.vault.*; import org.springframework.cloud.vault.VaultProperties.AppIdProperties; import org.springframework.cloud.vault.VaultProperties.AuthenticationMethod; import org.springframework.cloud.vault.util.Settings; @@ -58,7 +57,8 @@ public class AppIdAuthenticationMethodsIntegrationTests extends AbstractIntegrat @Test public void loginUsingStaticUserIdShouldCreateAToken() throws Exception { - VaultProperties vaultProperties = prepareAppIdAuthenticationMethod("my-user-id", "myapp"); + VaultProperties vaultProperties = prepareAppIdAuthenticationMethod("my-user-id", + "myapp"); VaultClient vaultClient = new VaultClient(vaultProperties); vaultClient.setAppIdUserIdMechanism(new StaticUserId(vaultProperties)); assertThat(vaultClient.createToken()).isNotNull(); @@ -67,11 +67,11 @@ public class AppIdAuthenticationMethodsIntegrationTests extends AbstractIntegrat @Test public void loginUsingMacAddressShouldCreateAToken() throws Exception { - VaultProperties vaultProperties = prepareAppIdAuthenticationMethod(AppIdProperties.MAC_ADDRESS, "myapp"); + VaultProperties vaultProperties = prepareAppIdAuthenticationMethod( + AppIdProperties.MAC_ADDRESS, "myapp"); VaultClient vaultClient = new VaultClient(vaultProperties); - vaultClient.setAppIdUserIdMechanism( - new MacAddressUserId(vaultProperties)); + vaultClient.setAppIdUserIdMechanism(new MacAddressUserId(vaultProperties)); assertThat(vaultClient.createToken()).isNotNull(); } diff --git a/src/test/java/org/springframework/cloud/vault/integration/CassandraSecretIntegrationTests.java b/src/test/java/org/springframework/cloud/vault/CassandraSecretIntegrationTests.java similarity index 93% rename from src/test/java/org/springframework/cloud/vault/integration/CassandraSecretIntegrationTests.java rename to src/test/java/org/springframework/cloud/vault/CassandraSecretIntegrationTests.java index 904d983d..9855b694 100644 --- a/src/test/java/org/springframework/cloud/vault/integration/CassandraSecretIntegrationTests.java +++ b/src/test/java/org/springframework/cloud/vault/CassandraSecretIntegrationTests.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package org.springframework.cloud.vault.integration; +package org.springframework.cloud.vault; import static org.assertj.core.api.Assertions.*; -import static org.junit.Assume.assumeTrue; +import static org.junit.Assume.*; import static org.springframework.cloud.vault.SecureBackendAccessors.*; import java.net.InetSocketAddress; @@ -26,10 +26,7 @@ import java.util.HashMap; import java.util.Map; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; -import org.springframework.cloud.vault.VaultClient; -import org.springframework.cloud.vault.VaultProperties; import org.springframework.cloud.vault.util.CanConnect; import org.springframework.cloud.vault.util.Settings; import org.springframework.web.client.RestTemplate; diff --git a/src/test/java/org/springframework/cloud/vault/integration/GenericSecretIntegrationTests.java b/src/test/java/org/springframework/cloud/vault/GenericSecretIntegrationTests.java similarity index 81% rename from src/test/java/org/springframework/cloud/vault/integration/GenericSecretIntegrationTests.java rename to src/test/java/org/springframework/cloud/vault/GenericSecretIntegrationTests.java index 94654470..6112c8ec 100644 --- a/src/test/java/org/springframework/cloud/vault/integration/GenericSecretIntegrationTests.java +++ b/src/test/java/org/springframework/cloud/vault/GenericSecretIntegrationTests.java @@ -14,20 +14,16 @@ * limitations under the License. */ -package org.springframework.cloud.vault.integration; +package org.springframework.cloud.vault; import static org.assertj.core.api.Assertions.*; -import static org.springframework.cloud.vault.SecureBackendAccessors.generic; +import static org.springframework.cloud.vault.SecureBackendAccessors.*; import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; -import org.springframework.cloud.vault.SecureBackendAccessors; -import org.springframework.cloud.vault.VaultClient; -import org.springframework.cloud.vault.VaultProperties; -import org.springframework.cloud.vault.VaultToken; import org.springframework.cloud.vault.util.Settings; import org.springframework.web.client.RestTemplate; @@ -50,8 +46,8 @@ public class GenericSecretIntegrationTests extends AbstractIntegrationTests { @Test public void shouldReturnSecretsCorrectly() throws Exception { - Map secretProperties = vaultClient.read(generic(vaultProperties, "app-name"), - createToken()); + Map secretProperties = vaultClient + .read(generic(vaultProperties, "app-name"), createToken()); assertThat(secretProperties).containsAllEntriesOf(createExpectedMap()); } @@ -59,7 +55,8 @@ public class GenericSecretIntegrationTests extends AbstractIntegrationTests { @Test public void shouldReturnNullIfNotFound() throws Exception { - Map secretProperties = vaultClient.read(generic(vaultProperties, "missing"), createToken()); + Map secretProperties = vaultClient + .read(generic(vaultProperties, "missing"), createToken()); assertThat(secretProperties).isNull(); } diff --git a/src/test/java/org/springframework/cloud/vault/integration/MySqlSecretIntegrationTests.java b/src/test/java/org/springframework/cloud/vault/MySqlSecretIntegrationTests.java similarity index 91% rename from src/test/java/org/springframework/cloud/vault/integration/MySqlSecretIntegrationTests.java rename to src/test/java/org/springframework/cloud/vault/MySqlSecretIntegrationTests.java index c30148bb..f97564fa 100644 --- a/src/test/java/org/springframework/cloud/vault/integration/MySqlSecretIntegrationTests.java +++ b/src/test/java/org/springframework/cloud/vault/MySqlSecretIntegrationTests.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package org.springframework.cloud.vault.integration; +package org.springframework.cloud.vault; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; -import static org.springframework.cloud.vault.SecureBackendAccessors.database; +import static org.assertj.core.api.Assertions.*; +import static org.junit.Assume.*; +import static org.springframework.cloud.vault.SecureBackendAccessors.*; import java.net.InetSocketAddress; import java.util.Collections; @@ -26,8 +26,6 @@ import java.util.Map; import org.junit.Before; import org.junit.Test; -import org.springframework.cloud.vault.VaultClient; -import org.springframework.cloud.vault.VaultProperties; import org.springframework.cloud.vault.util.CanConnect; import org.springframework.cloud.vault.util.Settings; import org.springframework.web.client.RestTemplate; diff --git a/src/test/java/org/springframework/cloud/vault/integration/PostgreSqlSecretIntegrationTests.java b/src/test/java/org/springframework/cloud/vault/PostgreSqlSecretIntegrationTests.java similarity index 95% rename from src/test/java/org/springframework/cloud/vault/integration/PostgreSqlSecretIntegrationTests.java rename to src/test/java/org/springframework/cloud/vault/PostgreSqlSecretIntegrationTests.java index 3a340b59..a1c308f6 100644 --- a/src/test/java/org/springframework/cloud/vault/integration/PostgreSqlSecretIntegrationTests.java +++ b/src/test/java/org/springframework/cloud/vault/PostgreSqlSecretIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.vault.integration; +package org.springframework.cloud.vault; import static org.assertj.core.api.Assertions.*; import static org.junit.Assume.*; @@ -26,8 +26,6 @@ import java.util.Map; import org.junit.Before; import org.junit.Test; -import org.springframework.cloud.vault.VaultClient; -import org.springframework.cloud.vault.VaultProperties; import org.springframework.cloud.vault.util.CanConnect; import org.springframework.cloud.vault.util.Settings; import org.springframework.web.client.RestTemplate; diff --git a/src/test/java/org/springframework/cloud/vault/integration/PrepareVaultTests.java b/src/test/java/org/springframework/cloud/vault/PrepareVaultTests.java similarity index 96% rename from src/test/java/org/springframework/cloud/vault/integration/PrepareVaultTests.java rename to src/test/java/org/springframework/cloud/vault/PrepareVaultTests.java index 01f96ce6..def8056d 100644 --- a/src/test/java/org/springframework/cloud/vault/integration/PrepareVaultTests.java +++ b/src/test/java/org/springframework/cloud/vault/PrepareVaultTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.vault.integration; +package org.springframework.cloud.vault; import org.junit.Test; import org.springframework.boot.test.TestRestTemplate; diff --git a/src/test/java/org/springframework/cloud/vault/VaultAppIdCustomMechanismTests.java b/src/test/java/org/springframework/cloud/vault/VaultAppIdCustomMechanismTests.java index 9eefeb3c..0b9db8a2 100644 --- a/src/test/java/org/springframework/cloud/vault/VaultAppIdCustomMechanismTests.java +++ b/src/test/java/org/springframework/cloud/vault/VaultAppIdCustomMechanismTests.java @@ -40,8 +40,10 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Mark Paluch */ @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = {BootstrapConfiguration.class, VaultAppIdCustomMechanismTests.TestApplication.class}) -@IntegrationTest({ "spring.cloud.vault.authentication=appid", "use.custom.config=true", "spring.application.name=VaultAppIdCustomMechanismTests"}) +@SpringApplicationConfiguration(classes = { BootstrapConfiguration.class, + VaultAppIdCustomMechanismTests.TestApplication.class }) +@IntegrationTest({ "spring.cloud.vault.authentication=appid", "use.custom.config=true", + "spring.application.name=VaultAppIdCustomMechanismTests" }) public class VaultAppIdCustomMechanismTests { @BeforeClass @@ -50,7 +52,9 @@ public class VaultAppIdCustomMechanismTests { VaultRule vaultRule = new VaultRule(); vaultRule.before(); - vaultRule.prepare().writeSecret(VaultAppIdCustomMechanismTests.class.getSimpleName(), Collections.singletonMap("vault.value", "foo")); + vaultRule.prepare().writeSecret( + VaultAppIdCustomMechanismTests.class.getSimpleName(), + Collections.singletonMap("vault.value", "foo")); VaultProperties vaultProperties = Settings.createVaultProperties(); vaultProperties.setAuthentication(VaultProperties.AuthenticationMethod.APPID); @@ -59,12 +63,16 @@ public class VaultAppIdCustomMechanismTests { vaultRule.prepare().mountAuth(vaultProperties.getAppId().getAppIdPath()); } - vaultRule.prepare().mapAppId(VaultAppIdCustomMechanismTests.class.getSimpleName()); - vaultRule.prepare().mapUserId(VaultAppIdCustomMechanismTests.class.getSimpleName(), new StaticUserIdMechanism().createUserId()); + vaultRule.prepare() + .mapAppId(VaultAppIdCustomMechanismTests.class.getSimpleName()); + vaultRule.prepare().mapUserId( + VaultAppIdCustomMechanismTests.class.getSimpleName(), + new StaticUserIdMechanism().createUserId()); } - @Value("${vault.value}") String configValue; + @Value("${vault.value}") + String configValue; @Test public void contextLoads() { diff --git a/src/test/java/org/springframework/cloud/vault/VaultAppIdTests.java b/src/test/java/org/springframework/cloud/vault/configclient/VaultAppIdTests.java similarity index 85% rename from src/test/java/org/springframework/cloud/vault/VaultAppIdTests.java rename to src/test/java/org/springframework/cloud/vault/configclient/VaultAppIdTests.java index af052a27..879e474f 100644 --- a/src/test/java/org/springframework/cloud/vault/VaultAppIdTests.java +++ b/src/test/java/org/springframework/cloud/vault/configclient/VaultAppIdTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.vault; +package org.springframework.cloud.vault.configclient; import static org.assertj.core.api.Assertions.*; @@ -28,6 +28,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.cloud.vault.IpAddressUserId; +import org.springframework.cloud.vault.VaultProperties; import org.springframework.cloud.vault.util.Settings; import org.springframework.cloud.vault.util.VaultRule; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -37,7 +39,9 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = VaultAppIdTests.TestApplication.class) -@IntegrationTest({"spring.cloud.vault.authentication=appid", "spring.cloud.vault.app-id.user-id=IP_ADDRESS", "spring.application.name=VaultAppIdTests"}) +@IntegrationTest({ "spring.cloud.vault.authentication=appid", + "spring.cloud.vault.app-id.user-id=IP_ADDRESS", + "spring.application.name=VaultAppIdTests" }) public class VaultAppIdTests { @BeforeClass @@ -46,7 +50,8 @@ public class VaultAppIdTests { VaultRule vaultRule = new VaultRule(); vaultRule.before(); - vaultRule.prepare().writeSecret(VaultAppIdTests.class.getSimpleName(), Collections.singletonMap("vault.value", "foo")); + vaultRule.prepare().writeSecret(VaultAppIdTests.class.getSimpleName(), + Collections.singletonMap("vault.value", "foo")); VaultProperties vaultProperties = Settings.createVaultProperties(); vaultProperties.setAuthentication(VaultProperties.AuthenticationMethod.APPID); @@ -57,7 +62,8 @@ public class VaultAppIdTests { } vaultRule.prepare().mapAppId(VaultAppIdTests.class.getSimpleName()); - vaultRule.prepare().mapUserId(VaultAppIdTests.class.getSimpleName(), new IpAddressUserId().createUserId()); + vaultRule.prepare().mapUserId(VaultAppIdTests.class.getSimpleName(), + new IpAddressUserId().createUserId()); } @Value("${vault.value}") diff --git a/src/test/java/org/springframework/cloud/vault/VaultCassandraTests.java b/src/test/java/org/springframework/cloud/vault/configclient/VaultCassandraTests.java similarity index 98% rename from src/test/java/org/springframework/cloud/vault/VaultCassandraTests.java rename to src/test/java/org/springframework/cloud/vault/configclient/VaultCassandraTests.java index 0586a3f9..82613af6 100644 --- a/src/test/java/org/springframework/cloud/vault/VaultCassandraTests.java +++ b/src/test/java/org/springframework/cloud/vault/configclient/VaultCassandraTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.vault; +package org.springframework.cloud.vault.configclient; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assume.*; @@ -26,7 +26,6 @@ import java.util.HashMap; import java.util.Map; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/test/java/org/springframework/cloud/vault/VaultMySqlTests.java b/src/test/java/org/springframework/cloud/vault/configclient/VaultMySqlTests.java similarity index 97% rename from src/test/java/org/springframework/cloud/vault/VaultMySqlTests.java rename to src/test/java/org/springframework/cloud/vault/configclient/VaultMySqlTests.java index 4e710eb5..1257418d 100644 --- a/src/test/java/org/springframework/cloud/vault/VaultMySqlTests.java +++ b/src/test/java/org/springframework/cloud/vault/configclient/VaultMySqlTests.java @@ -14,7 +14,9 @@ * limitations under the License. */ -package org.springframework.cloud.vault; +package org.springframework.cloud.vault.configclient; + +import static org.junit.Assume.*; import static org.assertj.core.api.Assertions.*; import static org.junit.Assume.*; @@ -29,7 +31,6 @@ import javax.sql.DataSource; import com.mysql.jdbc.MySQLConnection; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -42,8 +43,6 @@ import org.springframework.cloud.vault.util.CanConnect; import org.springframework.cloud.vault.util.VaultRule; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import static org.junit.Assume.assumeTrue; - /** * Integration tests using the mysql secret backend. */ diff --git a/src/test/java/org/springframework/cloud/vault/VaultPostgreSqlTests.java b/src/test/java/org/springframework/cloud/vault/configclient/VaultPostgreSqlTests.java similarity index 98% rename from src/test/java/org/springframework/cloud/vault/VaultPostgreSqlTests.java rename to src/test/java/org/springframework/cloud/vault/configclient/VaultPostgreSqlTests.java index 1b042836..142565cc 100644 --- a/src/test/java/org/springframework/cloud/vault/VaultPostgreSqlTests.java +++ b/src/test/java/org/springframework/cloud/vault/configclient/VaultPostgreSqlTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.vault; +package org.springframework.cloud.vault.configclient; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assume.*; diff --git a/src/test/java/org/springframework/cloud/vault/VaultTests.java b/src/test/java/org/springframework/cloud/vault/configclient/VaultTests.java similarity index 56% rename from src/test/java/org/springframework/cloud/vault/VaultTests.java rename to src/test/java/org/springframework/cloud/vault/configclient/VaultTests.java index bd67192c..513a545c 100644 --- a/src/test/java/org/springframework/cloud/vault/VaultTests.java +++ b/src/test/java/org/springframework/cloud/vault/configclient/VaultTests.java @@ -1,11 +1,25 @@ -package org.springframework.cloud.vault; +/* + * Copyright 2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ -import static org.assertj.core.api.Assertions.assertThat; +package org.springframework.cloud.vault.configclient; + +import static org.assertj.core.api.Assertions.*; import java.util.Collections; -import java.util.Map; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -13,8 +27,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.boot.test.WebIntegrationTest; -import org.springframework.cloud.vault.util.PrepareVault; import org.springframework.cloud.vault.util.VaultRule; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -22,14 +34,14 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @SpringApplicationConfiguration(classes = VaultTests.TestApplication.class) public class VaultTests { - @BeforeClass public static void beforeClass() throws Exception { VaultRule vaultRule = new VaultRule(); vaultRule.before(); - vaultRule.prepare().writeSecret("testVaultApp", Collections.singletonMap("vault.value", "foo")); + vaultRule.prepare().writeSecret("testVaultApp", + Collections.singletonMap("vault.value", "foo")); } @Value("${vault.value}")