コード例 #1
0
        public void GetNameValueLength_DifferentScenariosWithParameters_AllReturnNonZero()
        {
            NameValueWithParametersHeaderValue result = null;

            CallGetNameValueWithParametersLength(" name = value ; param1 = value1 ,", 1, 31, out result);
            Assert.Equal("name", result.Name);
            Assert.Equal("value", result.Value);
            Assert.Equal(1, result.Parameters.Count);
            Assert.Equal("param1", result.Parameters.First().Name);
            Assert.Equal("value1", result.Parameters.First().Value);

            CallGetNameValueWithParametersLength(" name=value;param1=value1;param2=value2,next", 1, 38, out result);
            Assert.Equal("name", result.Name);
            Assert.Equal("value", result.Value);
            Assert.Equal(2, result.Parameters.Count);
            Assert.Equal("param1", result.Parameters.ElementAt(0).Name);
            Assert.Equal("value1", result.Parameters.ElementAt(0).Value);
            Assert.Equal("param2", result.Parameters.ElementAt(1).Name);
            Assert.Equal("value2", result.Parameters.ElementAt(1).Value);

            CallGetNameValueWithParametersLength(" name= value ;   param1 , next", 1, 23, out result);
            Assert.Equal("name", result.Name);
            Assert.Equal("value", result.Value);
            Assert.Equal(1, result.Parameters.Count);
            Assert.Equal("param1", result.Parameters.First().Name);
            Assert.Null(result.Parameters.First().Value);

            CallGetNameValueWithParametersLength(" name ;   param1 , next", 1, 16, out result);
            Assert.Equal("name", result.Name);
            Assert.Null(result.Value);
            Assert.Equal(1, result.Parameters.Count);
            Assert.Equal("param1", result.Parameters.First().Name);
            Assert.Null(result.Parameters.First().Value);
        }
コード例 #2
0
        public void GetNameValueLength_DifferentScenariosWithNoParameters_AllReturnNonZero()
        {
            NameValueWithParametersHeaderValue result = null;

            CallGetNameValueWithParametersLength("name=value", 0, 10, out result);
            Assert.Equal("name", result.Name);
            Assert.Equal("value", result.Value);

            CallGetNameValueWithParametersLength(" name=value", 1, 10, out result);
            Assert.Equal("name", result.Name);
            Assert.Equal("value", result.Value);

            CallGetNameValueWithParametersLength(" name", 1, 4, out result);
            Assert.Equal("name", result.Name);
            Assert.Null(result.Value);

            CallGetNameValueWithParametersLength("name=\"quoted str\"", 0, 17, out result);
            Assert.Equal("name", result.Name);
            Assert.Equal("\"quoted str\"", result.Value);

            CallGetNameValueWithParametersLength(" name=\"quoted str\"", 1, 17, out result);
            Assert.Equal("name", result.Name);
            Assert.Equal("\"quoted str\"", result.Value);

            CallGetNameValueWithParametersLength("name\t =va1ue\"", 0, 12, out result);
            Assert.Equal("name", result.Name);
            Assert.Equal("va1ue", result.Value);

            CallGetNameValueWithParametersLength(" name  ", 1, 6, out result);
            Assert.Equal("name", result.Name);
            Assert.Null(result.Value);
        }
コード例 #3
0
        public void TryParse_Invalid()
        {
            NameValueWithParametersHeaderValue res;

            Assert.IsFalse(NameValueWithParametersHeaderValue.TryParse("", out res), "#1");
            Assert.IsNull(res, "#2");
        }
コード例 #4
0
        private void CheckValidTryParse(string input, NameValueWithParametersHeaderValue expectedResult)
        {
            NameValueWithParametersHeaderValue result = null;

            Assert.True(NameValueWithParametersHeaderValue.TryParse(input, out result));
            Assert.Equal(expectedResult, result);
        }
コード例 #5
0
        private void CheckInvalidParse(string input)
        {
            Assert.Throws <FormatException>(() => { NameValueWithParametersHeaderValue.Parse(input); });

            Assert.False(NameValueWithParametersHeaderValue.TryParse(input, out NameValueWithParametersHeaderValue result));
            Assert.Null(result);
        }
