Polishing.

Extract Object Mapper creation into singleton holder. Use as(StepVerifier) syntax instead of StepVerifier.create(publisher). Reduce nullability warnings.

See gh-443.
This commit is contained in:
Mark Paluch
2019-06-30 15:27:43 +02:00
parent 4c9d67dac7
commit 09da7f2538
30 changed files with 304 additions and 178 deletions

View File

@@ -135,6 +135,24 @@ public class Versioned<T> {
return metadata;
}
/**
* Returns the required {@link Metadata} for this versioned object. Throws
* {@link IllegalStateException} if no metadata is associated.
*
* @return the non-null {@link Metadata} held by this for this versioned object.
* @throws IllegalStateException if no metadata is present.
*/
public Metadata getRequiredMetadata() {
Metadata metadata = this.metadata;
if (metadata == null) {
throw new IllegalStateException("Required Metadata is not present");
}
return metadata;
}
/**
* @return {@literal true} if this versioned object has data associated, or
* {@code false}, of the version is deleted or destroyed.

View File

@@ -44,7 +44,10 @@ class AppIdAuthenticationOperatorIntegrationTests extends
AuthenticationStepsOperator supplier = new AuthenticationStepsOperator(
AppIdAuthentication.createAuthenticationSteps(options), webClient);
StepVerifier.create(supplier.getVaultToken()).expectNextCount(1).verifyComplete();
supplier.getVaultToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
}
@Test
@@ -58,6 +61,9 @@ class AppIdAuthenticationOperatorIntegrationTests extends
AuthenticationStepsOperator supplier = new AuthenticationStepsOperator(
AppIdAuthentication.createAuthenticationSteps(options), webClient);
StepVerifier.create(supplier.getVaultToken()).expectError().verify();
supplier.getVaultToken() //
.as(StepVerifier::create) //
.expectError() //
.verify();
}
}

View File

@@ -76,7 +76,8 @@ class AppRoleAuthenticationIntegrationTestBase extends IntegrationTestSupport {
String getRoleId(String roleName) {
return (String) getVaultOperations()
.read(String.format("auth/approle/role/%s/role-id", roleName)).getData()
.read(String.format("auth/approle/role/%s/role-id", roleName))
.getRequiredData()
.get("role_id");
}

View File

@@ -79,7 +79,7 @@ class AppRoleAuthenticationIntegrationTests extends
String roleId = getRoleId("with-secret-id");
String secretId = (String) getVaultOperations()
.write(String.format("auth/approle/role/%s/secret-id", "with-secret-id"),
null).getData().get("secret_id");
null).getRequiredData().get("secret_id");
AppRoleAuthenticationOptions options = AppRoleAuthenticationOptions.builder()
.roleId(roleId).secretId(secretId).build();
@@ -182,6 +182,6 @@ class AppRoleAuthenticationIntegrationTests extends
getVaultOperations().write(
"auth/approle/role/with-secret-id/secret-id-accessor/destroy",
customSecretIdResponse.getData());
customSecretIdResponse.getRequiredData());
}
}

View File

@@ -60,7 +60,7 @@ class AppRoleAuthenticationStepsIntegrationTests extends
String secretId = (String) getVaultOperations()
.write(String.format("auth/approle/role/%s/secret-id", "with-secret-id"),
null).getData().get("secret_id");
null).getRequiredData().get("secret_id");
VaultToken roleIdToken = generateWrappedRoleIdResponse();
@@ -109,7 +109,7 @@ class AppRoleAuthenticationStepsIntegrationTests extends
String secretId = (String) getVaultOperations()
.write(String.format("auth/approle/role/%s/secret-id", "with-secret-id"),
null).getData().get("secret_id");
null).getRequiredData().get("secret_id");
AppRoleAuthenticationOptions options = AppRoleAuthenticationOptions.builder()
.secretId(SecretId.provided(secretId)).appRole("with-secret-id")
@@ -158,7 +158,7 @@ class AppRoleAuthenticationStepsIntegrationTests extends
getVaultOperations().write(
"auth/approle/role/with-secret-id/secret-id-accessor/destroy",
customSecretIdResponse.getData());
customSecretIdResponse.getRequiredData());
}
@Test

View File

@@ -28,6 +28,7 @@ import org.springframework.vault.VaultException;
import org.springframework.vault.authentication.AppRoleAuthenticationOptions.SecretId;
import org.springframework.vault.client.VaultClients;
import org.springframework.vault.client.VaultClients.PrefixAwareUriTemplateHandler;
import org.springframework.vault.support.ObjectMapperSupplier;
import org.springframework.vault.support.VaultToken;
import org.springframework.web.client.RestTemplate;
@@ -50,7 +51,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat
*/
class AppRoleAuthenticationUnitTests {
static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
ObjectMapper OBJECT_MAPPER = ObjectMapperSupplier.get();
RestTemplate restTemplate;

View File

@@ -50,7 +50,8 @@ class AuthenticationStepsOperatorUnitTests {
AuthenticationSteps steps = AuthenticationSteps.just(VaultToken.of("my-token"));
StepVerifier.create(login(steps)).expectNext(VaultToken.of("my-token"))
login(steps).as(StepVerifier::create) //
.expectNext(VaultToken.of("my-token")) //
.verifyComplete();
}
@@ -60,7 +61,8 @@ class AuthenticationStepsOperatorUnitTests {
AuthenticationSteps steps = AuthenticationSteps.fromSupplier(() -> "my-token")
.login(VaultToken::of);
StepVerifier.create(login(steps)).expectNext(VaultToken.of("my-token"))
login(steps).as(StepVerifier::create) //
.expectNext(VaultToken.of("my-token")) //
.verifyComplete();
}
@@ -82,8 +84,9 @@ class AuthenticationStepsOperatorUnitTests {
AuthenticationSteps steps = AuthenticationSteps.just(post("/auth/{path}/login",
"cert").as(VaultResponse.class));
StepVerifier.create(login(steps, webClient))
.expectNext(VaultToken.of("my-token")).verifyComplete();
login(steps, webClient).as(StepVerifier::create) //
.expectNext(VaultToken.of("my-token")) //
.verifyComplete();
}
@Test
@@ -101,7 +104,9 @@ class AuthenticationStepsOperatorUnitTests {
AuthenticationSteps steps = AuthenticationSteps.just(post("/auth/{path}/login",
"cert").as(VaultResponse.class));
StepVerifier.create(login(steps, webClient)).expectError().verify();
login(steps, webClient).as(StepVerifier::create) //
.expectError() //
.verify();
}
@Test
@@ -140,8 +145,9 @@ class AuthenticationStepsOperatorUnitTests {
it -> VaultToken.of(it.getLeft().getRequestId() + "-"
+ it.getRight().getRequestId()));
StepVerifier.create(login(steps, webClient))
.expectNext(VaultToken.of("left-right")).verifyComplete();
login(steps, webClient).as(StepVerifier::create) //
.expectNext(VaultToken.of("left-right")) //
.verifyComplete();
}
private Mono<VaultToken> login(AuthenticationSteps steps) {

View File

@@ -42,7 +42,10 @@ class ClientCertificateAuthenticationOperatorIntegrationTests extends
AuthenticationStepsOperator operator = new AuthenticationStepsOperator(
ClientCertificateAuthentication.createAuthenticationSteps(), webClient);
StepVerifier.create(operator.getVaultToken()).expectNextCount(1).verifyComplete();
operator.getVaultToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
}
@Test
@@ -55,7 +58,10 @@ class ClientCertificateAuthenticationOperatorIntegrationTests extends
AuthenticationStepsOperator operator = new AuthenticationStepsOperator(
ClientCertificateAuthentication.createAuthenticationSteps(), webClient);
StepVerifier.create(operator.getVaultToken()).expectNextCount(1).verifyComplete();
operator.getVaultToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
}
@Test
@@ -68,8 +74,9 @@ class ClientCertificateAuthenticationOperatorIntegrationTests extends
AuthenticationStepsOperator operator = new AuthenticationStepsOperator(
ClientCertificateAuthentication.createAuthenticationSteps(), webClient);
StepVerifier.create(operator.getVaultToken()).verifyError(
VaultLoginException.class);
operator.getVaultToken() //
.as(StepVerifier::create) //
.verifyError(VaultLoginException.class);
}
@Test

