io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of opentelemetry-testing-common Show documentation
Show all versions of opentelemetry-testing-common Show documentation
OpenTelemetry Javaagent testing commons
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.testing.junit.http;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.function.Supplier;
/**
* Helper class for capturing result of asynchronous request and running a callback when result is
* received.
*/
public final class HttpClientResult {
private static final long timeout = 10_000;
private final CountDownLatch valueReady = new CountDownLatch(1);
private final Runnable callback;
private int status;
private Throwable throwable;
public HttpClientResult(Runnable callback) {
this.callback = callback;
}
public void complete(int status) {
complete(() -> status, null);
}
public void complete(Throwable throwable) {
complete(null, throwable);
}
public void complete(Supplier status, Throwable throwable) {
if (throwable != null) {
this.throwable = throwable;
} else {
this.status = status.get();
}
callback.run();
valueReady.countDown();
}
public int get() throws Throwable {
if (!valueReady.await(timeout, TimeUnit.MILLISECONDS)) {
throw new TimeoutException("Timed out waiting for response in " + timeout + "ms");
}
if (throwable != null) {
throw throwable;
}
return status;
}
}