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); } }
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); } }
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"))); } }
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()); } }
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); } }
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()); } }
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); } }