From b09f79fb4fa934a81ccf235866193d040e6c480e Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 28 May 2020 11:08:26 +0200 Subject: [PATCH] Guard tests against versions with different metadata behavior for deleteVersionAfter. Resolves see gh-432. --- .../vault/support/VaultMetadataResponse.java | 5 +++- ...ValueMetadataTemplateIntegrationTests.java | 29 ++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultMetadataResponse.java b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultMetadataResponse.java index bbe5e7c0..aee9b8c8 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/VaultMetadataResponse.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/VaultMetadataResponse.java @@ -20,6 +20,8 @@ import java.time.Instant; import java.time.Period; import java.util.List; +import org.springframework.lang.Nullable; + /** * Value object to bind Vault HTTP kv read metadata API responses. * @@ -84,8 +86,9 @@ public class VaultMetadataResponse { /** * @return the duration after which a secret is to be deleted. {@link Period#ZERO} for - * unlimited duration. + * unlimited duration. Versions prior to Vault 1.2 may return {@code null}. */ + @Nullable public Duration getDeleteVersionAfter() { return this.deleteVersionAfter; } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultKeyValueMetadataTemplateIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultKeyValueMetadataTemplateIntegrationTests.java index 1361d3f5..ca0120ee 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultKeyValueMetadataTemplateIntegrationTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultKeyValueMetadataTemplateIntegrationTests.java @@ -30,9 +30,22 @@ import org.springframework.vault.support.VaultMetadataRequest; import org.springframework.vault.support.VaultMetadataResponse; import org.springframework.vault.support.VaultResponse; import org.springframework.vault.support.Versioned; +import org.springframework.vault.util.Version; import static org.assertj.core.api.Assertions.assertThat; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.vault.support.VaultMetadataRequest; +import org.springframework.vault.support.VaultMetadataResponse; +import org.springframework.vault.support.VaultResponse; +import org.springframework.vault.support.Versioned; +import org.springframework.vault.util.Version; + /** * Integration tests for {@link VaultKeyValueMetadataOperations}. * @@ -88,14 +101,19 @@ class VaultKeyValueMetadataTemplateIntegrationTests extends AbstractVaultKeyValu assertThat(metadataResponse.getCurrentVersion()).isEqualTo(1); assertThat(metadataResponse.getVersions()).hasSize(1); assertThat(metadataResponse.isCasRequired()).isFalse(); - assertThat(metadataResponse.getDeleteVersionAfter()).isEqualTo(Duration.ZERO); assertThat(metadataResponse.getCreatedTime().isBefore(Instant.now())).isTrue(); assertThat(metadataResponse.getUpdatedTime().isBefore(Instant.now())).isTrue(); Versioned.Metadata version1 = metadataResponse.getVersions().get(0); - assertThat(version1.getDeletedAt()).isNull(); - assertThat(version1.getCreatedAt()).isBefore(Instant.now()); + if (prepare().getVersion().isGreaterThanOrEqualTo(Version.parse("1.2.0"))) { + + assertThat(metadataResponse.getDeleteVersionAfter()).isEqualTo(Duration.ZERO); + + assertThat(version1.getDeletedAt()).isNull(); + assertThat(version1.getCreatedAt()).isBefore(Instant.now()); + } + assertThat(version1.getVersion().getVersion()).isEqualTo(1); } @@ -130,7 +148,10 @@ class VaultKeyValueMetadataTemplateIntegrationTests extends AbstractVaultKeyValu assertThat(metadataResponseAfterUpdate.isCasRequired()).isEqualTo(request.isCasRequired()); assertThat(metadataResponseAfterUpdate.getMaxVersions()).isEqualTo(request.getMaxVersions()); - assertThat(metadataResponseAfterUpdate.getDeleteVersionAfter()).isEqualTo(duration); + + if (prepare().getVersion().isGreaterThanOrEqualTo(Version.parse("1.2.0"))) { + assertThat(metadataResponseAfterUpdate.getDeleteVersionAfter()).isEqualTo(duration); + } } @Test