Search in sources :

Example 1 with PROTOCOL_ERROR

use of io.netty.handler.codec.http2.Http2Error.PROTOCOL_ERROR in project netty by netty.

the class Http2ConnectionHandlerTest method clientShouldNeverSend431WhenHeadersAreTooLarge.

@Test
public void clientShouldNeverSend431WhenHeadersAreTooLarge() throws Exception {
    int padding = 0;
    handler = newHandler();
    Http2Exception e = new Http2Exception.HeaderListSizeException(STREAM_ID, PROTOCOL_ERROR, "Header size exceeded max allowed size 8196", true);
    when(stream.id()).thenReturn(STREAM_ID);
    when(connection.isServer()).thenReturn(false);
    when(stream.isHeadersSent()).thenReturn(false);
    when(remote.lastStreamCreated()).thenReturn(STREAM_ID);
    when(frameWriter.writeRstStream(eq(ctx), eq(STREAM_ID), eq(PROTOCOL_ERROR.code()), eq(promise))).thenReturn(future);
    handler.exceptionCaught(ctx, e);
    verify(encoder, never()).writeHeaders(eq(ctx), eq(STREAM_ID), any(Http2Headers.class), eq(padding), eq(true), eq(promise));
    verify(frameWriter).writeRstStream(ctx, STREAM_ID, PROTOCOL_ERROR.code(), promise);
}
Also used : ShutdownHint(io.netty.handler.codec.http2.Http2Exception.ShutdownHint) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 2 with PROTOCOL_ERROR

use of io.netty.handler.codec.http2.Http2Error.PROTOCOL_ERROR in project netty by netty.

the class Http2ConnectionHandlerTest method serverShouldNeverSend431IfHeadersAlreadySent.

@Test
public void serverShouldNeverSend431IfHeadersAlreadySent() throws Exception {
    int padding = 0;
    handler = newHandler();
    Http2Exception e = new Http2Exception.HeaderListSizeException(STREAM_ID, PROTOCOL_ERROR, "Header size exceeded max allowed size 8196", true);
    when(stream.id()).thenReturn(STREAM_ID);
    when(connection.isServer()).thenReturn(true);
    when(stream.isHeadersSent()).thenReturn(true);
    when(remote.lastStreamCreated()).thenReturn(STREAM_ID);
    when(frameWriter.writeRstStream(eq(ctx), eq(STREAM_ID), eq(PROTOCOL_ERROR.code()), eq(promise))).thenReturn(future);
    handler.exceptionCaught(ctx, e);
    verify(encoder, never()).writeHeaders(eq(ctx), eq(STREAM_ID), any(Http2Headers.class), eq(padding), eq(true), eq(promise));
    verify(frameWriter).writeRstStream(ctx, STREAM_ID, PROTOCOL_ERROR.code(), promise);
}
Also used : ShutdownHint(io.netty.handler.codec.http2.Http2Exception.ShutdownHint) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 3 with PROTOCOL_ERROR

use of io.netty.handler.codec.http2.Http2Error.PROTOCOL_ERROR in project netty by netty.

the class Http2ConnectionHandlerTest method serverShouldNeverSend431HeaderSizeErrorWhenEncoding.

@Test
public void serverShouldNeverSend431HeaderSizeErrorWhenEncoding() throws Exception {
    int padding = 0;
    handler = newHandler();
    Http2Exception e = new Http2Exception.HeaderListSizeException(STREAM_ID, PROTOCOL_ERROR, "Header size exceeded max allowed size 8196", false);
    when(stream.id()).thenReturn(STREAM_ID);
    when(connection.isServer()).thenReturn(true);
    when(stream.isHeadersSent()).thenReturn(false);
    when(remote.lastStreamCreated()).thenReturn(STREAM_ID);
    when(frameWriter.writeRstStream(eq(ctx), eq(STREAM_ID), eq(PROTOCOL_ERROR.code()), eq(promise))).thenReturn(future);
    handler.exceptionCaught(ctx, e);
    verify(encoder, never()).writeHeaders(eq(ctx), eq(STREAM_ID), any(Http2Headers.class), eq(padding), eq(true), eq(promise));
    verify(frameWriter).writeRstStream(ctx, STREAM_ID, PROTOCOL_ERROR.code(), promise);
}
Also used : ShutdownHint(io.netty.handler.codec.http2.Http2Exception.ShutdownHint) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 4 with PROTOCOL_ERROR