View File

@@ -28,7 +28,7 @@ import org.springframework.vault.util.TestRestTemplateFactory;
import org.springframework.web.client.RestTemplate;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
/**
* Integration tests for {@link ClientCertificateAuthentication} using
@@ -66,10 +66,8 @@ class ClientCertificateAuthenticationStepsIntegrationTests extends
RestTemplate restTemplate = VaultClients.createRestTemplate(
TestRestTemplateFactory.TEST_VAULT_ENDPOINT, clientHttpRequestFactory);
assertThatThrownBy(
() -> new AuthenticationStepsExecutor(
ClientCertificateAuthentication.createAuthenticationSteps(), restTemplate)
.login())
.isInstanceOf(NestedRuntimeException.class);
assertThatExceptionOfType(NestedRuntimeException.class).isThrownBy(
() -> new AuthenticationStepsExecutor(ClientCertificateAuthentication
.createAuthenticationSteps(), restTemplate).login());
}
}

View File

@@ -52,9 +52,15 @@ class CubbyholeAuthenticationOperatorIntegrationTests extends
AuthenticationStepsOperator operator = new AuthenticationStepsOperator(
CubbyholeAuthentication.createAuthenticationSteps(options), webClient);
StepVerifier.create(operator.getVaultToken()).consumeNextWith(actual -> {
operator.getVaultToken() //
.as(StepVerifier::create)
//
.consumeNextWith(
actual -> {
assertThat(actual).isNotEqualTo(Settings.token().getToken()).isNotNull();
}).verifyComplete();
assertThat(actual).isNotEqualTo(Settings.token().getToken())
.isNotNull();
}) //
.verifyComplete();
}
}

View File

@@ -27,6 +27,7 @@ import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.vault.VaultException;
import org.springframework.vault.client.VaultHttpHeaders;
import org.springframework.vault.client.VaultClients.PrefixAwareUriTemplateHandler;
import org.springframework.vault.support.ObjectMapperSupplier;
import org.springframework.vault.support.VaultToken;
import org.springframework.web.client.RestTemplate;
@@ -44,7 +45,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat
*/
class CubbyholeAuthenticationUnitTests {
static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
ObjectMapper OBJECT_MAPPER = ObjectMapperSupplier.get();
RestTemplate restTemplate;

View File

@@ -55,6 +55,7 @@ import org.springframework.web.client.ResourceAccessException;
import org.springframework.web.client.RestOperations;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
@@ -115,8 +116,8 @@ class LifecycleAwareSessionManagerUnitTests {
when(clientAuthentication.login()).thenThrow(new VaultLoginException("foo"));
assertThatThrownBy(() -> sessionManager.getSessionToken()).isInstanceOf(
VaultLoginException.class);
assertThatExceptionOfType(VaultLoginException.class).isThrownBy(
() -> sessionManager.getSessionToken());
verifyZeroInteractions(listener);
verify(errorListener).onAuthenticationError(any(LoginFailedEvent.class));
}

View File

@@ -32,23 +32,19 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpStatus;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.vault.VaultException;
import org.springframework.vault.core.RestOperationsCallback;
import org.springframework.vault.core.VaultTokenOperations;
import org.springframework.vault.support.SslConfiguration;
import org.springframework.vault.support.VaultToken;
import org.springframework.vault.support.VaultTokenRequest;
import org.springframework.vault.support.SslConfiguration.KeyStoreConfiguration;
import org.springframework.vault.util.IntegrationTestSupport;
import org.springframework.vault.util.RequiresVaultVersion;
import org.springframework.web.client.HttpStatusCodeException;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import static org.springframework.vault.util.Settings.createSslConfiguration;
import static org.springframework.vault.util.Settings.findWorkDir;
/**
@@ -57,8 +53,7 @@ import static org.springframework.vault.util.Settings.findWorkDir;
* @author Mark Paluch
*/
@RequiresVaultVersion("0.6.2")
class ReactiveLifecycleAwareSessionManagerIntegrationTests extends
IntegrationTestSupport {
class ReactiveLifecycleAwareSessionManagerIntegrationTests extends IntegrationTestSupport {
private ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
@@ -101,7 +96,9 @@ class ReactiveLifecycleAwareSessionManagerIntegrationTests extends
ReactiveLifecycleAwareSessionManager sessionManager = new ReactiveLifecycleAwareSessionManager(
() -> Mono.just(loginToken), taskScheduler, prepare().getWebClient());
sessionManager.getVaultToken().as(StepVerifier::create).expectNext(loginToken)
sessionManager.getVaultToken() //
.as(StepVerifier::create) //
.expectNext(loginToken) //
.verifyComplete();
}
@@ -137,9 +134,13 @@ class ReactiveLifecycleAwareSessionManagerIntegrationTests extends
}
};
sessionManager.getSessionToken().as(StepVerifier::create).expectNext(loginToken)
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.expectNext(loginToken) //
.verifyComplete();
sessionManager.renewToken().as(StepVerifier::create).expectNext(loginToken)
sessionManager.renewToken() //
.as(StepVerifier::create) //
.expectNext(loginToken) //
.verifyComplete();
}
@@ -152,7 +153,9 @@ class ReactiveLifecycleAwareSessionManagerIntegrationTests extends
() -> Flux.fromStream(Stream.of((VaultToken) loginToken)).next(),
taskScheduler, prepare().getWebClient());
sessionManager.getSessionToken().as(StepVerifier::create).expectNext(loginToken)
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.expectNext(loginToken) //
.verifyComplete();
sessionManager.destroy();
@@ -182,13 +185,4 @@ class ReactiveLifecycleAwareSessionManagerIntegrationTests extends
return LoginToken.of(token.getToken());
}
static SslConfiguration prepareCertAuthenticationMethod() {
SslConfiguration original = createSslConfiguration();
return new SslConfiguration(KeyStoreConfiguration.of(new FileSystemResource(
new File(findWorkDir(), "client-cert.jks")), "changeit".toCharArray()),
original.getTrustStoreConfiguration());
}
}

