Fix flaky okhttp read timeout tests (#4499)

This commit is contained in:
Lauri Tulmin 2021-10-25 23:45:21 +03:00 committed by GitHub
parent e19d086d58
commit 44cec73cec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 9 deletions

View File

@ -22,10 +22,13 @@ import java.util.concurrent.TimeUnit
class OkHttp2Test extends HttpClientTest<Request> implements AgentTestTrait { class OkHttp2Test extends HttpClientTest<Request> implements AgentTestTrait {
@Shared @Shared
def client = new OkHttpClient() def client = new OkHttpClient()
@Shared
def clientWithReadTimeout = new OkHttpClient()
def setupSpec() { def setupSpec() {
client.setConnectTimeout(CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS) client.setConnectTimeout(CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS)
client.setReadTimeout(READ_TIMEOUT_MS, TimeUnit.MILLISECONDS) clientWithReadTimeout.setConnectTimeout(CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS)
clientWithReadTimeout.setReadTimeout(READ_TIMEOUT_MS, TimeUnit.MILLISECONDS)
} }
@Override @Override
@ -40,12 +43,12 @@ class OkHttp2Test extends HttpClientTest<Request> implements AgentTestTrait {
@Override @Override
int sendRequest(Request request, String method, URI uri, Map<String, String> headers) { int sendRequest(Request request, String method, URI uri, Map<String, String> headers) {
return client.newCall(request).execute().code() return getClient(uri).newCall(request).execute().code()
} }
@Override @Override
void sendRequestWithCallback(Request request, String method, URI uri, Map<String, String> headers, AbstractHttpClientTest.RequestResult requestResult) { void sendRequestWithCallback(Request request, String method, URI uri, Map<String, String> headers, AbstractHttpClientTest.RequestResult requestResult) {
client.newCall(request).enqueue(new Callback() { getClient(uri).newCall(request).enqueue(new Callback() {
@Override @Override
void onFailure(Request req, IOException e) { void onFailure(Request req, IOException e) {
requestResult.complete(e) requestResult.complete(e)
@ -58,6 +61,13 @@ class OkHttp2Test extends HttpClientTest<Request> implements AgentTestTrait {
}) })
} }
OkHttpClient getClient(URI uri) {
if (uri.toString().contains("/read-timeout")) {
return clientWithReadTimeout
}
return client
}
@Override @Override
Set<AttributeKey<?>> httpAttributes(URI uri) { Set<AttributeKey<?>> httpAttributes(URI uri) {
Set<AttributeKey<?>> extra = [ Set<AttributeKey<?>> extra = [

View File

@ -28,12 +28,20 @@ abstract class AbstractOkHttp3Test extends HttpClientTest<Request> {
abstract Call.Factory createCallFactory(OkHttpClient.Builder clientBuilder) abstract Call.Factory createCallFactory(OkHttpClient.Builder clientBuilder)
@Shared @Shared
Call.Factory client = createCallFactory( Call.Factory client = createCallFactory(getClientBuilder(false))
new OkHttpClient.Builder() @Shared
Call.Factory clientWithReadTimeout = createCallFactory(getClientBuilder(true))
OkHttpClient.Builder getClientBuilder(boolean withReadTimeout) {
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.connectTimeout(CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS) .connectTimeout(CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS)
.readTimeout(READ_TIMEOUT_MS, TimeUnit.MILLISECONDS)
.protocols(Arrays.asList(Protocol.HTTP_1_1)) .protocols(Arrays.asList(Protocol.HTTP_1_1))
.retryOnConnectionFailure(false)) .retryOnConnectionFailure(false)
if (withReadTimeout) {
builder.readTimeout(READ_TIMEOUT_MS, TimeUnit.MILLISECONDS)
}
return builder
}
@Override @Override
Request buildRequest(String method, URI uri, Map<String, String> headers) { Request buildRequest(String method, URI uri, Map<String, String> headers) {
@ -46,7 +54,7 @@ abstract class AbstractOkHttp3Test extends HttpClientTest<Request> {
@Override @Override
int sendRequest(Request request, String method, URI uri, Map<String, String> headers) { int sendRequest(Request request, String method, URI uri, Map<String, String> headers) {
def response = client.newCall(request).execute() def response = getClient(uri).newCall(request).execute()
response.body().withCloseable { response.body().withCloseable {
return response.code() return response.code()
} }
@ -54,7 +62,7 @@ abstract class AbstractOkHttp3Test extends HttpClientTest<Request> {
@Override @Override
void sendRequestWithCallback(Request request, String method, URI uri, Map<String, String> headers, AbstractHttpClientTest.RequestResult requestResult) { void sendRequestWithCallback(Request request, String method, URI uri, Map<String, String> headers, AbstractHttpClientTest.RequestResult requestResult) {
client.newCall(request).enqueue(new Callback() { getClient(uri).newCall(request).enqueue(new Callback() {
@Override @Override
void onFailure(Call call, IOException e) { void onFailure(Call call, IOException e) {
requestResult.complete(e) requestResult.complete(e)
@ -69,6 +77,13 @@ abstract class AbstractOkHttp3Test extends HttpClientTest<Request> {
}) })
} }
Call.Factory getClient(URI uri) {
if (uri.toString().contains("/read-timeout")) {
return clientWithReadTimeout
}
return client
}
@Override @Override
boolean testCircularRedirects() { boolean testCircularRedirects() {
false false