Beispiel #1
0
        public async Task ReadODataResourceAsync()
        {
            // Arrange
            var payload = "{\"Customer\":{\"Id\":1,\"Name\":\"Sue\"}}";

            var stringReader = new StringReader(payload);

            using (var jsonReader = new JsonReader(stringReader, false))
            {
                var bufferingReader = new BufferingJsonReader(jsonReader, "any", MaxInnerErrorDepth);

                // Act
                await bufferingReader.ReadAsync();

                await bufferingReader.ReadStartObjectAsync();

                await bufferingReader.ReadPropertyNameAsync();

                var odataValue = await bufferingReader.ReadODataValueAsync();

                // Assert
                var resourceValue = Assert.IsType <ODataResourceValue>(odataValue);
                Assert.Equal(2, resourceValue.Properties.Count());
                var prop1 = resourceValue.Properties.First();
                var prop2 = resourceValue.Properties.Last();
                Assert.Equal("Id", prop1.Name);
                Assert.Equal(1, prop1.Value);
                Assert.Equal("Name", prop2.Name);
                Assert.Equal("Sue", prop2.Value);
            }
        }
Beispiel #2
0
        public async Task ReadInStreamErrorPropertyAsync_SkipsNonSupportedPropertiesInErrorDetails()
        {
            // Arrange
            var payload = "{\"error\":{" +
                          $"\"code\":\"{ErrorCode}\"," +
                          $"\"message\":\"{ErrorMessage}\"," +
                          $"\"target\":\"{ErrorTarget}\"," +
                          $"\"details\":[{{\"code\":\"{ErrorDetailErrorCode}\",\"message\":\"{ErrorDetailErrorMessage}\",\"target\":null,\"foo\":\"bar\"}}]}}}}";

            var stringReader = new StringReader(payload);

            using (var jsonReader = new JsonReader(stringReader, false))
            {
                var bufferingReader = new BufferingJsonReader(jsonReader, "error", MaxInnerErrorDepth);

                // Act
                var exception = await Assert.ThrowsAsync <ODataErrorException>(
                    () => bufferingReader.ReadAsync());

                // Assert
                var error = exception.Error;
                Assert.NotNull(error);
                Assert.Null(error.InnerError);
                Assert.NotNull(error.Details);
                var errorDetail = Assert.Single(error.Details);
                Assert.Equal(ErrorDetailErrorCode, errorDetail.ErrorCode);
                Assert.Equal(ErrorDetailErrorMessage, errorDetail.Message);
                Assert.Null(errorDetail.Target);
            }
        }
Beispiel #3
0
        public async Task ReadInStreamErrorPropertyAsync_SkipsNonSupportedPropertiesInInnerError()
        {
            // Arrange
            var payload = "{\"error\":{" +
                          $"\"code\":\"{ErrorCode}\"," +
                          $"\"message\":\"{ErrorMessage}\"," +
                          $"\"target\":\"{ErrorTarget}\"," +
                          "\"innererror\":{" +
                          $"\"type\":\"{InnerErrorTypeName}\"," +
                          $"\"message\":\"{InnerErrorMessage}\"," +
                          $"\"stacktrace\":\"{InnerErrorStackTrace}\"," +
                          "\"foo\":\"bar\"}}}";

            var stringReader = new StringReader(payload);

            using (var jsonReader = new JsonReader(stringReader, false))
            {
                var bufferingReader = new BufferingJsonReader(jsonReader, "error", MaxInnerErrorDepth);

                // Act
                var exception = await Assert.ThrowsAsync <ODataErrorException>(
                    () => bufferingReader.ReadAsync());

                // Assert
                var error = exception.Error;
                Assert.NotNull(error);
                var innerError = error.InnerError;
                Assert.NotNull(innerError);
                Assert.Equal(3, innerError.Properties.Count);
                Assert.Single(innerError.Properties.Where(d => d.Key.Equals("message")));
                Assert.Single(innerError.Properties.Where(d => d.Key.Equals("type")));
                Assert.Single(innerError.Properties.Where(d => d.Key.Equals("stacktrace")));
                Assert.Empty(innerError.Properties.Where(d => d.Key.Equals("foo")));
            }
        }
Beispiel #4
0
        public async Task ReadInStreamErrorPropertyAsync_DoesNotThrowExceptionForUnintelligibleError(string payload)
        {
            // Arrange
            var stringReader = new StringReader(payload);

            using (var jsonReader = new JsonReader(stringReader, false))
            {
                var bufferingReader = new BufferingJsonReader(jsonReader, "error", MaxInnerErrorDepth);

                // Act & Assert
                Assert.True(await bufferingReader.ReadAsync());
            }
        }
