use of io.grpc.Metadata in project grpc-java by grpc.
the class NettyClientTransportTest method maxHeaderListSizeShouldBeEnforcedOnServer.
@Test
public void maxHeaderListSizeShouldBeEnforcedOnServer() throws Exception {
startServer(100, 1);
NettyClientTransport transport = newTransport(newNegotiator());
callMeMaybe(transport.start(clientTransportListener));
try {
// Send a single RPC and wait for the response.
new Rpc(transport, new Metadata()).halfClose().waitForResponse();
fail("The stream should have been failed due to server received header exceeds header list" + " size limit!");
} catch (Exception e) {
Status status = Status.fromThrowable(e);
assertEquals(status.toString(), Status.Code.INTERNAL, status.getCode());
}
}
use of io.grpc.Metadata in project grpc-java by grpc.
the class OkHttpClientTransport method shutdownNow.
@Override
public void shutdownNow(Status reason) {
shutdown();
synchronized (lock) {
Iterator<Map.Entry<Integer, OkHttpClientStream>> it = streams.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, OkHttpClientStream> entry = it.next();
it.remove();
entry.getValue().transportReportStatus(reason, false, new Metadata());
}
for (OkHttpClientStream stream : pendingStreams) {
stream.transportReportStatus(reason, true, new Metadata());
}
pendingStreams.clear();
maybeClearInUse();
stopIfNecessary();
}
}
use of io.grpc.Metadata in project grpc-java by grpc.
the class OkHttpClientTransport method startGoAway.
private void startGoAway(int lastKnownStreamId, ErrorCode errorCode, Status status) {
synchronized (lock) {
if (goAwayStatus == null) {
goAwayStatus = status;
listener.transportShutdown(status);
}
if (errorCode != null && !goAwaySent) {
// Send GOAWAY with lastGoodStreamId of 0, since we don't expect any server-initiated
// streams. The GOAWAY is part of graceful shutdown.
goAwaySent = true;
frameWriter.goAway(0, errorCode, new byte[0]);
}
Iterator<Map.Entry<Integer, OkHttpClientStream>> it = streams.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, OkHttpClientStream> entry = it.next();
if (entry.getKey() > lastKnownStreamId) {
it.remove();
entry.getValue().transportReportStatus(status, false, new Metadata());
}
}
for (OkHttpClientStream stream : pendingStreams) {
stream.transportReportStatus(status, true, new Metadata());
}
pendingStreams.clear();
maybeClearInUse();
stopIfNecessary();
}
}
use of io.grpc.Metadata in project grpc-java by grpc.
the class NettyServerStreamTest method writeHeadersShouldSendHeaders.
@Test
public void writeHeadersShouldSendHeaders() throws Exception {
Metadata headers = new Metadata();
ListMultimap<CharSequence, CharSequence> expectedHeaders = ImmutableListMultimap.copyOf(Utils.convertServerHeaders(headers));
stream().writeHeaders(headers);
ArgumentCaptor<SendResponseHeadersCommand> sendHeadersCap = ArgumentCaptor.forClass(SendResponseHeadersCommand.class);
verify(writeQueue).enqueue(sendHeadersCap.capture(), eq(true));
SendResponseHeadersCommand sendHeaders = sendHeadersCap.getValue();
assertThat(sendHeaders.stream()).isSameAs(stream.transportState());
assertThat(ImmutableListMultimap.copyOf(sendHeaders.headers())).containsExactlyEntriesIn(expectedHeaders);
assertThat(sendHeaders.endOfStream()).isFalse();
}
use of io.grpc.Metadata in project grpc-java by grpc.
the class NettyServerStreamTest method emptyFramerShouldSendNoPayload.
@Test
public void emptyFramerShouldSendNoPayload() {
ListMultimap<CharSequence, CharSequence> expectedHeaders = ImmutableListMultimap.copyOf(new DefaultHttp2Headers().status(new AsciiString("200")).set(new AsciiString("content-type"), new AsciiString("application/grpc")).set(new AsciiString("grpc-status"), new AsciiString("0")));
ArgumentCaptor<SendResponseHeadersCommand> cmdCap = ArgumentCaptor.forClass(SendResponseHeadersCommand.class);
stream().close(Status.OK, new Metadata());
verify(writeQueue).enqueue(cmdCap.capture(), eq(true));
SendResponseHeadersCommand cmd = cmdCap.getValue();
assertThat(cmd.stream()).isSameAs(stream.transportState());
assertThat(ImmutableListMultimap.copyOf(cmd.headers())).containsExactlyEntriesIn(expectedHeaders);
assertThat(cmd.endOfStream()).isTrue();
}
Aggregations