コード例 #6
0
        private void CheckInvalidTryParse(string input)
        {
            NameValueWithParametersHeaderValue result = null;

            Assert.False(NameValueWithParametersHeaderValue.TryParse(input, out result));
            Assert.Null(result);
        }
コード例 #7
0
        public void TryParse_SetOfValidValueStrings_ParsedCorrectly()
        {
            NameValueWithParametersHeaderValue expected = new NameValueWithParametersHeaderValue("custom");

            CheckValidParsedValue("\r\n custom  ", 0, expected, 11);
            CheckValidParsedValue("custom", 0, expected, 6);
            CheckValidParsedValue(",, ,\r\n custom  , chunked", 0, expected, 17);

            // Note that even if the whole string is invalid, the first "Expect" value is valid. When the parser
            // gets called again using the result-index (9), then it fails: I.e. we have 1 valid "Expect" value
            // and an invalid one.
            CheckValidParsedValue("custom , 会", 0, expected, 9);

            // We don't have to test all possible input strings, since most of the pieces are handled by other parsers.
            // The purpose of this test is to verify that these other parsers are combined correctly to build a
            // transfer-coding parser.
            expected.Parameters.Add(new NameValueHeaderValue("name", "value"));
            CheckValidParsedValue("\r\n custom ;  name =   value ", 0, expected, 28);
            CheckValidParsedValue("  custom;name=value", 2, expected, 19);
            CheckValidParsedValue("  custom ; name=value", 2, expected, 21);

            CheckValidParsedValue(null, 0, null, 0);
            CheckValidParsedValue(string.Empty, 0, null, 0);
            CheckValidParsedValue("  ", 0, null, 2);
            CheckValidParsedValue("  ,,", 0, null, 4);
        }
コード例 #8
0
        public void WhenExpectIsCalledThenRequestExpectIsSet()
        {
            var expect = new NameValueWithParametersHeaderValue("Foo", "bar");

            _builder.Expect(expect);
            Assert.AreEqual(expect, _request.Headers.Expect.First());
        }
コード例 #9
0
        public void TryParse()
        {
            NameValueWithParametersHeaderValue res;

            Assert.IsTrue(NameValueWithParametersHeaderValue.TryParse("a", out res), "#1");
            Assert.AreEqual("a", res.Name, "#2");
            Assert.IsNull(res.Value, "#3");
        }
コード例 #10
0
        private static void CheckInvalidGetNameValueWithParametersLength(string input, int startIndex)
        {
            object result = null;

            Assert.Equal(0, NameValueWithParametersHeaderValue.GetNameValueWithParametersLength(input, startIndex,
                                                                                                out result));
            Assert.Null(result);
        }
コード例 #11
0
        private static void CallGetNameValueWithParametersLength(string input, int startIndex, int expectedLength,
                                                                 out NameValueWithParametersHeaderValue result)
        {
            object temp = null;

            Assert.Equal(expectedLength, NameValueWithParametersHeaderValue.GetNameValueWithParametersLength(input,
                                                                                                             startIndex, out temp));
            result = temp as NameValueWithParametersHeaderValue;
        }
コード例 #12
0
        public void Properties_Invalid()
        {
            var value = new NameValueWithParametersHeaderValue("s");

            try {
                value.Value = "   ";
                Assert.Fail("#1");
            } catch (FormatException) {
            }
        }
コード例 #13
0
        public void ToString_WithAndWithoutParameters_SerializedCorrectly()
        {
            NameValueWithParametersHeaderValue nameValue = new NameValueWithParametersHeaderValue("text", "token");

            Assert.Equal("text=token", nameValue.ToString());

            nameValue.Parameters.Add(new NameValueHeaderValue("param1", "value1"));
            nameValue.Parameters.Add(new NameValueHeaderValue("param2", "value2"));
            Assert.Equal("text=token; param1=value1; param2=value2", nameValue.ToString());
        }
