public void StripTEHeadersCsvSeparatedExcludingTrailers() { HttpHeaders inHeaders = new DefaultHttpHeaders(); inHeaders.Add(HttpHeaderNames.Te, HttpHeaderValues.Gzip + "," + HttpHeaderValues.Trailers); var output = new DefaultHttp2Headers(); HttpConversionUtil.ToHttp2Headers(inHeaders, output); Assert.Same(HttpHeaderValues.Trailers, output.Get(HttpHeaderNames.Te, null)); }
public void StripTEHeadersAccountsForOWS() { HttpHeaders inHeaders = new DefaultHttpHeaders(); inHeaders.Add(HttpHeaderNames.Te, " " + HttpHeaderValues.Trailers + " "); var output = new DefaultHttp2Headers(); HttpConversionUtil.ToHttp2Headers(inHeaders, output); Assert.Same(HttpHeaderValues.Trailers, output.Get(HttpHeaderNames.Te, null)); }
public void StripConnectionNomineesWithCsv() { HttpHeaders inHeaders = new DefaultHttpHeaders(); inHeaders.Add(HttpHeaderNames.Connection, "foo, bar"); inHeaders.Add((AsciiString)"foo", "baz"); inHeaders.Add((AsciiString)"bar", "qux"); inHeaders.Add((AsciiString)"hello", "world"); var output = new DefaultHttp2Headers(); HttpConversionUtil.ToHttp2Headers(inHeaders, output); Assert.Equal(1, output.Size); Assert.Same("world", output.Get((AsciiString)"hello", null).ToString()); }
public void TestWillEncode16MBHeaderByDefault() { var buf = Unpooled.Buffer(); var bigHeaderName = "x-big-header"; int bigHeaderSize = 1024 * 1024 * 16; var bigHeaderVal = new string(new char[bigHeaderSize]).Replace('\0', 'X'); IHttp2Headers headersIn = new DefaultHttp2Headers(); headersIn.Add((AsciiString)"x-big-header", (AsciiString)bigHeaderVal); IHttp2Headers headersOut = new DefaultHttp2Headers(); try { hpackEncoder.EncodeHeaders(0, buf, headersIn, NeverSensitiveDetector.Instance); hpackDecoder.SetMaxHeaderListSize(bigHeaderSize + 1024); hpackDecoder.Decode(0, buf, headersOut, false); } finally { buf.Release(); } Assert.Equal(bigHeaderVal, headersOut.Get((AsciiString)bigHeaderName, null).ToString()); }
public void FailedValidationDoesntCorruptHpack() { IByteBuffer in1 = Unpooled.Buffer(200); IByteBuffer in2 = Unpooled.Buffer(200); try { HpackEncoder hpackEncoder = new HpackEncoder(true); IHttp2Headers toEncode = new DefaultHttp2Headers(); toEncode.Add((AsciiString)":method", (AsciiString)"GET"); toEncode.Add((AsciiString)":status", (AsciiString)"200"); toEncode.Add((AsciiString)"foo", (AsciiString)"bar"); hpackEncoder.EncodeHeaders(1, in1, toEncode, NeverSensitiveDetector.Instance); IHttp2Headers decoded = new DefaultHttp2Headers(); var expected = Assert.Throws <StreamException>(() => hpackDecoder.Decode(1, in1, decoded, true)); Assert.Equal(1, expected.StreamId); // Do it again, this time without validation, to make sure the HPACK state is still sane. decoded.Clear(); hpackEncoder.EncodeHeaders(1, in2, toEncode, NeverSensitiveDetector.Instance); hpackDecoder.Decode(1, in2, decoded, false); Assert.Equal(3, decoded.Size); Assert.Equal("GET", decoded.Method); Assert.Equal("200", decoded.Status); Assert.Equal("bar", decoded.Get((AsciiString)"foo", null)); } finally { in1.Release(); in2.Release(); } }