View File

@@ -134,8 +134,10 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
mockToken(LoginToken.of("login"));
sessionManager.getSessionToken().as(StepVerifier::create)
.expectNext(LoginToken.of("login")).verifyComplete();
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.expectNext(LoginToken.of("login")) //
.verifyComplete();
verify(listener).onAuthenticationEvent(any(AfterLoginEvent.class));
}
@@ -145,7 +147,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
when(tokenSupplier.getVaultToken()).thenReturn(
Mono.error(new VaultLoginException("foo")));
sessionManager.getSessionToken().as(StepVerifier::create).verifyError();
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.verifyError();
verifyZeroInteractions(listener);
verify(errorListener).onAuthenticationError(any(LoginFailedEvent.class));
}
@@ -191,9 +195,11 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
Mono.error(new WebClientResponseException("forbidden", 403, "Forbidden",
null, null, null)));
sessionManager.getSessionToken().as(StepVerifier::create).assertNext(it -> {
assertThat(it).isExactlyInstanceOf(VaultToken.class);
}).verifyComplete();
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.assertNext(it -> {
assertThat(it).isExactlyInstanceOf(VaultToken.class);
}).verifyComplete();
verify(listener).onAuthenticationEvent(any(AfterLoginEvent.class));
verify(errorListener).onAuthenticationError(any());
}
@@ -231,7 +237,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
mockToken(LoginToken.of("login"));
when(responseSpec.bodyToMono(String.class)).thenReturn(Mono.just("OK"));
sessionManager.getVaultToken().as(StepVerifier::create).expectNextCount(1)
sessionManager.getVaultToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
sessionManager.destroy();
@@ -248,7 +256,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
mockToken(VaultToken.of("login"));
sessionManager.setTokenSelfLookupEnabled(false);
sessionManager.renewToken().as(StepVerifier::create).expectNextCount(1)
sessionManager.renewToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
sessionManager.destroy();
@@ -267,7 +277,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
Mono.error(new WebClientResponseException("forbidden", 403, "Forbidden",
null, null, null)));
sessionManager.renewToken().as(StepVerifier::create).expectNextCount(1)
sessionManager.renewToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
sessionManager.destroy();
@@ -279,7 +291,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
mockToken(LoginToken.renewable("login".toCharArray(), Duration.ofSeconds(5)));
sessionManager.getSessionToken().as(StepVerifier::create).expectNextCount(1)
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
verify(taskScheduler).schedule(any(Runnable.class), any(Trigger.class));
@@ -300,7 +314,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
when(responseSpec.bodyToMono(VaultResponse.class)).thenReturn(
Mono.just(vaultResponse));
sessionManager.getSessionToken().as(StepVerifier::create).expectNextCount(1)
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
verify(taskScheduler).schedule(runnableCaptor.capture(), any(Trigger.class));
@@ -326,7 +342,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class);
sessionManager.getSessionToken().as(StepVerifier::create).expectNextCount(1)
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
verify(taskScheduler).schedule(runnableCaptor.capture(), any(Trigger.class));
@@ -368,7 +386,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
Duration.ofSeconds(2)))));
ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class);
sessionManager.getSessionToken().as(StepVerifier::create).expectNextCount(1)
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
verify(taskScheduler).schedule(runnableCaptor.capture(), any(Trigger.class));
runnableCaptor.getValue().run();
@@ -398,7 +418,9 @@ class ReactiveLifecycleAwareSessionManagerUnitTests {
Mono.error(new RuntimeException("foo")));
ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class);
sessionManager.getSessionToken().as(StepVerifier::create).expectNextCount(1)
sessionManager.getSessionToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
verify(taskScheduler).schedule(runnableCaptor.capture(), any(Trigger.class));
runnableCaptor.getValue().run();

View File

