Search in sources :

Example 71 with Frame

use of org.eclipse.jetty.http2.frames.Frame in project jetty.project by eclipse.

the class TrailersTest method testTrailersSentByClient.

@Test
public void testTrailersSentByClient() throws Exception {
    CountDownLatch latch = new CountDownLatch(1);
    start(new ServerSessionListener.Adapter() {

        @Override
        public Stream.Listener onNewStream(Stream stream, HeadersFrame frame) {
            MetaData.Request request = (MetaData.Request) frame.getMetaData();
            Assert.assertFalse(frame.isEndStream());
            Assert.assertTrue(request.getFields().containsKey("X-Request"));
            return new Stream.Listener.Adapter() {

                @Override
                public void onHeaders(Stream stream, HeadersFrame frame) {
                    MetaData trailer = frame.getMetaData();
                    Assert.assertTrue(frame.isEndStream());
                    Assert.assertTrue(trailer.getFields().containsKey("X-Trailer"));
                    latch.countDown();
                }
            };
        }
    });
    Session session = newClient(new Session.Listener.Adapter());
    HttpFields requestFields = new HttpFields();
    requestFields.put("X-Request", "true");
    MetaData.Request request = newRequest("GET", requestFields);
    HeadersFrame requestFrame = new HeadersFrame(request, null, false);
    FuturePromise<Stream> streamPromise = new FuturePromise<>();
    session.newStream(requestFrame, streamPromise, new Stream.Listener.Adapter());
    Stream stream = streamPromise.get(5, TimeUnit.SECONDS);
    // Send the trailers.
    HttpFields trailerFields = new HttpFields();
    trailerFields.put("X-Trailer", "true");
    MetaData trailers = new MetaData(HttpVersion.HTTP_2, trailerFields);
    HeadersFrame trailerFrame = new HeadersFrame(stream.getId(), trailers, null, true);
    stream.headers(trailerFrame, Callback.NOOP);
    Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
}
Also used : ServerSessionListener(org.eclipse.jetty.http2.api.server.ServerSessionListener) Request(org.eclipse.jetty.server.Request) HttpServletRequest(javax.servlet.http.HttpServletRequest) FuturePromise(org.eclipse.jetty.util.FuturePromise) CountDownLatch(java.util.concurrent.CountDownLatch) HeadersFrame(org.eclipse.jetty.http2.frames.HeadersFrame) MetaData(org.eclipse.jetty.http.MetaData) HttpFields(org.eclipse.jetty.http.HttpFields) ServletInputStream(javax.servlet.ServletInputStream) Stream(org.eclipse.jetty.http2.api.Stream) ServerSessionListener(org.eclipse.jetty.http2.api.server.ServerSessionListener) Session(org.eclipse.jetty.http2.api.Session) Test(org.junit.Test)

Example 72 with Frame

use of org.eclipse.jetty.http2.frames.Frame in project jetty.project by eclipse.

the class HTTP2Session method onPing.

@Override
public void onPing(PingFrame frame) {
    if (LOG.isDebugEnabled())
        LOG.debug("Received {}", frame);
    if (frame.isReply()) {
        notifyPing(this, frame);
    } else {
        PingFrame reply = new PingFrame(frame.getPayload(), true);
        control(null, Callback.NOOP, reply);
    }
}
Also used : PingFrame(org.eclipse.jetty.http2.frames.PingFrame)

Example 73 with Frame

use of org.eclipse.jetty.http2.frames.Frame in project jetty.project by eclipse.

the class DataGenerateParseTest method testGenerateParse.

private List<DataFrame> testGenerateParse(ByteBuffer data) {
    DataGenerator generator = new DataGenerator(new HeaderGenerator());
    final List<DataFrame> frames = new ArrayList<>();
    Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() {

        @Override
        public void onData(DataFrame frame) {
            frames.add(frame);
        }
    }, 4096, 8192);
    // Iterate a few times to be sure generator and parser are properly reset.
    for (int i = 0; i < 2; ++i) {
        ByteBufferPool.Lease lease = new ByteBufferPool.Lease(byteBufferPool);
        ByteBuffer slice = data.slice();
        int generated = 0;
        while (true) {
            generated += generator.generateData(lease, 13, slice, true, slice.remaining());
            generated -= Frame.HEADER_LENGTH;
            if (generated == data.remaining())
                break;
        }
        frames.clear();
        for (ByteBuffer buffer : lease.getByteBuffers()) {
            parser.parse(buffer);
        }
    }
    return frames;
}
Also used : MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) ByteBufferPool(org.eclipse.jetty.io.ByteBufferPool) ArrayList(java.util.ArrayList) ByteBuffer(java.nio.ByteBuffer) Parser(org.eclipse.jetty.http2.parser.Parser) DataGenerator(org.eclipse.jetty.http2.generator.DataGenerator) HeaderGenerator(org.eclipse.jetty.http2.generator.HeaderGenerator)

