Search in sources :

Example 1 with Generator

use of org.eclipse.jetty.fcgi.generator.Generator in project jetty.project by eclipse.

the class ClientParserTest method testParseSmallResponseContent.

@Test
public void testParseSmallResponseContent() throws Exception {
    final int id = 13;
    HttpFields fields = new HttpFields();
    ByteBuffer content = ByteBuffer.wrap(new byte[1024]);
    final int contentLength = content.remaining();
    final int code = 200;
    final String contentTypeName = "Content-Length";
    final String contentTypeValue = String.valueOf(contentLength);
    fields.put(contentTypeName, contentTypeValue);
    ByteBufferPool byteBufferPool = new MappedByteBufferPool();
    ServerGenerator generator = new ServerGenerator(byteBufferPool);
    Generator.Result result1 = generator.generateResponseHeaders(id, code, "OK", fields, null);
    Generator.Result result2 = generator.generateResponseContent(id, content, true, false, null);
    final AtomicInteger verifier = new AtomicInteger();
    ClientParser parser = new ClientParser(new ClientParser.Listener.Adapter() {

        @Override
        public boolean onContent(int request, FCGI.StreamType stream, ByteBuffer buffer) {
            Assert.assertEquals(id, request);
            Assert.assertEquals(contentLength, buffer.remaining());
            verifier.addAndGet(2);
            return false;
        }

        @Override
        public void onEnd(int request) {
            Assert.assertEquals(id, request);
            verifier.addAndGet(3);
        }
    });
    for (ByteBuffer buffer : result1.getByteBuffers()) {
        parser.parse(buffer);
        Assert.assertFalse(buffer.hasRemaining());
    }
    for (ByteBuffer buffer : result2.getByteBuffers()) {
        parser.parse(buffer);
        Assert.assertFalse(buffer.hasRemaining());
    }
    Assert.assertEquals(5, verifier.get());
}
Also used : MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) ByteBufferPool(org.eclipse.jetty.io.ByteBufferPool) ServerGenerator(org.eclipse.jetty.fcgi.generator.ServerGenerator) ByteBuffer(java.nio.ByteBuffer) MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) HttpFields(org.eclipse.jetty.http.HttpFields) Generator(org.eclipse.jetty.fcgi.generator.Generator) ServerGenerator(org.eclipse.jetty.fcgi.generator.ServerGenerator) FCGI(org.eclipse.jetty.fcgi.FCGI) Test(org.junit.Test)

Example 2 with Generator

use of org.eclipse.jetty.fcgi.generator.Generator in project jetty.project by eclipse.

the class ClientParserTest method testParseResponseHeaders.

@Test
public void testParseResponseHeaders() throws Exception {
    final int id = 13;
    HttpFields fields = new HttpFields();
    final int statusCode = 200;
    final String statusMessage = "OK";
    final String contentTypeName = "Content-Type";
    final String contentTypeValue = "text/html;charset=utf-8";
    fields.put(contentTypeName, contentTypeValue);
    ByteBufferPool byteBufferPool = new MappedByteBufferPool();
    ServerGenerator generator = new ServerGenerator(byteBufferPool);
    Generator.Result result = generator.generateResponseHeaders(id, statusCode, statusMessage, fields, null);
    // Use the fundamental theorem of arithmetic to test the results.
    // This way we know onHeader() has been called the right number of
    // times with the right arguments, and so onHeaders().
    final int[] primes = new int[] { 2, 3, 5 };
    int value = 1;
    for (int prime : primes) value *= prime;
    final AtomicInteger params = new AtomicInteger(1);
    ClientParser parser = new ClientParser(new ClientParser.Listener.Adapter() {

        @Override
        public void onBegin(int request, int code, String reason) {
            Assert.assertEquals(statusCode, code);
            Assert.assertEquals(statusMessage, reason);
            params.set(params.get() * primes[0]);
        }

        @Override
        public void onHeader(int request, HttpField field) {
            Assert.assertEquals(id, request);
            switch(field.getName()) {
                case contentTypeName:
                    Assert.assertEquals(contentTypeValue, field.getValue());
                    params.set(params.get() * primes[1]);
                    break;
                default:
                    break;
            }
        }

        @Override
        public void onHeaders(int request) {
            Assert.assertEquals(id, request);
            params.set(params.get() * primes[2]);
        }
    });
    for (ByteBuffer buffer : result.getByteBuffers()) {
        parser.parse(buffer);
        Assert.assertFalse(buffer.hasRemaining());
    }
    Assert.assertEquals(value, params.get());
}
Also used : MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) ByteBufferPool(org.eclipse.jetty.io.ByteBufferPool) ServerGenerator(org.eclipse.jetty.fcgi.generator.ServerGenerator) ByteBuffer(java.nio.ByteBuffer) MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) HttpField(org.eclipse.jetty.http.HttpField) HttpFields(org.eclipse.jetty.http.HttpFields) Generator(org.eclipse.jetty.fcgi.generator.Generator) ServerGenerator(org.eclipse.jetty.fcgi.generator.ServerGenerator) Test(org.junit.Test)

Example 3 with Generator

use of org.eclipse.jetty.fcgi.generator.Generator in project jetty.project by eclipse.