コード例 #14
0
        private void CheckValidParsedValue(string input, int startIndex,
                                           NameValueWithParametersHeaderValue expectedResult, int expectedIndex)
        {
            HttpHeaderParser parser = GenericHeaderParser.MultipleValueNameValueWithParametersParser;
            object           result = null;

            Assert.True(parser.TryParseValue(input, null, ref startIndex, out result),
                        string.Format("TryParse returned false. Input: '{0}', Index: {1}", input, startIndex));
            Assert.Equal(expectedIndex, startIndex);
            Assert.Equal(result, expectedResult);
        }
コード例 #15
0
        public void Parse_ValidValue_ReturnsNameValueWithParametersHeaderValue()
        {
            // This test verifies that Parse() correctly calls TryParse().
            HttpHeaderParser parser = GenericHeaderParser.MultipleValueNameValueWithParametersParser;
            int index = 2;

            NameValueWithParametersHeaderValue expected = new NameValueWithParametersHeaderValue("custom");

            expected.Parameters.Add(new NameValueHeaderValue("name", "value"));
            Assert.True(expected.Equals(parser.ParseValue("   custom ; name = value ", null, ref index)));
            Assert.Equal(25, index);
        }
コード例 #16
0
        public void Clone_Call_CloneFieldsMatchSourceFields()
        {
            NameValueWithParametersHeaderValue source = new NameValueWithParametersHeaderValue("name", "value");

            source.Parameters.Add(new NameValueHeaderValue("param1", "value1"));
            NameValueWithParametersHeaderValue clone = (NameValueWithParametersHeaderValue)((ICloneable)source).Clone();

            Assert.Equal(source.Name, clone.Name);
            Assert.Equal(source.Value, clone.Value);
            Assert.Equal(1, clone.Parameters.Count);
            Assert.Equal("param1", clone.Parameters.First().Name);
            Assert.Equal("value1", clone.Parameters.First().Value);
        }
コード例 #17
0
        public void Ctor_CallBaseCtor_Success()
        {
            // Just make sure the base ctor gets called correctly. Validation of input parameters is done in the base
            // class.
            NameValueWithParametersHeaderValue nameValue = new NameValueWithParametersHeaderValue("name");

            Assert.Equal("name", nameValue.Name);
            Assert.Null(nameValue.Value);

            nameValue = new NameValueWithParametersHeaderValue("name", "value");
            Assert.Equal("name", nameValue.Name);
            Assert.Equal("value", nameValue.Value);
        }
コード例 #18
0
        public void Properties()
        {
            var value = new NameValueWithParametersHeaderValue("s", "p");

            Assert.AreEqual("s", value.Name, "#1");
            Assert.AreEqual("p", value.Value, "#2");

            value = new NameValueWithParametersHeaderValue("s");
            Assert.AreEqual("s", value.Name, "#3");
            Assert.IsNull(value.Value, "#4");

            value.Value = "bb";
            Assert.AreEqual("bb", value.Value, "#5");
        }
コード例 #19
0
        public void GetHashCode_ValuesUseDifferentValues_HashDiffersAccordingToRfc()
        {
            NameValueWithParametersHeaderValue nameValue1 = new NameValueWithParametersHeaderValue("text");
            NameValueWithParametersHeaderValue nameValue2 = new NameValueWithParametersHeaderValue("text");

            // NameValueWithParametersHeaderValue just calls methods of the base class. Just verify Parameters is used.
            Assert.Equal(nameValue1.GetHashCode(), nameValue2.GetHashCode());

            nameValue1.Parameters.Add(new NameValueHeaderValue("param1", "value1"));
            nameValue2.Value = null;
            Assert.NotEqual(nameValue1.GetHashCode(), nameValue2.GetHashCode());

            nameValue2.Parameters.Add(new NameValueHeaderValue("param1", "value1"));
            Assert.Equal(nameValue1.GetHashCode(), nameValue2.GetHashCode());
        }
コード例 #20
0
        public void TryParse_SetOfValidValueStrings_ParsedCorrectly()
        {
            NameValueWithParametersHeaderValue expected = new NameValueWithParametersHeaderValue("custom");

            CheckValidTryParse("\r\n custom  ", expected);
            CheckValidTryParse("custom", expected);

            // We don't have to test all possible input strings, since most of the pieces are handled by other parsers.
            // The purpose of this test is to verify that these other parsers are combined correctly to build a
            // transfer-coding parser.
            expected.Parameters.Add(new NameValueHeaderValue("name", "value"));
            CheckValidTryParse("\r\n custom ;  name =   value ", expected);
            CheckValidTryParse("  custom;name=value", expected);
            CheckValidTryParse("  custom ; name=value", expected);
        }