use of io.netty.handler.codec.http2.Http2Error.PROTOCOL_ERROR in project netty by netty.

the class Http2ConnectionHandlerTest method serverShouldSend431OnHeaderSizeErrorWhenDecodingInitialHeaders.

@Test
public void serverShouldSend431OnHeaderSizeErrorWhenDecodingInitialHeaders() throws Exception {
    int padding = 0;
    handler = newHandler();
    Http2Exception e = new Http2Exception.HeaderListSizeException(STREAM_ID, PROTOCOL_ERROR, "Header size exceeded max allowed size 8196", true);
    when(stream.id()).thenReturn(STREAM_ID);
    when(connection.isServer()).thenReturn(true);
    when(stream.isHeadersSent()).thenReturn(false);
    when(remote.lastStreamCreated()).thenReturn(STREAM_ID);
    when(frameWriter.writeRstStream(eq(ctx), eq(STREAM_ID), eq(PROTOCOL_ERROR.code()), eq(promise))).thenReturn(future);
    handler.exceptionCaught(ctx, e);
    ArgumentCaptor<Http2Headers> captor = ArgumentCaptor.forClass(Http2Headers.class);
    verify(encoder).writeHeaders(eq(ctx), eq(STREAM_ID), captor.capture(), eq(padding), eq(true), eq(promise));
    Http2Headers headers = captor.getValue();
    assertEquals(HttpResponseStatus.REQUEST_HEADER_FIELDS_TOO_LARGE.codeAsText(), headers.status());
    verify(frameWriter).writeRstStream(ctx, STREAM_ID, PROTOCOL_ERROR.code(), promise);
}
Also used : ShutdownHint(io.netty.handler.codec.http2.Http2Exception.ShutdownHint) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 5 with PROTOCOL_ERROR

use of io.netty.handler.codec.http2.Http2Error.PROTOCOL_ERROR in project micronaut-core by micronaut-projects.

the class StreamingInboundHttp2ToHttpAdapter method onPushPromiseRead.

@Override
public void onPushPromiseRead(ChannelHandlerContext ctx, int streamId, int promisedStreamId, Http2Headers headers, int padding) throws Http2Exception {
    // A push promise should not be allowed to add headers to an existing stream
    Http2Stream promisedStream = connection.stream(promisedStreamId);
    if (headers.status() == null) {
        // A PUSH_PROMISE frame has no Http response status.
        // https://tools.ietf.org/html/rfc7540#section-8.2.1
        // Server push is semantically equivalent to a server responding to a
        // request; however, in this case, that request is also sent by the
        // server, as a PUSH_PROMISE frame.
        headers.status(OK.codeAsText());
    }
    HttpMessage msg = processHeadersBegin(ctx, promisedStream, headers, false, false);
    if (msg == null) {
        throw connectionError(PROTOCOL_ERROR, "Push Promise Frame received for pre-existing stream id %d", promisedStreamId);
    }
    msg.headers().setInt(HttpConversionUtil.ExtensionHeaderNames.STREAM_PROMISE_ID.text(), streamId);
    msg.headers().setShort(HttpConversionUtil.ExtensionHeaderNames.STREAM_WEIGHT.text(), Http2CodecUtil.DEFAULT_PRIORITY_WEIGHT);
    processHeadersEnd(ctx, promisedStream, msg, false);
}
Also used : Http2Stream(io.netty.handler.codec.http2.Http2Stream)

Aggregations

Test (org.junit.jupiter.api.Test)6 ShutdownHint (io.netty.handler.codec.http2.Http2Exception.ShutdownHint)5 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)5 Http2Stream (io.netty.handler.codec.http2.Http2Stream)3 ChannelFuture (io.netty.channel.ChannelFuture)1 ChannelFutureListener (io.netty.channel.ChannelFutureListener)1 ChannelHandlerAdapter (io.netty.channel.ChannelHandlerAdapter)1 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)1 Http2Runnable (io.netty.handler.codec.http2.Http2TestUtil.Http2Runnable)1 IllegalReferenceCountException (io.netty.util.IllegalReferenceCountException)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 ExecutionException (java.util.concurrent.ExecutionException)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1