Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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());
        }
Ejemplo n.º 5
0
        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();
            }
        }