final Request fancyRequest = new Request.Builder() .url(scheme + "://" + authority + "/") .headers(request.getHeaders()) .build(); final Response fancyResponse = new Response.Builder()
@Test public void propagatesSpan() throws Exception { server.enqueue(new MockResponse()); get(client, "/foo"); RecordedRequest request = server.takeRequest(); assertThat(request.getHeaders().toMultimap()) .containsKeys("x-b3-traceId", "x-b3-spanId") .containsEntry("x-b3-sampled", asList("1")); takeSpan(); }
private MockResponse postRequest(RecordedRequest request, String expectedRequestContent, String location, String contentType, byte[] responseBody) { assertEquals(1, request.getHeaders().values("Content-Length").size()); assertTrue("Invalid request content-length", Integer.parseInt(request.getHeader("Content-Length")) > 0); String requestContentType = request.getHeader("Content-Type"); assertNotNull("No content-type", requestContentType); Charset charset = StandardCharsets.ISO_8859_1; if (requestContentType.contains("charset=")) { String charsetName = requestContentType.split("charset=")[1]; charset = Charset.forName(charsetName); } assertEquals("Invalid request body", expectedRequestContent, request.getBody().readString(charset)); Buffer buf = new Buffer(); buf.write(responseBody); return new MockResponse() .setHeader("Location", baseUrl + location) .setHeader("Content-Type", contentType) .setHeader("Content-Length", responseBody.length) .setBody(buf) .setResponseCode(201); }
@Test public void customSampler() throws Exception { close(); httpTracing = httpTracing.toBuilder().clientSampler(HttpRuleSampler.newBuilder() .addRule(null, "/foo", 0.0f) .build()).build(); client = newClient(server.getPort()); server.enqueue(new MockResponse()); get(client, "/foo"); RecordedRequest request = server.takeRequest(); assertThat(request.getHeaders().toMultimap()) .containsEntry("x-b3-sampled", asList("0")); }
Matchers.containsString("localhost:" + port)); MockResponse response = new MockResponse() .setHeaders(request.getHeaders()) .setHeader("Content-Length", request.getBody().size()) .setResponseCode(200)
/** Unlike Brave 3, Brave 4 propagates trace ids even when unsampled */ @Test public void propagates_sampledFalse() throws Exception { close(); httpTracing = HttpTracing.create(tracingBuilder(Sampler.NEVER_SAMPLE).build()); client = newClient(server.getPort()); server.enqueue(new MockResponse()); get(client, "/foo"); RecordedRequest request = server.takeRequest(); assertThat(request.getHeaders().toMultimap()) .containsKeys("x-b3-traceId", "x-b3-spanId") .doesNotContainKey("x-b3-parentSpanId") .containsEntry("x-b3-sampled", asList("0")); }
@SuppressWarnings("unchecked") @Test public void testGetIncludesDefaultUserAgent() throws Exception { // Set up a mock request ApiResponse<Object> fakeResponse = mock(ApiResponse.class); String path = "/"; Map<String, List<String>> params = new HashMap<>(); params.put("key", Collections.singletonList("value")); // Set up the fake web server server.enqueue(new MockResponse()); server.start(); setMockBaseUrl(); // Build & execute the request using our context builder.build().get(new ApiConfig(path), fakeResponse.getClass(), params).awaitIgnoreError(); // Read the headers server.shutdown(); RecordedRequest request = server.takeRequest(); Headers headers = request.getHeaders(); boolean headerFound = false; for (String headerName : headers.names()) { if (headerName.equals("User-Agent")) { headerFound = true; String headerValue = headers.get(headerName); assertTrue( "User agent not in correct format", headerValue.matches("GoogleGeoApiClientJava/[^\\s]+")); } } assertTrue("User agent header not present", headerFound); }
Headers recordedHeaders = recordedRequest.getHeaders();
Headers recordedApacheHeaders = recordedApacheRequest.getHeaders(); Set<String> recordedApacheHeadersNames = recordedApacheHeaders.names(); for (String name : parseRequest.getAllHeaders().keySet()) {
private static ClientHttpRequest toRequest(RecordedRequest request) throws IOException { MockClientHttpRequest clientRequest = new MockClientHttpRequest(); clientRequest.setMethod(HttpMethod.valueOf(request.getMethod())); clientRequest.setURI(URI.create(request.getPath())); request.getHeaders().toMultimap().forEach((name, values) -> values.forEach(value -> clientRequest.getHeaders().add(name, value))); IOUtils.copy(request.getBody().inputStream(), clientRequest.getBody()); return clientRequest; }
@Test public void propagatesSpan() throws Exception { server.enqueue(new MockResponse()); get(client, "/foo"); RecordedRequest request = server.takeRequest(); assertThat(request.getHeaders().toMultimap()) .containsKeys("x-b3-traceId", "x-b3-spanId") .containsEntry("x-b3-sampled", asList("1")); }
@Test public void propagatesSpan() throws Exception { server.enqueue(new MockResponse()); get(client, "/foo"); RecordedRequest request = server.takeRequest(); assertThat(request.getHeaders().toMultimap()) .containsKeys("x-b3-traceId", "x-b3-spanId") .containsEntry("x-b3-sampled", asList("1")); takeSpan(); }
@Test(timeout = ASYNC_TEST_TIMEOUT) public void forChannelTokenSupplier() throws Exception { // Do when(channelTokenSupplier.get()).thenReturn("1st"); lineMessagingClient.getMessageContent("TEST"); // Verify final RecordedRequest request1st = mockWebServer.takeRequest(); assertThat(request1st.getHeaders().toMultimap()) .containsEntry("Authorization", singletonList("Bearer 1st")); // Do again with another channel token. when(channelTokenSupplier.get()).thenReturn("2nd"); lineMessagingClient.getMessageContent("TEST"); // Verify final RecordedRequest request2nd = mockWebServer.takeRequest(); assertThat(request2nd.getHeaders().toMultimap()) .containsEntry("Authorization", singletonList("Bearer 2nd")); }
@Test public void propagates_sampledFalse() throws Exception { brave = braveBuilder(Sampler.NEVER_SAMPLE).build(); close(); client = newClient(server.getPort()); server.enqueue(new MockResponse()); get(client, "/foo"); RecordedRequest request = server.takeRequest(); assertThat(request.getHeaders().toMultimap()) .doesNotContainKeys("x-b3-traceId", "x-b3-parentSpanId", "x-b3-spanId") .containsEntry("x-b3-sampled", asList("0")); }
/** Unlike Brave 3, Brave 4 propagates trace ids even when unsampled */ @Test public void propagates_sampledFalse() throws Exception { close(); httpTracing = HttpTracing.create(tracingBuilder(Sampler.NEVER_SAMPLE).build()); client = newClient(server.getPort()); server.enqueue(new MockResponse()); get(client, "/foo"); RecordedRequest request = server.takeRequest(); assertThat(request.getHeaders().toMultimap()) .containsKeys("x-b3-traceId", "x-b3-spanId") .doesNotContainKey("x-b3-parentSpanId") .containsEntry("x-b3-sampled", asList("0")); }
@Test public void customSampler() throws Exception { close(); httpTracing = httpTracing.toBuilder().clientSampler(HttpRuleSampler.newBuilder() .addRule(null, "/foo", 0.0f) .build()).build(); client = newClient(server.getPort()); server.enqueue(new MockResponse()); get(client, "/foo"); RecordedRequest request = server.takeRequest(); assertThat(request.getHeaders().toMultimap()) .containsEntry("x-b3-sampled", asList("0")); }
final Request fancyRequest = new Request.Builder() .url(scheme + "://" + authority + "/") .headers(request.getHeaders()) .build(); final Response fancyResponse = new Response.Builder()
private void verifyRequest(String pathPrefix, Map<String, String> params) throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); verifyAuthorizationHeader(recordedRequest.getHeaders().get("Authorization")); Assert.assertEquals("GET", recordedRequest.getMethod()); String path = recordedRequest.getPath(); Assert.assertTrue(path.startsWith(pathPrefix)); if (params != null) { for (Map.Entry<String, String> param : params.entrySet()) { Assert.assertTrue(path.contains(param.getKey() + "=" + param.getValue())); } } Assert.assertEquals(0, recordedRequest.getBodySize()); }