@@ -52,8 +52,8 @@ class TokenAuthenticationOperatorIntegrationTests extends
AuthenticationStepsOperator operator = new AuthenticationStepsOperator(
TokenAuthentication.createAuthenticationSteps(token, true), webClient);
StepVerifier
.create(operator.getVaultToken())
operator.getVaultToken()
.as(StepVerifier::create)
.consumeNextWith(
actual -> {
@@ -81,9 +81,14 @@ class TokenAuthenticationOperatorIntegrationTests extends
TokenAuthentication.createAuthenticationSteps(token, true), webClient);
// first usage
StepVerifier.create(operator.getVaultToken()).expectNextCount(1).verifyComplete();
operator.getVaultToken() //
.as(StepVerifier::create) //
.expectNextCount(1) //
.verifyComplete();
StepVerifier.create(operator.getVaultToken()).expectError(VaultException.class)
operator.getVaultToken() //
.as(StepVerifier::create) //
.expectError(VaultException.class) //
.verify();
}
}

View File

@@ -27,7 +27,7 @@ import org.springframework.vault.util.TestRestTemplateFactory;
import org.springframework.web.client.RestTemplate;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
/**
* Integration tests for {@link TokenAuthentication} using
@@ -76,6 +76,6 @@ class TokenAuthenticationStepsIntegrationTests extends
TokenAuthentication.createAuthenticationSteps(token, true), restTemplate);
operator.login();
assertThatThrownBy(operator::login).isInstanceOf(VaultException.class);
assertThatExceptionOfType(VaultException.class).isThrownBy(operator::login);
}
}

View File

@@ -52,7 +52,8 @@ class ReactiveVaultClientsUnitTests {
.filter(ReactiveVaultClients.namespace("foo/bar")).build();
webClient.get().uri("/auth/foo").retrieve().bodyToMono(String.class)
.as(StepVerifier::create).verifyComplete();
.as(StepVerifier::create) //
.verifyComplete();
assertThat(request.getHeaders()).containsEntry(VaultHttpHeaders.VAULT_NAMESPACE,
Collections.singletonList("foo/bar"));
@@ -72,7 +73,8 @@ class ReactiveVaultClientsUnitTests {
.filter(ReactiveVaultClients.namespace("foo/bar")).build();
webClient.get().uri("/auth/foo").header(VaultHttpHeaders.VAULT_NAMESPACE, "baz")
.retrieve().bodyToMono(String.class).as(StepVerifier::create)
.retrieve().bodyToMono(String.class) //
.as(StepVerifier::create) //
.verifyComplete();
assertThat(request.getHeaders()).containsEntry(VaultHttpHeaders.VAULT_NAMESPACE,

View File

@@ -30,6 +30,7 @@ import reactor.test.StepVerifier;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.vault.support.ObjectMapperSupplier;
import org.springframework.vault.util.IntegrationTestSupport;
import static org.assertj.core.api.Assertions.assertThat;
@@ -43,47 +44,52 @@ import static org.assertj.core.api.Assertions.assertThat;
@ContextConfiguration(classes = VaultIntegrationTestConfiguration.class)
class ReactiveVaultTemplateGenericIntegrationTests extends IntegrationTestSupport {
ObjectMapper OBJECT_MAPPER = ObjectMapperSupplier.get();
@Autowired
ReactiveVaultOperations vaultOperations;
@Test
void readShouldReturnAbsentKey() {
StepVerifier.create(vaultOperations.read("secret/absent")).verifyComplete();
vaultOperations.read("secret/absent").as(StepVerifier::create).verifyComplete();
}
@Test
void readShouldReturnExistingKey() {
StepVerifier.create(
vaultOperations.write("secret/mykey",
Collections.singletonMap("hello", "world"))).verifyComplete();
vaultOperations.write("secret/mykey", Collections.singletonMap("hello", "world"))
.as(StepVerifier::create) //
.verifyComplete();
StepVerifier
.create(vaultOperations.read("secret/mykey"))
vaultOperations
.read("secret/mykey")
.as(StepVerifier::create)
.consumeNextWith(
actual -> assertThat(actual.getData()).containsEntry("hello",
"world")).verifyComplete();
actual -> assertThat(actual.getRequiredData()).containsEntry(
"hello", "world")) //
.verifyComplete();
}
@Test
void readShouldReturnNestedPropertiesKey() throws IOException {
Map map = new ObjectMapper()
Map map = OBJECT_MAPPER
.readValue(
"{ \"hello.array[0]\":\"array-value0\", \"hello.array[1]\":\"array-value1\" }",
Map.class);
StepVerifier.create(vaultOperations.write("secret/mykey", map)).verifyComplete();
vaultOperations.write("secret/mykey", map).as(StepVerifier::create)
.verifyComplete();
StepVerifier
.create(vaultOperations.read("secret/mykey"))
vaultOperations
.read("secret/mykey")
.as(StepVerifier::create)
.consumeNextWith(
actual -> {
assertThat(actual.getData()).containsEntry("hello.array[0]",
"array-value0");
assertThat(actual.getData()).containsEntry("hello.array[1]",
"array-value1");
assertThat(actual.getRequiredData()).containsEntry(
"hello.array[0]", "array-value0");
assertThat(actual.getRequiredData()).containsEntry(
"hello.array[1]", "array-value1");
}).verifyComplete();
}
@@ -91,20 +97,24 @@ class ReactiveVaultTemplateGenericIntegrationTests extends IntegrationTestSuppor
@Test
void readShouldReturnNestedObjects() throws IOException {
Map map = new ObjectMapper().readValue(
Map map = OBJECT_MAPPER.readValue(
"{ \"array\": [ {\"hello\": \"world\"}, {\"hello1\": \"world1\"} ] }",
Map.class);
StepVerifier.create(vaultOperations.write("secret/mykey", map)).verifyComplete();
vaultOperations.write("secret/mykey", map).as(StepVerifier::create)
.verifyComplete();
List<Map<String, String>> expected = Arrays.asList(
Collections.singletonMap("hello", "world"),
Collections.singletonMap("hello1", "world1"));
StepVerifier.create(vaultOperations.read("secret/mykey"))
.consumeNextWith(actual -> {
assertThat(actual.getData()).containsEntry("array", expected);
}).verifyComplete();
vaultOperations
.read("secret/mykey")
.as(StepVerifier::create)
.consumeNextWith(
actual -> {
assertThat(actual.getRequiredData()).containsEntry("array",
expected);
}).verifyComplete();
}
@Test
@@ -114,12 +124,15 @@ class ReactiveVaultTemplateGenericIntegrationTests extends IntegrationTestSuppor
data.put("firstname", "Walter");
data.put("password", "Secret");
StepVerifier.create(vaultOperations.write("secret/mykey", data)).verifyComplete();
vaultOperations.write("secret/mykey", data) //
.as(StepVerifier::create) //
.verifyComplete();
StepVerifier.create(vaultOperations.read("secret/mykey", Person.class))
vaultOperations.read("secret/mykey", Person.class) //
.as(StepVerifier::create) //
.consumeNextWith(actual -> {
Person person = actual.getData();
Person person = actual.getRequiredData();
assertThat(person.getFirstname()).isEqualTo("Walter");
assertThat(person.getPassword()).isEqualTo("Secret");
@@ -129,11 +142,11 @@ class ReactiveVaultTemplateGenericIntegrationTests extends IntegrationTestSuppor
@Test
void listShouldReturnExistingKey() {
StepVerifier.create(
vaultOperations.write("secret/mykey",
Collections.singletonMap("hello", "world"))).verifyComplete();
vaultOperations.write("secret/mykey", Collections.singletonMap("hello", "world"))
.as(StepVerifier::create) //
.verifyComplete();
StepVerifier.create(vaultOperations.list("secret").collectList())
vaultOperations.list("secret").collectList().as(StepVerifier::create)
.consumeNextWith(actual -> assertThat(actual).contains("mykey"))
.verifyComplete();
}
@@ -141,19 +154,23 @@ class ReactiveVaultTemplateGenericIntegrationTests extends IntegrationTestSuppor
@Test
void deleteShouldRemoveKey() {
StepVerifier.create(
vaultOperations.write("secret/mykey",
Collections.singletonMap("hello", "world"))).verifyComplete();
vaultOperations.write("secret/mykey", Collections.singletonMap("hello", "world"))
.as(StepVerifier::create) //
.verifyComplete();
StepVerifier.create(vaultOperations.delete("secret/mykey")).verifyComplete();
vaultOperations.delete("secret/mykey") //
.as(StepVerifier::create) //
.verifyComplete();
StepVerifier.create(vaultOperations.read("secret/mykey")).verifyComplete();
vaultOperations.read("secret/mykey") //
.as(StepVerifier::create) //
.verifyComplete();
}
@Test
void writeShouldReturnResponse() {
StepVerifier.create(vaultOperations.write("auth/token/create"))
vaultOperations.write("auth/token/create").as(StepVerifier::create)
.assertNext(response -> {
assertThat(response.getAuth()).isNotNull();

View File

@@ -49,7 +49,7 @@ import org.springframework.vault.util.IntegrationTestSupport;
import org.springframework.vault.util.RequiresVaultVersion;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.springframework.vault.util.Settings.findWorkDir;
/**
@@ -107,7 +107,7 @@ class VaultPkiTemplateIntegrationTests extends IntegrationTestSupport {
VaultCertificateResponse certificateResponse = pkiOperations.issueCertificate(
"testrole", request);
CertificateBundle data = certificateResponse.getData();
CertificateBundle data = certificateResponse.getRequiredData();
assertThat(data.getPrivateKey()).isNotEmpty();
assertThat(data.getCertificate()).isNotEmpty();
@@ -127,7 +127,8 @@ class VaultPkiTemplateIntegrationTests extends IntegrationTestSupport {
VaultCertificateResponse certificateResponse = pkiOperations.issueCertificate(
"testrole", request);
X509Certificate certificate = certificateResponse.getData().getX509Certificate();
X509Certificate certificate = certificateResponse.getRequiredData()
.getX509Certificate();
Instant now = Instant.now();
assertThat(certificate.getNotAfter()).isAfter(
@@ -162,7 +163,7 @@ class VaultPkiTemplateIntegrationTests extends IntegrationTestSupport {
VaultSignCertificateRequestResponse certificateResponse = pkiOperations
.signCertificateRequest("testrole", csr, request);
Certificate data = certificateResponse.getData();
Certificate data = certificateResponse.getRequiredData();
assertThat(data.getCertificate()).isNotEmpty();
assertThat(data.getIssuingCaCertificate()).isNotEmpty();
@@ -177,8 +178,8 @@ class VaultPkiTemplateIntegrationTests extends IntegrationTestSupport {
VaultCertificateRequest request = VaultCertificateRequest.create("not.supported");
assertThatThrownBy(() -> pkiOperations.issueCertificate("testrole", request))
.isInstanceOf(VaultException.class);
assertThatExceptionOfType(VaultException.class).isThrownBy(
() -> pkiOperations.issueCertificate("testrole", request));
}
@Test
@@ -190,9 +191,9 @@ class VaultPkiTemplateIntegrationTests extends IntegrationTestSupport {
VaultCertificateResponse certificateResponse = pkiOperations.issueCertificate(
"testrole", request);
BigInteger serial = new BigInteger(certificateResponse.getData()
BigInteger serial = new BigInteger(certificateResponse.getRequiredData()
.getSerialNumber().replaceAll("\\:", ""), 16);
pkiOperations.revoke(certificateResponse.getData().getSerialNumber());
pkiOperations.revoke(certificateResponse.getRequiredData().getSerialNumber());
try (InputStream in = pkiOperations.getCrl(Encoding.DER)) {

View File

@@ -123,7 +123,7 @@ class VaultSysTemplateIntegrationTests extends IntegrationTestSupport {
VaultResponse read = vaultOperations.read("secret/mykey");
assertThat(read).isNotNull();
assertThat(read.getData()).containsEntry("hello", "world");
assertThat(read.getRequiredData()).containsEntry("hello", "world");
}
@Test
@@ -155,7 +155,8 @@ class VaultSysTemplateIntegrationTests extends IntegrationTestSupport {
.opsForVersionedKeyValue("kVv2");
versionedOperations.put("secret/mykey", Collections.singletonMap("key", "value"));
assertThat(versionedOperations.get("secret/mykey").getData()).containsEntry(
assertThat(versionedOperations.get("secret/mykey").getRequiredData())
.containsEntry(
"key", "value");
}

View File

@@ -28,6 +28,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.vault.support.ObjectMapperSupplier;
import org.springframework.vault.support.VaultResponse;
import org.springframework.vault.support.VaultResponseSupport;
import org.springframework.vault.util.IntegrationTestSupport;
@@ -43,7 +44,7 @@ import static org.assertj.core.api.Assertions.assertThat;
@ContextConfiguration(classes = VaultIntegrationTestConfiguration.class)
class VaultTemplateGenericIntegrationTests extends IntegrationTestSupport {
static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
ObjectMapper OBJECT_MAPPER = ObjectMapperSupplier.get();
@Autowired
VaultOperations vaultOperations;
@@ -63,7 +64,7 @@ class VaultTemplateGenericIntegrationTests extends IntegrationTestSupport {
VaultResponse read = vaultOperations.read("secret/mykey");
assertThat(read).isNotNull();
assertThat(read.getData()).containsEntry("hello", "world");
assertThat(read.getRequiredData()).containsEntry("hello", "world");
}
@Test
@@ -77,21 +78,23 @@ class VaultTemplateGenericIntegrationTests extends IntegrationTestSupport {
VaultResponse read = vaultOperations.read("secret/mykey");
assertThat(read).isNotNull();
assertThat(read.getData()).containsEntry("hello.array[0]", "array-value0");
assertThat(read.getData()).containsEntry("hello.array[1]", "array-value1");
assertThat(read.getRequiredData())
.containsEntry("hello.array[0]", "array-value0");
assertThat(read.getRequiredData())
.containsEntry("hello.array[1]", "array-value1");
}
@Test
void readShouldReturnNestedObjects() throws Exception {
Map map = new ObjectMapper().readValue(
Map map = OBJECT_MAPPER.readValue(
"{ \"array\": [ {\"hello\": \"world\"}, {\"hello1\": \"world1\"} ] }",
Map.class);
vaultOperations.write("secret/mykey", map);
VaultResponse read = vaultOperations.read("secret/mykey");
assertThat(read).isNotNull();
assertThat(read.getData()).containsEntry(
assertThat(read.getRequiredData()).containsEntry(
"array",
Arrays.asList(Collections.singletonMap("hello", "world"),
Collections.singletonMap("hello1", "world1")));
@@ -110,7 +113,7 @@ class VaultTemplateGenericIntegrationTests extends IntegrationTestSupport {
Person.class);
assertThat(read).isNotNull();
Person person = read.getData();
Person person = read.getRequiredData();
assertThat(person.getFirstname()).isEqualTo("Walter");
assertThat(person.getPassword()).isEqualTo("Secret");
}

View File

@@ -50,7 +50,7 @@ import org.springframework.vault.util.RequiresVaultVersion;
import org.springframework.vault.util.Version;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.assertj.core.api.Assertions.fail;
/**
@@ -620,8 +620,8 @@ class VaultTransitTemplateIntegrationTests extends IntegrationTestSupport {
VaultHmacRequest request = VaultHmacRequest.builder()
.plaintext(Plaintext.of("hello-world")).algorithm("blah-512").build();
assertThatThrownBy(() -> transitOperations.getHmac(keyName, request))
.isInstanceOf(VaultException.class);
assertThatExceptionOfType(VaultException.class).isThrownBy(
() -> transitOperations.getHmac(keyName, request));
}
@Test
@@ -653,9 +653,8 @@ class VaultTransitTemplateIntegrationTests extends IntegrationTestSupport {
transitOperations.createKey("mykey");
assertThatThrownBy(
() -> transitOperations.sign("mykey", Plaintext.of("hello-world")))
.isInstanceOf(VaultException.class);
assertThatExceptionOfType(VaultException.class).isThrownBy(
() -> transitOperations.sign("mykey", Plaintext.of("hello-world")));
}
@Test
@@ -772,9 +771,8 @@ class VaultTransitTemplateIntegrationTests extends IntegrationTestSupport {
vaultOperations.write("transit/keys/export",
Collections.singletonMap("exportable", true));
assertThatThrownBy(
() -> transitOperations.exportKey("export", TransitKeyType.SIGNING_KEY))
.isInstanceOf(VaultException.class);
assertThatExceptionOfType(VaultException.class).isThrownBy(
() -> transitOperations.exportKey("export", TransitKeyType.SIGNING_KEY));
}
@Test

View File

@@ -47,8 +47,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
@ExtendWith(SpringExtension.class)
@RequiresVaultVersion(VaultInitializer.VERSIONING_INTRODUCED_WITH_VALUE)
@ContextConfiguration(classes = VaultIntegrationTestConfiguration.class)
class VaultVersionedKeyValueTemplateIntegrationTests extends
IntegrationTestSupport {
class VaultVersionedKeyValueTemplateIntegrationTests extends IntegrationTestSupport {
@Autowired
VaultOperations vaultOperations;
@@ -87,7 +86,7 @@ class VaultVersionedKeyValueTemplateIntegrationTests extends
Versioned<Person> versioned = versionedOperations.get(key, Person.class);
assertThat(versioned.getData()).isEqualTo(person);
assertThat(versioned.getRequiredData()).isEqualTo(person);
}
@Test
@@ -118,8 +117,8 @@ class VaultVersionedKeyValueTemplateIntegrationTests extends
Versioned<Map<String, Object>> loaded = versionedOperations.get(key);
assertThat(loaded.getData()).isEqualTo(secret);
assertThat(loaded.getMetadata()).isNotNull();
assertThat(loaded.getRequiredData()).isEqualTo(secret);
assertThat(loaded.getRequiredMetadata()).isNotNull();
assertThat(loaded.getVersion()).isEqualTo(Version.from(1));
}
@@ -142,10 +141,10 @@ class VaultVersionedKeyValueTemplateIntegrationTests extends
versionedOperations.put(key, Collections.singletonMap("key", "v1"));
versionedOperations.put(key, Collections.singletonMap("key", "v2"));
assertThat(versionedOperations.get(key, Version.from(1)).getData()).isEqualTo(
Collections.singletonMap("key", "v1"));
assertThat(versionedOperations.get(key, Version.from(2)).getData()).isEqualTo(
Collections.singletonMap("key", "v2"));
assertThat(versionedOperations.get(key, Version.from(1)).getRequiredData())
.isEqualTo(Collections.singletonMap("key", "v1"));
assertThat(versionedOperations.get(key, Version.from(2)).getRequiredData())
.isEqualTo(Collections.singletonMap("key", "v2"));
}
@Test
@@ -162,8 +161,8 @@ class VaultVersionedKeyValueTemplateIntegrationTests extends
assertThat(versioned.getData()).isNull();
assertThat(versioned.getVersion()).isEqualTo(Version.from(2));
assertThat(versioned.getMetadata().isDestroyed()).isFalse();
assertThat(versioned.getMetadata().getDeletedAt()).isBetween(
assertThat(versioned.getRequiredMetadata().isDestroyed()).isFalse();
assertThat(versioned.getRequiredMetadata().getDeletedAt()).isBetween(
Instant.now().minusSeconds(60), Instant.now().plusSeconds(60));
}
@@ -180,10 +179,11 @@ class VaultVersionedKeyValueTemplateIntegrationTests extends
Versioned<Map<String, Object>> versioned = versionedOperations.get(key);
assertThat(versioned.getData()).isEqualTo(Collections.singletonMap("key", "v2"));
assertThat(versioned.getRequiredData()).isEqualTo(
Collections.singletonMap("key", "v2"));
assertThat(versioned.getVersion()).isEqualTo(Version.from(2));
assertThat(versioned.getMetadata().isDestroyed()).isFalse();
assertThat(versioned.getMetadata().getDeletedAt()).isNull();
assertThat(versioned.getRequiredMetadata().isDestroyed()).isFalse();
assertThat(versioned.getRequiredMetadata().getDeletedAt()).isNull();
}
@Test
@@ -201,8 +201,8 @@ class VaultVersionedKeyValueTemplateIntegrationTests extends
assertThat(versioned.getData()).isNull();
assertThat(versioned.getVersion()).isEqualTo(Version.from(1));
assertThat(versioned.getMetadata().isDestroyed()).isFalse();
assertThat(versioned.getMetadata().getDeletedAt()).isBetween(
assertThat(versioned.getRequiredMetadata().isDestroyed()).isFalse();
assertThat(versioned.getRequiredMetadata().getDeletedAt()).isBetween(
Instant.now().minusSeconds(60), Instant.now().plusSeconds(60));
}
@@ -220,8 +220,8 @@ class VaultVersionedKeyValueTemplateIntegrationTests extends
assertThat(versioned.getData()).isNull();
assertThat(versioned.getVersion()).isEqualTo(Version.from(2));
assertThat(versioned.getMetadata().isDestroyed()).isTrue();
assertThat(versioned.getMetadata().getDeletedAt()).isNull();
assertThat(versioned.getRequiredMetadata().isDestroyed()).isTrue();
assertThat(versioned.getRequiredMetadata().getDeletedAt()).isNull();
}
@Data

View File

@@ -101,7 +101,7 @@ class VaultWrappingTemplateIntegrationTests extends IntegrationTestSupport {
WrappedMetadata metadata = wrappingOperations.wrap(map, Duration.ofSeconds(100));
VaultResponse response = wrappingOperations.read(metadata.getToken());
assertThat(response.getData())
assertThat(response.getRequiredData())
.isEqualTo(Collections.singletonMap("key", "value"));
}
@@ -114,7 +114,7 @@ class VaultWrappingTemplateIntegrationTests extends IntegrationTestSupport {
VaultResponseSupport<Secret> response = wrappingOperations.read(
metadata.getToken(), Secret.class);
assertThat(response.getData()).isEqualTo(new Secret("value"));
assertThat(response.getRequiredData()).isEqualTo(new Secret("value"));
}
@Test

View File

@@ -38,7 +38,7 @@ public class VaultApp {
VaultResponseSupport<Secrets> response = vaultTemplate.read("secret/myapp",
Secrets.class);
System.out.println(response.getData().getUsername());
System.out.println(response.getRequiredData().getUsername());
vaultTemplate.delete("secret/myapp");
}

View File

@@ -33,12 +33,14 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
class CertificateBundleUnitTests {
ObjectMapper OBJECT_MAPPER = ObjectMapperSupplier.get();
CertificateBundle certificateBundle;
@SuppressWarnings("unchecked")
@BeforeEach
void before() throws Exception {
Map<String, String> data = new ObjectMapper().readValue(
Map<String, String> data = OBJECT_MAPPER.readValue(
getClass().getResource("/certificate.json"), Map.class);
certificateBundle = CertificateBundle.of(data.get("serial_number"),

View File

@@ -32,12 +32,14 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
class CertificateUnitTests {
ObjectMapper OBJECT_MAPPER = ObjectMapperSupplier.get();
Certificate certificate;
@SuppressWarnings("unchecked")
@BeforeEach
void before() throws Exception {
Map<String, String> data = new ObjectMapper().readValue(
Map<String, String> data = OBJECT_MAPPER.readValue(
getClass().getResource("/certificate.json"), Map.class);
certificate = Certificate.of(data.get("serial_number"), data.get("certificate"),

View File

@@ -31,7 +31,7 @@ import static org.assertj.core.api.Assertions.assertThat;
@SuppressWarnings("unchecked")
class JsonMapFlattenerUnitTests {
private static final ObjectMapper objectMapper = new ObjectMapper();
ObjectMapper OBJECT_MAPPER = ObjectMapperSupplier.get();
@Test
void shouldPreserveFlatMap() {
@@ -44,7 +44,7 @@ class JsonMapFlattenerUnitTests {
@Test
void shouldFlattenNestedObject() throws Exception {
Map<String, Object> map = objectMapper.readValue(
Map<String, Object> map = OBJECT_MAPPER.readValue(
"{\"key\": { \"nested\":true} }", Map.class);
Map<String, Object> result = JsonMapFlattener.flatten(map);
@@ -54,7 +54,7 @@ class JsonMapFlattenerUnitTests {
@Test
void shouldFlattenDeeplyNestedObject() throws Exception {
Map<String, Object> map = objectMapper.readValue(
Map<String, Object> map = OBJECT_MAPPER.readValue(
"{\"key\": { \"nested\": {\"anotherLevel\": \"value\"} } }", Map.class);
Map<String, Object> result = JsonMapFlattener.flatten(map);
@@ -64,7 +64,7 @@ class JsonMapFlattenerUnitTests {
@Test
void shouldFlattenNestedListOfSimpleObjects() throws Exception {
Map<String, Object> map = objectMapper.readValue(
Map<String, Object> map = OBJECT_MAPPER.readValue(
"{\"key\": [\"one\", \"two\"], \"dotted.key\": [\"one\", \"two\"] }",
Map.class);
Map<String, Object> result = JsonMapFlattener.flatten(map);
@@ -77,7 +77,7 @@ class JsonMapFlattenerUnitTests {
@Test
void shouldFlattenNestedListOfComplexObject() throws Exception {
Map<String, Object> map = objectMapper.readValue(
Map<String, Object> map = OBJECT_MAPPER.readValue(
"{\"key\": [{ \"nested\":\"value\"}, { \"nested\":\"other-value\"}] }",
Map.class);
Map<String, Object> result = JsonMapFlattener.flatten(map);
@@ -89,7 +89,7 @@ class JsonMapFlattenerUnitTests {
@Test
void shouldFlattenDeeplyNestedListOfComplexObject() throws Exception {
Map<String, Object> map = objectMapper
Map<String, Object> map = OBJECT_MAPPER
.readValue(
"{\"key\": { \"level1\": [{ \"nested\":\"value\"}, { \"nested\":\"other-value\"}]} }",
Map.class);

View File

@@ -0,0 +1,34 @@
/*
* Copyright 2019 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
*
* https://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.
*/
package org.springframework.vault.support;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* {@link ObjectMapper} supplier for testing holding a singleton {@link ObjectMapper}
* instance.
* @author Mark Paluch
*/
public class ObjectMapperSupplier {
private final static ObjectMapperSupplier instance = new ObjectMapperSupplier();
private final ObjectMapper objectMapper = new ObjectMapper();
public static ObjectMapper get() {
return instance.objectMapper;
}
}

