Skip to content

Commit 4800935

Browse files
committed
make control flow in ConnectionCloseHeaderHandlingTest and
GracefulConnectionClosureHandlingTest more robust
1 parent 05fe0ec commit 4800935

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

servicetalk-http-netty/src/test/java/io/servicetalk/http/netty/ConnectionCloseHeaderHandlingTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.servicetalk.http.api.StreamingHttpClient;
2525
import io.servicetalk.http.api.StreamingHttpRequest;
2626
import io.servicetalk.http.api.StreamingHttpResponse;
27+
import io.servicetalk.oio.api.internal.PayloadWriterUtils;
2728
import io.servicetalk.test.resources.DefaultTestCerts;
2829
import io.servicetalk.transport.api.ClientSslConfigBuilder;
2930
import io.servicetalk.transport.api.ConnectionContext;
@@ -168,16 +169,17 @@ public Completable accept(final ConnectionContext context) {
168169
// Subscribe to the request payload body before response writer closes
169170
BlockingIterator<Buffer> iterator = request.payloadBody().iterator();
170171
// Consume request payload body asynchronously:
171-
ctx.executionContext().executor().execute(() -> {
172+
Future<Void> writeFuture = ctx.executionContext().executor().submit(() -> {
172173
while (iterator.hasNext()) {
173174
Buffer chunk = iterator.next();
174175
assert chunk != null;
175176
requestPayloadSize.addAndGet(chunk.readableBytes());
176177
}
177-
requestPayloadReceived.countDown();
178-
});
178+
}).beforeOnError(cause -> PayloadWriterUtils.safeClose(writer, cause))
179+
.afterFinally(requestPayloadReceived::countDown)
180+
.toFuture();
179181
if (awaitRequestPayload) {
180-
requestPayloadReceived.await();
182+
writeFuture.get();
181183
}
182184
if (!noResponseContent) {
183185
// Defer payload body to see how client-side processes "Connection: close" header

servicetalk-http-netty/src/test/java/io/servicetalk/http/netty/GracefulConnectionClosureHandlingTest.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.servicetalk.http.api.StreamingHttpClient;
3030
import io.servicetalk.http.api.StreamingHttpRequest;
3131
import io.servicetalk.http.api.StreamingHttpResponse;
32+
import io.servicetalk.oio.api.internal.PayloadWriterUtils;
3233
import io.servicetalk.test.resources.DefaultTestCerts;
3334
import io.servicetalk.transport.api.ClientSslConfigBuilder;
3435
import io.servicetalk.transport.api.ConnectionContext;
@@ -189,23 +190,18 @@ public Completable accept(final ConnectionContext context) {
189190
// Subscribe to the request payload body before response writer closes
190191
BlockingIterator<Buffer> iterator = request.payloadBody().iterator();
191192
// Consume request payload body asynchronously:
192-
ctx.executionContext().executor().execute(() -> {
193+
ctx.executionContext().executor().submit(() -> {
193194
int receivedSize = 0;
194195
while (iterator.hasNext()) {
195-
try {
196-
Buffer chunk = iterator.next();
197-
assert chunk != null;
198-
receivedSize += chunk.readableBytes();
199-
} catch (Throwable cause) {
200-
try {
201-
writer.write(cause.toString());
202-
} catch (IOException e) {
203-
throw new AssertionError(e);
204-
}
205-
}
196+
Buffer chunk = iterator.next();
197+
assert chunk != null;
198+
receivedSize += chunk.readableBytes();
206199
}
207200
serverReceivedRequestPayload.add(receivedSize);
208-
});
201+
}).beforeOnError(cause -> {
202+
serverReceivedRequestPayload.add(-1);
203+
PayloadWriterUtils.safeClose(writer, cause);
204+
}).toFuture();
209205
serverSendResponsePayload.await();
210206
writer.write(RESPONSE_CONTENT);
211207
}

0 commit comments

Comments
 (0)