Example 74 with Frame

use of org.eclipse.jetty.http2.frames.Frame in project jetty.project by eclipse.

the class DataGenerateParseTest method testGenerateParseOneByteAtATime.

@Test
public void testGenerateParseOneByteAtATime() {
    DataGenerator generator = new DataGenerator(new HeaderGenerator());
    final List<DataFrame> frames = new ArrayList<>();
    Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() {

        @Override
        public void onData(DataFrame frame) {
            frames.add(frame);
        }
    }, 4096, 8192);
    // Iterate a few times to be sure generator and parser are properly reset.
    for (int i = 0; i < 2; ++i) {
        ByteBufferPool.Lease lease = new ByteBufferPool.Lease(byteBufferPool);
        ByteBuffer data = ByteBuffer.wrap(largeContent);
        ByteBuffer slice = data.slice();
        int generated = 0;
        while (true) {
            generated += generator.generateData(lease, 13, slice, true, slice.remaining());
            generated -= Frame.HEADER_LENGTH;
            if (generated == data.remaining())
                break;
        }
        frames.clear();
        for (ByteBuffer buffer : lease.getByteBuffers()) {
            while (buffer.hasRemaining()) {
                parser.parse(ByteBuffer.wrap(new byte[] { buffer.get() }));
            }
        }
        Assert.assertEquals(largeContent.length, frames.size());
    }
}
Also used : MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) ByteBufferPool(org.eclipse.jetty.io.ByteBufferPool) ArrayList(java.util.ArrayList) ByteBuffer(java.nio.ByteBuffer) Parser(org.eclipse.jetty.http2.parser.Parser) DataGenerator(org.eclipse.jetty.http2.generator.DataGenerator) HeaderGenerator(org.eclipse.jetty.http2.generator.HeaderGenerator) Test(org.junit.Test)

Example 75 with Frame

use of org.eclipse.jetty.http2.frames.Frame in project jetty.project by eclipse.

the class PingGenerateParseTest method testPayloadAsLong.

@Test
public void testPayloadAsLong() throws Exception {
    PingGenerator generator = new PingGenerator(new HeaderGenerator());
    final List<PingFrame> frames = new ArrayList<>();
    Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() {

        @Override
        public void onPing(PingFrame frame) {
            frames.add(frame);
        }
    }, 4096, 8192);
    ByteBufferPool.Lease lease = new ByteBufferPool.Lease(byteBufferPool);
    PingFrame ping = new PingFrame(System.nanoTime(), true);
    generator.generate(lease, ping);
    for (ByteBuffer buffer : lease.getByteBuffers()) {
        while (buffer.hasRemaining()) {
            parser.parse(buffer);
        }
    }
    Assert.assertEquals(1, frames.size());
    PingFrame pong = frames.get(0);
    Assert.assertEquals(ping.getPayloadAsLong(), pong.getPayloadAsLong());
    Assert.assertTrue(pong.isReply());
}
Also used : MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) ByteBufferPool(org.eclipse.jetty.io.ByteBufferPool) ArrayList(java.util.ArrayList) PingGenerator(org.eclipse.jetty.http2.generator.PingGenerator) ByteBuffer(java.nio.ByteBuffer) Parser(org.eclipse.jetty.http2.parser.Parser) HeaderGenerator(org.eclipse.jetty.http2.generator.HeaderGenerator) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)124 HttpFields (org.eclipse.jetty.http.HttpFields)107 MetaData (org.eclipse.jetty.http.MetaData)107 HeadersFrame (org.eclipse.jetty.http2.frames.HeadersFrame)107 CountDownLatch (java.util.concurrent.CountDownLatch)104 Stream (org.eclipse.jetty.http2.api.Stream)99 Session (org.eclipse.jetty.http2.api.Session)94 ServerSessionListener (org.eclipse.jetty.http2.api.server.ServerSessionListener)85 FuturePromise (org.eclipse.jetty.util.FuturePromise)69 DataFrame (org.eclipse.jetty.http2.frames.DataFrame)60 ByteBuffer (java.nio.ByteBuffer)59 Callback (org.eclipse.jetty.util.Callback)53 HttpServletResponse (javax.servlet.http.HttpServletResponse)51 Promise (org.eclipse.jetty.util.Promise)49 ByteBufferPool (org.eclipse.jetty.io.ByteBufferPool)43 HTTP2Session (org.eclipse.jetty.http2.HTTP2Session)39 IOException (java.io.IOException)38 HttpServletRequest (javax.servlet.http.HttpServletRequest)38 ServletException (javax.servlet.ServletException)35 HashMap (java.util.HashMap)34