the class ClientParserTest method testParseLargeResponseContent.

@Test
public void testParseLargeResponseContent() throws Exception {
    final int id = 13;
    HttpFields fields = new HttpFields();
    ByteBuffer content = ByteBuffer.wrap(new byte[128 * 1024]);
    final int contentLength = content.remaining();
    final int code = 200;
    final String contentTypeName = "Content-Length";
    final String contentTypeValue = String.valueOf(contentLength);
    fields.put(contentTypeName, contentTypeValue);
    ByteBufferPool byteBufferPool = new MappedByteBufferPool();
    ServerGenerator generator = new ServerGenerator(byteBufferPool);
    Generator.Result result1 = generator.generateResponseHeaders(id, code, "OK", fields, null);
    Generator.Result result2 = generator.generateResponseContent(id, content, true, false, null);
    final AtomicInteger totalLength = new AtomicInteger();
    final AtomicBoolean verifier = new AtomicBoolean();
    ClientParser parser = new ClientParser(new ClientParser.Listener.Adapter() {

        @Override
        public boolean onContent(int request, FCGI.StreamType stream, ByteBuffer buffer) {
            Assert.assertEquals(id, request);
            totalLength.addAndGet(buffer.remaining());
            return false;
        }

        @Override
        public void onEnd(int request) {
            Assert.assertEquals(id, request);
            Assert.assertEquals(contentLength, totalLength.get());
            verifier.set(true);
        }
    });
    for (ByteBuffer buffer : result1.getByteBuffers()) {
        parser.parse(buffer);
        Assert.assertFalse(buffer.hasRemaining());
    }
    for (ByteBuffer buffer : result2.getByteBuffers()) {
        parser.parse(buffer);
        Assert.assertFalse(buffer.hasRemaining());
    }
    Assert.assertTrue(verifier.get());
}
Also used : MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) ByteBufferPool(org.eclipse.jetty.io.ByteBufferPool) ServerGenerator(org.eclipse.jetty.fcgi.generator.ServerGenerator) ByteBuffer(java.nio.ByteBuffer) MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) HttpFields(org.eclipse.jetty.http.HttpFields) Generator(org.eclipse.jetty.fcgi.generator.Generator) ServerGenerator(org.eclipse.jetty.fcgi.generator.ServerGenerator) FCGI(org.eclipse.jetty.fcgi.FCGI) Test(org.junit.Test)

Example 4 with Generator

use of org.eclipse.jetty.fcgi.generator.Generator in project jetty.project by eclipse.

the class ClientParserTest method testParseNoResponseContent.

@Test
public void testParseNoResponseContent() throws Exception {
    final int id = 13;
    HttpFields fields = new HttpFields();
    fields.put("Content-Length", "0");
    ByteBufferPool byteBufferPool = new MappedByteBufferPool();
    ServerGenerator generator = new ServerGenerator(byteBufferPool);
    Generator.Result result1 = generator.generateResponseHeaders(id, 200, "OK", fields, null);
    Generator.Result result2 = generator.generateResponseContent(id, null, true, false, null);
    final AtomicInteger verifier = new AtomicInteger();
    ClientParser parser = new ClientParser(new ClientParser.Listener.Adapter() {

        @Override
        public boolean onContent(int request, FCGI.StreamType stream, ByteBuffer buffer) {
            Assert.assertEquals(id, request);
            verifier.addAndGet(2);
            return false;
        }

        @Override
        public void onEnd(int request) {
            Assert.assertEquals(id, request);
            verifier.addAndGet(3);
        }
    });
    for (ByteBuffer buffer : result1.getByteBuffers()) {
        parser.parse(buffer);
        Assert.assertFalse(buffer.hasRemaining());
    }
    for (ByteBuffer buffer : result2.getByteBuffers()) {
        parser.parse(buffer);
        Assert.assertFalse(buffer.hasRemaining());
    }
    Assert.assertEquals(3, verifier.get());
}
Also used : MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) ByteBufferPool(org.eclipse.jetty.io.ByteBufferPool) ServerGenerator(org.eclipse.jetty.fcgi.generator.ServerGenerator) ByteBuffer(java.nio.ByteBuffer) MappedByteBufferPool(org.eclipse.jetty.io.MappedByteBufferPool) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) HttpFields(org.eclipse.jetty.http.HttpFields) Generator(org.eclipse.jetty.fcgi.generator.Generator) ServerGenerator(org.eclipse.jetty.fcgi.generator.ServerGenerator) FCGI(org.eclipse.jetty.fcgi.FCGI) Test(org.junit.Test)

Aggregations

ByteBuffer (java.nio.ByteBuffer)4 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)4 Generator (org.eclipse.jetty.fcgi.generator.Generator)4 ServerGenerator (org.eclipse.jetty.fcgi.generator.ServerGenerator)4 HttpFields (org.eclipse.jetty.http.HttpFields)4 ByteBufferPool (org.eclipse.jetty.io.ByteBufferPool)4 MappedByteBufferPool (org.eclipse.jetty.io.MappedByteBufferPool)4 Test (org.junit.Test)4 FCGI (org.eclipse.jetty.fcgi.FCGI)3 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 HttpField (org.eclipse.jetty.http.HttpField)1