Esempio n. 1
0
        public static void AssertTrailerStatus(this HttpResponseMessage response, StatusCode statusCode, string details)
        {
            HttpResponseHeaders statusHeadersCollection;
            var statusString = GetStatusValue(response.TrailingHeaders, GrpcProtocolConstants.StatusTrailer);

            if (statusString != null)
            {
                statusHeadersCollection = response.TrailingHeaders;
            }
            else
            {
                statusString            = GetStatusValue(response.Headers, GrpcProtocolConstants.StatusTrailer);
                statusHeadersCollection = response.Headers;
                if (statusString == null)
                {
                    Assert.Fail($"Could not get {GrpcProtocolConstants.StatusTrailer} from response.");
                }
            }

            // Get message from the same collection as the status
            var messageString = GetStatusValue(statusHeadersCollection, GrpcProtocolConstants.MessageTrailer);

            Assert.AreEqual(statusCode.ToTrailerString(), statusString, $"Expected grpc-status {statusCode} but got {(StatusCode)Convert.ToInt32(statusString, CultureInfo.InvariantCulture)}. Message: {messageString}");

            if (messageString != null)
            {
                Assert.AreEqual(PercentEncodingHelpers.PercentEncode(details), messageString);
            }
            else
            {
                Assert.IsTrue(string.IsNullOrEmpty(details));
            }
        }
Esempio n. 2
0
        public void AssertTrailerStatus(StatusCode statusCode, string details)
        {
            var trailerValueString = TrailersContainer.Trailers[GrpcProtocolConstants.StatusTrailer].ToString();

            Assert.AreEqual(statusCode.ToTrailerString(), trailerValueString, $"Expected grpc-status {statusCode} but got {(StatusCode)Convert.ToInt32(trailerValueString)}");
            Assert.AreEqual(PercentEncodingHelpers.PercentEncode(details), TrailersContainer.Trailers[GrpcProtocolConstants.MessageTrailer].ToString());
        }
Esempio n. 3
0
        public void PercentEncode_UnmatchedHighSurrogate_ReplacementCharacter()
        {
            // Arrange & Act
            var escaped = PercentEncodingHelpers.PercentEncode("unmatchedHighSurrogate " + ((char)0xD801));

            // Assert
            Assert.AreEqual("unmatchedHighSurrogate %EF%BF%BD", escaped);
        }
Esempio n. 4
0
        public void PercentEncode_UnmatchedHighSurrogatesFollowedByAscii_AsciiNotEncoded()
        {
            // Arrange & Act
            var escaped = PercentEncodingHelpers.PercentEncode("unmatchedHighSurrogate " + ((char)0xD801) + ((char)0xD801) + "a");

            // Assert
            Assert.AreEqual("unmatchedHighSurrogate %EF%BF%BD%EF%BF%BDa", escaped);
        }
Esempio n. 5
0
        public void EncodeMessageTrailer(string value, string expectedEncodedValue)
        {
            // Arrange & Act
            var encodedValue = PercentEncodingHelpers.PercentEncode(value);

            // Assert
            Assert.AreEqual(expectedEncodedValue, encodedValue);
        }
Esempio n. 6
0
        public void ShiftInChar_Roundtrip_Success()
        {
            // Arrange & Act
            var encodedValue = PercentEncodingHelpers.PercentEncode("\x0f");
            var decodedValue = Uri.UnescapeDataString("%0F");

            // Assert
            Assert.AreEqual("%0F", encodedValue);
            Assert.AreEqual("\x0f", decodedValue);
        }
Esempio n. 7
0
        public void PercentEncode_LargeUnicodeString_OverflowErrorThrown()
        {
            // Arrange
            var originalText = new string('元', int.MaxValue / 8);

            // Act
            var ex = Assert.Throws <InvalidOperationException>(() => PercentEncodingHelpers.PercentEncode(originalText)) !;

            // Assert
            Assert.AreEqual("Value is too large to encode.", ex.Message);
        }
Esempio n. 8
0
        public void PercentEncode_TrailingHighSurrogate_SurrogatePairCorrectlyEncoded()
        {
            // Arrange
            var originalText = "unmatchedLowSurrogate " + new string('£', PercentEncodingHelpers.MaxUnicodeCharsReallocate - 2) + "😀";

            // Act
            var escaped = PercentEncodingHelpers.PercentEncode(originalText);

            // Assert
            Assert.IsTrue(escaped.EndsWith("%F0%9F%98%80"), escaped);
            Assert.AreEqual(originalText, Uri.UnescapeDataString(escaped));
        }
        public static void AssertTrailerStatus(this HttpResponseMessage response, StatusCode statusCode, string details)
        {
            var trailerValueString = response.TrailingHeaders.GetValues(GrpcProtocolConstants.StatusTrailer).Single();

            Assert.AreEqual(statusCode.ToTrailerString(), trailerValueString, $"Expected grpc-status {statusCode} but got {(StatusCode)Convert.ToInt32(trailerValueString)}");

            if (response.TrailingHeaders.TryGetValues(GrpcProtocolConstants.MessageTrailer, out var values))
            {
                Assert.AreEqual(PercentEncodingHelpers.PercentEncode(details), values.Single());
            }
            else
            {
                Assert.IsTrue(string.IsNullOrEmpty(details));
            }
        }
Esempio n. 10
0
        public void ConsolidateTrailers_AppendsStatus_PercentEncodesMessage()
        {
            // Arrange
            var errorMessage = "\t\ntest with whitespace\r\nand Unicode BMP ☺ and non-BMP 😈\t\n";
            var httpContext  = new DefaultHttpContext();

            httpContext.Features.Set <IHttpResponseTrailersFeature>(new TestHttpResponseTrailersFeature());
            var serverCallContext = CreateServerCallContext(httpContext);

            serverCallContext.Status = new Status(StatusCode.Internal, errorMessage);

            // Act
            httpContext.Response.ConsolidateTrailers(serverCallContext);

            // Assert
            var responseTrailers = httpContext.Features.Get <IHttpResponseTrailersFeature>().Trailers;

            Assert.AreEqual(2, responseTrailers.Count);
            Assert.AreEqual(StatusCode.Internal.ToString("D"), responseTrailers[GrpcProtocolConstants.StatusTrailer]);
            Assert.AreEqual(PercentEncodingHelpers.PercentEncode(errorMessage), responseTrailers[GrpcProtocolConstants.MessageTrailer].ToString());
        }