@Test
  public void test100ThenResponseWithContent() throws Exception {
    ByteBuffer header = BufferUtils.allocate(4096);
    ByteBuffer content0 = BufferUtils.toBuffer("Hello World! ");
    ByteBuffer content1 = BufferUtils.toBuffer("The quick brown fox jumped over the lazy dog. ");
    HttpGenerator gen = new HttpGenerator();

    HttpGenerator.Result result =
        gen.generateResponse(HttpGenerator.CONTINUE_100_INFO, null, null, null, false);
    assertEquals(HttpGenerator.Result.NEED_HEADER, result);
    assertEquals(HttpGenerator.State.START, gen.getState());

    result = gen.generateResponse(HttpGenerator.CONTINUE_100_INFO, header, null, null, false);
    assertEquals(HttpGenerator.Result.FLUSH, result);
    assertEquals(HttpGenerator.State.COMPLETING_1XX, gen.getState());
    String out = BufferUtils.toString(header);

    result = gen.generateResponse(null, null, null, null, false);
    assertEquals(HttpGenerator.Result.DONE, result);
    assertEquals(HttpGenerator.State.START, gen.getState());

    assertThat(out, containsString("HTTP/1.1 100 Continue"));

    result = gen.generateResponse(null, null, null, content0, false);
    assertEquals(HttpGenerator.Result.NEED_INFO, result);
    assertEquals(HttpGenerator.State.START, gen.getState());

    MetaData.Response info =
        new MetaData.Response(
            HttpVersion.HTTP_1_1,
            200,
            null,
            new HttpFields(),
            BufferUtils.length(content0) + BufferUtils.length(content1));
    info.getFields().add("Last-Modified", DateGenerator.__01Jan1970);
    result = gen.generateResponse(info, null, null, content0, false);
    assertEquals(HttpGenerator.Result.NEED_HEADER, result);
    assertEquals(HttpGenerator.State.START, gen.getState());

    result = gen.generateResponse(info, header, null, content0, false);
    assertEquals(HttpGenerator.Result.FLUSH, result);
    assertEquals(HttpGenerator.State.COMMITTED, gen.getState());

    out = BufferUtils.toString(header);
    BufferUtils.clear(header);
    out += BufferUtils.toString(content0);
    BufferUtils.clear(content0);

    result = gen.generateResponse(null, null, null, content1, false);
    assertEquals(HttpGenerator.Result.FLUSH, result);
    assertEquals(HttpGenerator.State.COMMITTED, gen.getState());
    out += BufferUtils.toString(content1);
    BufferUtils.clear(content1);

    result = gen.generateResponse(null, null, null, null, true);
    assertEquals(HttpGenerator.Result.CONTINUE, result);
    assertEquals(HttpGenerator.State.COMPLETING, gen.getState());

    result = gen.generateResponse(null, null, null, null, true);
    assertEquals(HttpGenerator.Result.DONE, result);
    assertEquals(HttpGenerator.State.END, gen.getState());

    assertThat(out, containsString("HTTP/1.1 200 OK"));
    assertThat(out, containsString("Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT"));
    assertThat(out, not(containsString("chunked")));
    assertThat(out, containsString("Content-Length: 59"));
    assertThat(
        out, containsString("\r\n\r\nHello World! The quick brown fox jumped over the lazy dog. "));
  }