32 lines
2.0 KiB
Java
32 lines
2.0 KiB
Java
package com.baiyue.common.web;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import org.junit.jupiter.api.Test;
|
|
import static org.assertj.core.api.Assertions.*;
|
|
|
|
class EventDeliveryObservationTest {
|
|
@Test void malformedSuccessResponseIsNotReportedAsAnHttpSuccess() {
|
|
var request = feign.Request.create(feign.Request.HttpMethod.POST, "http://consumer.invalid/events",
|
|
java.util.Map.of(), new byte[0], java.nio.charset.StandardCharsets.UTF_8, new feign.RequestTemplate());
|
|
var failure = new feign.codec.DecodeException(200, "secret remote payload", request);
|
|
assertThat(EventDeliveryObservation.errorCode(failure, false, true)).isEqualTo("INVALID_RESPONSE");
|
|
assertThat(EventDeliveryFailure.diagnostic(failure, "token"))
|
|
.contains("Invalid consumer response contract").doesNotContain("secret", "HTTP 200");
|
|
assertThat(EventDeliveryFailure.isPermanent(failure)).isFalse();
|
|
}
|
|
@Test void auditIdentitySupportsTheFormalUuidAndUlidContractWithoutSavingMalformedPayload() {
|
|
var mapper = new ObjectMapper();
|
|
for (String id : new String[]{"00000000-0000-4000-8000-000000000019", "01ARZ3NDEKTSV4RRFFQ69G5FAV"}) {
|
|
assertThat(EventDeliveryObservation.eventId(mapper, "{\"eventId\":\"" + id + "\",\"payload\":\"secret\"}")).isEqualTo(id);
|
|
}
|
|
assertThat(EventDeliveryObservation.eventId(mapper, "bad secret JSON")).isNull();
|
|
assertThat(EventDeliveryObservation.eventId(mapper, "{\"eventId\":\"Bearer secret\"}")).isNull();
|
|
}
|
|
@Test void arbitraryExceptionsAndRemoteMessagesCannotLeakIntoAttemptAudit() {
|
|
var failure = new IllegalStateException("payload={secret} Authorization=secret");
|
|
assertThat(EventDeliveryObservation.errorCode(failure, false, true)).isEqualTo("DELIVERY_FAILURE");
|
|
assertThat(EventDeliveryObservation.errorCode(failure, true, true)).isEqualTo("PERMANENT_FAILURE");
|
|
assertThat(EventDeliveryObservation.errorCode(failure, true, false)).isEqualTo("INVALID_EVENT");
|
|
}
|
|
}
|