|
15 | 15 | */ |
16 | 16 | package io.fabric8.kubernetes.client.http; |
17 | 17 |
|
| 18 | +import io.fabric8.mockwebserver.Context; |
18 | 19 | import io.fabric8.mockwebserver.DefaultMockServer; |
| 20 | +import io.fabric8.mockwebserver.ServerRequest; |
| 21 | +import io.fabric8.mockwebserver.ServerResponse; |
| 22 | +import io.fabric8.mockwebserver.internal.SimpleRequest; |
19 | 23 | import io.fabric8.mockwebserver.utils.ResponseProviders; |
| 24 | +import okhttp3.mockwebserver.MockResponse; |
| 25 | +import okhttp3.mockwebserver.MockWebServer; |
| 26 | +import okhttp3.mockwebserver.RecordedRequest; |
| 27 | +import okio.Buffer; |
20 | 28 | import org.junit.jupiter.api.AfterAll; |
21 | 29 | import org.junit.jupiter.api.BeforeAll; |
22 | 30 | import org.junit.jupiter.api.BeforeEach; |
|
27 | 35 | import org.slf4j.Logger; |
28 | 36 |
|
29 | 37 | import java.net.URI; |
| 38 | +import java.util.ArrayDeque; |
30 | 39 | import java.util.Collections; |
| 40 | +import java.util.HashMap; |
| 41 | +import java.util.Map; |
| 42 | +import java.util.Queue; |
31 | 43 | import java.util.concurrent.TimeUnit; |
32 | 44 |
|
33 | 45 | import static org.mockito.ArgumentMatchers.anyInt; |
|
36 | 48 | import static org.mockito.ArgumentMatchers.eq; |
37 | 49 | import static org.mockito.Mockito.mock; |
38 | 50 | import static org.mockito.Mockito.timeout; |
| 51 | +import static org.mockito.Mockito.times; |
39 | 52 | import static org.mockito.Mockito.when; |
40 | 53 |
|
41 | 54 | public abstract class AbstractHttpLoggingInterceptorTest { |
42 | 55 |
|
43 | 56 | private static DefaultMockServer server; |
| 57 | + private static Map<ServerRequest, Queue<ServerResponse>> responses; |
44 | 58 | private Logger logger; |
45 | 59 | private InOrder inOrder; |
46 | 60 | private HttpClient httpClient; |
47 | 61 |
|
48 | 62 | @BeforeAll |
49 | 63 | static void beforeAll() { |
50 | | - server = new DefaultMockServer(false); |
| 64 | + responses = new HashMap<>(); |
| 65 | + server = new DefaultMockServer(new Context(), new MockWebServer(), responses, false); |
51 | 66 | server.start(); |
52 | 67 | } |
53 | 68 |
|
@@ -157,6 +172,33 @@ public void httpResponseBodyLogged() throws Exception { |
157 | 172 | inOrder.verify(logger).trace("-HTTP END-"); |
158 | 173 | } |
159 | 174 |
|
| 175 | + @Test |
| 176 | + @DisplayName("HTTP binary response body is skipped") |
| 177 | + public void httpResponseBodySkipped() throws Exception { |
| 178 | + final MockResponse binaryResponse = new MockResponse() |
| 179 | + .setResponseCode(200) |
| 180 | + .setBody(new Buffer().write(new byte[] { (byte) 0xFF, (byte) 0xD8, (byte) 0x00, (byte) 0x12, (byte) 0x34 })); |
| 181 | + responses.computeIfAbsent(new SimpleRequest("/binary-response-body"), k -> new ArrayDeque<>()).add( |
| 182 | + new ServerResponse() { |
| 183 | + @Override |
| 184 | + public boolean isRepeatable() { |
| 185 | + return true; |
| 186 | + } |
| 187 | + |
| 188 | + @Override |
| 189 | + public MockResponse toMockResponse(RecordedRequest recordedRequest) { |
| 190 | + return binaryResponse; |
| 191 | + } |
| 192 | + }); |
| 193 | + httpClient.sendAsync(httpClient.newHttpRequestBuilder() |
| 194 | + .uri(server.url("/binary-response-body")) |
| 195 | + .build(), String.class).get(10, TimeUnit.SECONDS); |
| 196 | + inOrder.verify(logger, timeout(1000L)).trace("-HTTP START-"); |
| 197 | + inOrder.verify(logger).trace(eq("< {} {}"), anyInt(), anyString()); |
| 198 | + inOrder.verify(logger, times(1)).trace(anyString()); // only -HTTP END- was logged |
| 199 | + inOrder.verifyNoMoreInteractions(); |
| 200 | + } |
| 201 | + |
160 | 202 | @Test |
161 | 203 | @DisplayName("WS request URI is logged") |
162 | 204 | public void wsRequestUriLogged() throws Exception { |
|
0 commit comments