コード例 #21
0
        public void Parse()
        {
            var res = NameValueWithParametersHeaderValue.Parse("c");

            Assert.AreEqual("c", res.Name, "#1");
            Assert.AreEqual("c", res.ToString(), "#1b");
            Assert.IsNull(res.Value, "#2");

            res = NameValueWithParametersHeaderValue.Parse("a=2 ; b = 555");
            Assert.AreEqual("a", res.Name, "#3");
            Assert.AreEqual("a=2; b=555", res.ToString(), "#3b");
            Assert.AreEqual("2", res.Value, "#4");
            Assert.AreEqual("b", res.Parameters.First().Name, "#5");
            Assert.AreEqual(1, res.Parameters.Count, "#6");
        }
        private static void SetDeflateNegotiationResponse(HttpContext context, WebSocketDeflateCompressionProvider deflateCompressionProvider)
        {
            NameValueWithParametersHeaderValue secWebSocketExtensionsHeaderValue = new NameValueWithParametersHeaderValue(WEBSOCKET_PERMESSAGE_DEFLATE_EXTENSION);

            if (deflateCompressionProvider.ClientNoContextTakeover)
            {
                secWebSocketExtensionsHeaderValue.Parameters.Add(new NameValueHeaderValue(WebSocketDeflateCompressionOptions.CLIENT_NO_CONTEXT_TAKEOVER_OPTION));
            }

            if (deflateCompressionProvider.ServerNoContextTakeover)
            {
                secWebSocketExtensionsHeaderValue.Parameters.Add(new NameValueHeaderValue(WebSocketDeflateCompressionOptions.SERVER_NO_CONTEXT_TAKEOVER_OPTION));
            }

            context.Response.Headers[HeaderNames.SecWebSocketExtensions] = secWebSocketExtensionsHeaderValue.ToString();
        }
コード例 #23
0
        public void Equals_ValuesUseDifferentValues_ValuesAreEqualOrDifferentAccordingToRfc()
        {
            NameValueWithParametersHeaderValue nameValue1 = new NameValueWithParametersHeaderValue("text", "value");
            NameValueWithParametersHeaderValue nameValue2 = new NameValueWithParametersHeaderValue("text", "value");
            NameValueHeaderValue nameValue3 = new NameValueHeaderValue("text", "value");

            // NameValueWithParametersHeaderValue just calls methods of the base class. Just verify Parameters is used.
            Assert.True(nameValue1.Equals(nameValue2), "No parameters.");
            Assert.False(nameValue1.Equals(null), "Compare to null.");
            Assert.False(nameValue1.Equals(nameValue3), "Compare to base class instance.");

            nameValue1.Parameters.Add(new NameValueHeaderValue("param1", "value1"));
            Assert.False(nameValue1.Equals(nameValue2), "none vs. 1 parameter.");

            nameValue2.Parameters.Add(new NameValueHeaderValue("param1", "value1"));
            Assert.True(nameValue1.Equals(nameValue2), "1 parameter vs. 1 parameter.");
        }
        private static WebSocketDeflateCompressionOptions GetDeflateNegotiationOffer(HttpContext context)
        {
            WebSocketDeflateCompressionOptions compressionOptions = null;

            foreach (string headerValue in context.Request.Headers.GetCommaSeparatedValues(HeaderNames.SecWebSocketExtensions))
            {
                NameValueWithParametersHeaderValue parsedHeaderValue;
                if (NameValueWithParametersHeaderValue.TryParse(headerValue, out parsedHeaderValue) && parsedHeaderValue.Name == WEBSOCKET_PERMESSAGE_DEFLATE_EXTENSION)
                {
                    compressionOptions = WebSocketDeflateCompressionOptions.FromHeaderValue(parsedHeaderValue);

                    break;
                }
            }

            return(compressionOptions);
        }
