use of com.azure.android.core.http.HttpPipelineBuilder in project azure-sdk-for-android by Azure.
the class AddHeadersPolicyTest method clientProvidedMultipleHeader.
@Test
public void clientProvidedMultipleHeader() throws Exception {
String customRequestId = "request-id-value";
final HttpHeaders headers = new HttpHeaders();
headers.put("x-ms-client-request-id", customRequestId);
headers.put("my-header1", "my-header1-value");
headers.put("my-header2", "my-header2-value");
final HttpPipeline pipeline = new HttpPipelineBuilder().httpClient(new NoOpHttpClient() {
@Override
public void send(HttpRequest httpRequest, CancellationToken cancellationToken, HttpCallback httpCallback) {
Assertions.assertEquals(httpRequest.getHeaders().getValue("x-ms-client-request-id"), customRequestId);
Assertions.assertEquals(httpRequest.getHeaders().getValue("my-header1"), "my-header1-value");
Assertions.assertEquals(httpRequest.getHeaders().getValue("my-header2"), "my-header2-value");
httpCallback.onSuccess(mockResponse);
}
}).policies(new AddHeadersPolicy(headers)).policies(new RequestIdPolicy()).build();
CountDownLatch latch = new CountDownLatch(1);
pipeline.send(new HttpRequest(HttpMethod.GET, "http://localhost/"), RequestContext.NONE, CancellationToken.NONE, new HttpCallback() {
@Override
public void onSuccess(HttpResponse response) {
latch.countDown();
}
@Override
public void onError(Throwable error) {
try {
throw new RuntimeException(error);
} finally {
latch.countDown();
}
}
});
awaitOnLatch(latch, "clientProvidedMultipleHeader");
}
use of com.azure.android.core.http.HttpPipelineBuilder in project azure-sdk-for-android by Azure.
the class HttpLoggingPolicyTests method validateLoggingDoesNotChangeResponse.
/**
* Tests that logging the response body doesn't consume the stream before it is returned from the service call.
*/
@ParameterizedTest(name = "[{index}] {displayName}")
@MethodSource("validateLoggingDoesNotConsumeSupplier")
@ResourceLock("SYSTEM_OUT")
public void validateLoggingDoesNotChangeResponse(byte[] content, byte[] data, int contentLength) {
HttpRequest request = new HttpRequest(HttpMethod.GET, "https://test.com");
HttpHeaders responseHeaders = new HttpHeaders().put("Content-Type", "application/json").put("Content-Length", Integer.toString(contentLength));
HttpPipeline pipeline = new HttpPipelineBuilder().policies(new HttpLoggingPolicy(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY))).httpClient(new HttpClient() {
@Override
public HttpCallDispatcher getHttpCallDispatcher() {
return new HttpCallDispatcher();
}
@Override
public void send(HttpRequest httpRequest, CancellationToken cancellationToken, HttpCallback httpCallback) {
httpCallback.onSuccess(new MockHttpResponse(httpRequest, 200, responseHeaders, content));
}
}).build();
CountDownLatch latch = new CountDownLatch(1);
// pipeline.send(request, CONTEXT)
pipeline.send(request, RequestContext.NONE, CancellationToken.NONE, new HttpCallback() {
@Override
public void onSuccess(HttpResponse response) {
try {
assertArrayEquals(data, response.getBodyAsByteArray());
} finally {
latch.countDown();
}
}
@Override
public void onError(Throwable error) {
try {
assertTrue(false, "unexpected call to pipeline::send onError" + error.getMessage());
} finally {
latch.countDown();
}
}
});
awaitOnLatch(latch, "validateLoggingDoesNotChangeResponse");
String logString = convertOutputStreamToString(logCaptureStream);
assertTrue(logString.contains(new String(data, StandardCharsets.UTF_8)));
}
use of com.azure.android.core.http.HttpPipelineBuilder in project azure-sdk-for-android by Azure.
the class HttpLoggingPolicyTests method validateLoggingDoesNotChangeRequest.
/**
* Tests that logging the request body doesn't consume the stream before it is sent over the network.
*/
@ParameterizedTest(name = "[{index}] {displayName}")
@MethodSource("validateLoggingDoesNotConsumeSupplier")
@ResourceLock("SYSTEM_OUT")
public void validateLoggingDoesNotChangeRequest(byte[] content, byte[] data, int contentLength) {
final String requestUrl = "https://test.com";
HttpHeaders requestHeaders = new HttpHeaders().put("Content-Type", "application/json").put("Content-Length", Integer.toString(contentLength));
HttpPipeline pipeline = new HttpPipelineBuilder().policies(new HttpLoggingPolicy(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY))).httpClient(new HttpClient() {
@Override
public HttpCallDispatcher getHttpCallDispatcher() {
return new HttpCallDispatcher();
}
@Override
public void send(HttpRequest httpRequest, CancellationToken cancellationToken, HttpCallback httpCallback) {
assertArrayEquals(data, httpRequest.getBody());
httpCallback.onSuccess(new MockHttpResponse(httpRequest, 200));
}
}).build();
CountDownLatch latch = new CountDownLatch(1);
// pipeline.send(new HttpRequest(HttpMethod.POST, requestUrl, requestHeaders, content), CONTEXT)
pipeline.send(new HttpRequest(HttpMethod.POST, requestUrl, requestHeaders, content), RequestContext.NONE, CancellationToken.NONE, new HttpCallback() {
@Override
public void onSuccess(HttpResponse response) {
latch.countDown();
}
@Override
public void onError(Throwable error) {
try {
assertTrue(false, "unexpected call to pipeline::send onError" + error.getMessage());
} finally {
latch.countDown();
}
}
});
awaitOnLatch(latch, "validateLoggingDoesNotChangeRequest");
String logString = convertOutputStreamToString(logCaptureStream);
assertTrue(logString.contains(new String(data, StandardCharsets.UTF_8)));
}
use of com.azure.android.core.http.HttpPipelineBuilder in project azure-sdk-for-android by Azure.
the class RequestIdPolicyTests method sameRequestIdForRetry.
@Test
public void sameRequestIdForRetry() {
final HttpPipeline pipeline = new HttpPipelineBuilder().httpClient(new NoOpHttpClient() {
String firstRequestId = null;
@Override
public void send(HttpRequest request, CancellationToken cancellationToken, HttpCallback httpCallback) {
if (firstRequestId != null) {
String newRequestId = request.getHeaders().getValue(REQUEST_ID_HEADER);
Assertions.assertNotNull(newRequestId, "newRequestId should not be null");
Assertions.assertEquals(newRequestId, firstRequestId);
}
firstRequestId = request.getHeaders().getValue(REQUEST_ID_HEADER);
if (firstRequestId == null) {
Assertions.fail("The firstRequestId should not be null.");
}
httpCallback.onSuccess(mockResponse);
// TODO: anuchan add a test with misbehaving httpclient that signal twice and assert we throw meaningful error
// TODO: anuchan add a test that watch running calls when we schedule (i.e. ensure not holding the thread)
//
// if (firstRequestId != null) {
// String newRequestId = request.getHeaders().getValue(REQUEST_ID_HEADER);
// Assertions.assertNotNull(newRequestId);
// Assertions.assertEquals(newRequestId, firstRequestId);
// }
// firstRequestId = request.getHeaders().getValue(REQUEST_ID_HEADER);
// if (firstRequestId == null) {
// Assertions.fail();
// }
// httpCallback.onSuccess(mockResponse);
}
}).policies(new RequestIdPolicy(), new RetryPolicy(new FixedDelay(1, Duration.of(5, ChronoUnit.SECONDS)))).build();
CountDownLatch latch = new CountDownLatch(1);
pipeline.send(new HttpRequest(HttpMethod.GET, "http://localhost/"), RequestContext.NONE, CancellationToken.NONE, new HttpCallback() {
@Override
public void onSuccess(HttpResponse response) {
latch.countDown();
}
@Override
public void onError(Throwable error) {
try {
throw new RuntimeException(error);
} finally {
latch.countDown();
}
}
});
awaitOnLatch(latch, "sameRequestIdForRetry");
}
use of com.azure.android.core.http.HttpPipelineBuilder in project azure-sdk-for-android by Azure.
the class RetryPolicyTests method fixedDelayRetry.
@Test
public void fixedDelayRetry() {
final int maxRetries = 5;
final long delayMillis = 500;
final HttpPipeline pipeline = new HttpPipelineBuilder().httpClient(new NoOpHttpClient() {
int count = -1;
long previousAttemptMadeAt = -1;
@Override
public void send(HttpRequest httpRequest, CancellationToken cancellationToken, HttpCallback httpCallback) {
if (count > 0) {
Assertions.assertTrue(System.currentTimeMillis() >= previousAttemptMadeAt + delayMillis);
}
Assertions.assertTrue(count++ < maxRetries);
previousAttemptMadeAt = System.currentTimeMillis();
httpCallback.onSuccess(new MockHttpResponse(httpRequest, 500));
}
}).policies(new RetryPolicy(new FixedDelay(maxRetries, Duration.ofMillis(delayMillis)))).build();
CountDownLatch latch = new CountDownLatch(1);
pipeline.send(new HttpRequest(HttpMethod.GET, "http://localhost/"), RequestContext.NONE, CancellationToken.NONE, new HttpCallback() {
@Override
public void onSuccess(HttpResponse response) {
latch.countDown();
}
@Override
public void onError(Throwable error) {
latch.countDown();
}
});
awaitOnLatch(latch, "fixedDelayRetry");
}
Aggregations