@Test
  public void testCommaSeparatedHeaderValues() {
    DefaultHttpMessage message;
    List<String> commaSeparatedHeaders;

    // test the empty headers case
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(commaSeparatedHeaders, empty());

    // two headers present, but no values
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "");
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "");
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(commaSeparatedHeaders, empty());

    // a single header value
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "chunked");
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(commaSeparatedHeaders, contains("chunked"));

    // a single header value with extra spaces
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, " chunked  , ");
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(commaSeparatedHeaders, contains("chunked"));

    // two comma-separated values in one header line
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "compress, gzip");
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(commaSeparatedHeaders, contains("compress", "gzip"));

    // two comma-separated values in one header line with a spurious ',' and space. see RFC 7230
    // section 7
    // for information on empty list items (not all of which are valid header-values).
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "compress, gzip, ,");
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(commaSeparatedHeaders, contains("compress", "gzip"));

    // two values in two separate header lines
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "gzip");
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "chunked");
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(commaSeparatedHeaders, contains("gzip", "chunked"));

    // multiple comma-separated values in two separate header lines
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "gzip, compress");
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "deflate, gzip");
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(commaSeparatedHeaders, contains("gzip", "compress", "deflate", "gzip"));

    // multiple comma-separated values in multiple header lines with spurious spaces, commas,
    // and tabs (horizontal tabs are defined as optional whitespace in RFC 7230 section 3.2.3)
    message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, " gzip,compress,");
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, "\tdeflate\t,  gzip, ");
    message.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, ",gzip,,deflate,\t, ,");
    commaSeparatedHeaders =
        ProxyUtils.getAllCommaSeparatedHeaderValues(HttpHeaders.Names.TRANSFER_ENCODING, message);
    assertThat(
        commaSeparatedHeaders, contains("gzip", "compress", "deflate", "gzip", "gzip", "deflate"));
  }