コード例 #25
0
        public void Equals()
        {
            var value = new NameValueWithParametersHeaderValue("ab");

            Assert.AreEqual(value, new NameValueWithParametersHeaderValue("ab"), "#1");
            Assert.AreEqual(value, new NameValueWithParametersHeaderValue("AB"), "#2");
            Assert.AreNotEqual(value, new NameValueWithParametersHeaderValue("AA"), "#3");

            var second = new NameValueWithParametersHeaderValue("AB");

            second.Parameters.Add(new NameValueHeaderValue("pv"));

            Assert.AreNotEqual(value, second, "#4");

            value.Parameters.Add(new NameValueHeaderValue("pv"));
            Assert.AreEqual(value, second, "#5");
        }
コード例 #26
0
        private void CheckValidParse(string input, NameValueWithParametersHeaderValue expectedResult)
        {
            NameValueWithParametersHeaderValue result = NameValueWithParametersHeaderValue.Parse(input);

            Assert.Equal(expectedResult, result);

            Assert.True(NameValueWithParametersHeaderValue.TryParse(input, out result));
            Assert.Equal(expectedResult, result);

            // New lines are never allowed
            for (int i = 0; i < input.Length; i++)
            {
                CheckInvalidParse(input.Insert(i, "\r"));
                CheckInvalidParse(input.Insert(i, "\n"));
                CheckInvalidParse(input.Insert(i, "\r\n"));
                CheckInvalidParse(input.Insert(i, "\r\n "));
            }
        }
コード例 #27
0
        public void Parse_Invalid()
        {
            try {
                NameValueWithParametersHeaderValue.Parse(null);
                Assert.Fail("#1");
            } catch (FormatException) {
            }

            try {
                NameValueWithParametersHeaderValue.Parse("  ");
                Assert.Fail("#2");
            } catch (FormatException) {
            }

            try {
                NameValueWithParametersHeaderValue.Parse("a=1;");
                Assert.Fail("#3");
            } catch (FormatException) {
            }
        }
        /// <summary>
        /// Creates new instance of <see cref="WebSocketDeflateCompressionOptions"/> from header value.
        /// </summary>
        /// <param name="headerValue">The header value.</param>
        /// <returns>New instance of <see cref="WebSocketDeflateCompressionOptions"/>.</returns>
        public static WebSocketDeflateCompressionOptions FromHeaderValue(NameValueWithParametersHeaderValue headerValue)
        {
            WebSocketDeflateCompressionOptions compressionOptions = new WebSocketDeflateCompressionOptions();

            foreach (NameValueHeaderValue parameterValue in headerValue.Parameters)
            {
                switch (parameterValue.Name.ToLowerInvariant())
                {
                case SERVER_NO_CONTEXT_TAKEOVER_OPTION:
                    compressionOptions = SetAndEnsureServerNoContextTakeover(compressionOptions);
                    break;

                case CLIENT_NO_CONTEXT_TAKEOVER_OPTION:
                    compressionOptions = SetAndEnsureClientNoContextTakeover(compressionOptions);
                    break;

                case SERVER_MAX_WINDOW_BITS_OPTION:
                    compressionOptions = SetAndEnsureServerMaxWindowBits(compressionOptions, parameterValue.Value);
                    break;

                case CLIENT_MAX_WINDOW_BITS_OPTION:
                    compressionOptions = SetAndEnsureClientMaxWindowBits(compressionOptions, parameterValue.Value);
                    break;

                default:
                    compressionOptions = null;
                    break;
                }

                if (compressionOptions == null)
                {
                    break;
                }
            }

            return(compressionOptions);
        }
コード例 #29
0
        public void Parameters_AddNull_Throw()
        {
            NameValueWithParametersHeaderValue nameValue = new NameValueWithParametersHeaderValue("name");

            Assert.Throws <ArgumentNullException>(() => { nameValue.Parameters.Add(null); });
        }
コード例 #30
0
 private void CheckInvalidParse(string input)
 {
     Assert.Throws <FormatException>(() => { NameValueWithParametersHeaderValue.Parse(input); });
 }