Beispiel #5
0
        public async Task StartBufferingAndTryToReadInStreamErrorPropertyValueAsync_Works()
        {
            // Arrange
            var payload = "{" +
                          $"\"code\":\"{ErrorCode}\"," +
                          $"\"message\":\"{ErrorMessage}\"," +
                          $"\"target\":\"{ErrorTarget}\"," +
                          "\"innererror\":{" +
                          $"\"type\":\"{InnerErrorTypeName}\"," +
                          $"\"message\":\"{InnerErrorMessage}\"," +
                          $"\"stacktrace\":\"{InnerErrorStackTrace}\"," +
                          $"\"internalexception\":{{}}}}," +
                          $"\"details\":[{{\"code\":\"{ErrorDetailErrorCode}\",\"message\":\"{ErrorDetailErrorMessage}\",\"target\":null}}]}}";

            var stringReader = new StringReader(payload);

            using (var jsonReader = new JsonReader(stringReader, false))
            {
                var bufferingReader = new BufferingJsonReader(jsonReader, "other", MaxInnerErrorDepth);

                // Act
                var result1 = await bufferingReader.ReadAsync();

                var result2 = await bufferingReader.StartBufferingAndTryToReadInStreamErrorPropertyValueAsync();

                // Assert
                Assert.True(result1);
                Assert.True(result2.Item1);

                var error = result2.Item2;
                Assert.NotNull(error);
                Assert.Equal(ErrorCode, error.ErrorCode);
                Assert.Equal(ErrorMessage, error.Message);
                Assert.Equal(ErrorTarget, error.Target);
                var innerError = error.InnerError;
                Assert.NotNull(innerError);
                Assert.Equal(InnerErrorMessage, innerError.Message);
                Assert.Equal(InnerErrorTypeName, innerError.TypeName);
                Assert.Equal(InnerErrorStackTrace.Replace("\\\\", "\\"), innerError.StackTrace);
                Assert.NotNull(innerError.InnerError);
                Assert.NotNull(error.Details);
                var errorDetail = Assert.Single(error.Details);
                Assert.Equal(ErrorDetailErrorCode, errorDetail.ErrorCode);
                Assert.Equal(ErrorDetailErrorMessage, errorDetail.Message);
                Assert.Null(errorDetail.Target);
            }
        }
Beispiel #6
0
        public async Task CanStreamAsync_ForReaderNotInBufferingState(string payload, bool expected)
        {
            var stringReader = new StringReader(string.Format("{{\"Data\":{0}}}", payload));

            using (var jsonReader = new JsonReader(stringReader, false))
            {
                var bufferingReader = new BufferingJsonReader(jsonReader, "any", MaxInnerErrorDepth);

                await bufferingReader.ReadAsync();

                await bufferingReader.ReadStartObjectAsync();

                await bufferingReader.ReadPropertyNameAsync();

                Assert.Equal(expected, await bufferingReader.CanStreamAsync());
            }
        }
Beispiel #7
0
        public async Task ReadInStreamErrorPropertyAsync_ThrowsExceptionForODataErrorRead()
        {
            // Arrange
            var payload = "{\"error\":{" +
                          $"\"code\":\"{ErrorCode}\"," +
                          $"\"message\":\"{ErrorMessage}\"," +
                          $"\"target\":\"{ErrorTarget}\"," +
                          "\"innererror\":{" +
                          $"\"type\":\"{InnerErrorTypeName}\"," +
                          $"\"message\":\"{InnerErrorMessage}\"," +
                          $"\"stacktrace\":\"{InnerErrorStackTrace}\"," +
                          $"\"internalexception\":{{}}}}," +
                          $"\"details\":[{{\"code\":\"{ErrorDetailErrorCode}\",\"message\":\"{ErrorDetailErrorMessage}\",\"target\":null}}]}}}}";

            var stringReader = new StringReader(payload);

            using (var jsonReader = new JsonReader(stringReader, false))
            {
                var bufferingReader = new BufferingJsonReader(jsonReader, "error", MaxInnerErrorDepth);

                // Act
                var exception = await Assert.ThrowsAsync <ODataErrorException>(
                    () => bufferingReader.ReadAsync());

                // Assert
                var error = exception.Error;
                Assert.NotNull(error);
                Assert.Equal(ErrorCode, error.ErrorCode);
                Assert.Equal(ErrorMessage, error.Message);
                Assert.Equal(ErrorTarget, error.Target);
                var innerError = error.InnerError;
                Assert.NotNull(innerError);
                Assert.Equal(InnerErrorMessage, innerError.Message);
                Assert.Equal(InnerErrorTypeName, innerError.TypeName);
                Assert.Equal(InnerErrorStackTrace.Replace("\\\\", "\\"), innerError.StackTrace);
                Assert.NotNull(innerError.InnerError);
                Assert.NotNull(error.Details);
                var errorDetail = Assert.Single(error.Details);
                Assert.Equal(ErrorDetailErrorCode, errorDetail.ErrorCode);
                Assert.Equal(ErrorDetailErrorMessage, errorDetail.Message);
                Assert.Null(errorDetail.Target);
            }
        }