View File

@@ -29,7 +29,7 @@ import org.springframework.util.StreamUtils;
import org.springframework.vault.support.Policy.Rule;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
/**
* Unit tests for {@link Policy} JSON serialization/deserialization.
@@ -38,7 +38,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
*/
class PolicySerializationUnitTests {
ObjectMapper objectMapper = new ObjectMapper();
ObjectMapper OBJECT_MAPPER = ObjectMapperSupplier.get();
@Test
void shouldSerialize() throws Exception {
@@ -58,7 +58,7 @@ class PolicySerializationUnitTests {
try (InputStream is = new ClassPathResource("policy.json").getInputStream()) {
String expected = StreamUtils.copyToString(is, StandardCharsets.UTF_8);
JSONAssert.assertEquals(expected, objectMapper.writeValueAsString(policy),
JSONAssert.assertEquals(expected, OBJECT_MAPPER.writeValueAsString(policy),
JSONCompareMode.STRICT);
}
}
@@ -80,7 +80,7 @@ class PolicySerializationUnitTests {
try (InputStream is = new ClassPathResource("policy.json").getInputStream()) {
Policy actual = objectMapper.readValue(is, Policy.class);
Policy actual = OBJECT_MAPPER.readValue(is, Policy.class);
assertThat(actual.getRules()).hasSameClassAs(expected.getRules());
@@ -111,24 +111,24 @@ class PolicySerializationUnitTests {
@Test
void shouldDeserializeEmptyPolicy() throws Exception {
assertThat(objectMapper.readValue("{}", Policy.class)).isEqualTo(Policy.empty());
assertThat(OBJECT_MAPPER.readValue("{}", Policy.class)).isEqualTo(Policy.empty());
}
@Test
void shouldRejectUnknownFieldNames() throws Exception {
assertThatThrownBy(
() -> objectMapper.readValue("{\"foo\":1, \"path\": {} }", Policy.class))
.isInstanceOf(IllegalArgumentException.class);
assertThatThrownBy(
() -> objectMapper.readValue("{\"foo\":\"bar\"}", Policy.class))
.isInstanceOf(IllegalArgumentException.class);
assertThatIllegalArgumentException()
.isThrownBy(
() -> OBJECT_MAPPER.readValue("{\"foo\":1, \"path\": {} }",
Policy.class));
assertThatIllegalArgumentException().isThrownBy(
() -> OBJECT_MAPPER.readValue("{\"foo\":\"bar\"}", Policy.class));
}
@Test
void shouldDeserializePolicyWithEmptyRules() throws Exception {
Policy actual = objectMapper.readValue("{ \"path\": {} }", Policy.class);
Policy actual = OBJECT_MAPPER.readValue("{ \"path\": {} }", Policy.class);
assertThat(actual).isEqualTo(Policy.empty());
}
@@ -136,7 +136,7 @@ class PolicySerializationUnitTests {
@Test
void shouldDeserializeRuleWithHour() throws Exception {
Policy actual = objectMapper.readValue(
Policy actual = OBJECT_MAPPER.readValue(
"{ \"path\": { \"secret\" : {\"min_wrapping_ttl\":\"1h\"} } }",
Policy.class);