示例#1
0
        public void SerializeError_Error_CanSerialize()
        {
            // Arrange
            var error = new Error(HttpStatusCode.InsufficientStorage)
            {
                Title = "title", Detail = "detail"
            };
            var errorDocument = new ErrorDocument(error);

            var expectedJson = JsonConvert.SerializeObject(new
            {
                errors = new[]
                {
                    new
                    {
                        id     = error.Id,
                        status = "507",
                        title  = "title",
                        detail = "detail"
                    }
                }
            });
            var serializer = GetResponseSerializer <OneToManyPrincipal>();

            // Act
            var result = serializer.Serialize(errorDocument);

            // Assert
            Assert.Equal(expectedJson, result);
        }
        public async Task WriteAsync(OutputFormatterWriteContext context)
        {
            ArgumentGuard.NotNull(context, nameof(context));

            HttpResponse response = context.HttpContext.Response;

            response.ContentType = _serializer.ContentType;

            await using TextWriter writer = context.WriterFactory(response.Body, Encoding.UTF8);
            string responseContent;

            try
            {
                responseContent = SerializeResponse(context.Object, (HttpStatusCode)response.StatusCode);
            }
#pragma warning disable AV1210 // Catch a specific exception instead of Exception, SystemException or ApplicationException
            catch (Exception exception)
#pragma warning restore AV1210 // Catch a specific exception instead of Exception, SystemException or ApplicationException
            {
                ErrorDocument errorDocument = _exceptionHandler.HandleException(exception);
                responseContent = _serializer.Serialize(errorDocument);

                response.StatusCode = (int)errorDocument.GetErrorStatusCode();
            }

            string url = context.HttpContext.Request.GetEncodedUrl();
            _traceWriter.LogMessage(() => $"Sending {response.StatusCode} response for request at '{url}' with body: <<{responseContent}>>");

            await writer.WriteAsync(responseContent);

            await writer.FlushAsync();
        }
 private string SerializeErrorDocument(ErrorDocument errorDocument)
 {
     return(SerializeObject(errorDocument, _options.SerializerSettings, serializer =>
     {
         serializer.ApplyErrorSettings();
     }));
 }
示例#4
0
        public void GetErrors()
        {
            // Arrange
            var fixture         = new Fixture();
            var id1             = fixture.Create <string>();
            var id2             = fixture.Create <string>();
            var applicationName = fixture.Create <string>();

            var error1    = new Error(new Exception("error1"));
            var error2    = new Error(new Exception("error2"));
            var errorXml1 = ErrorXml.EncodeString(error1);
            var errorXml2 = ErrorXml.EncodeString(error2);
            var errorDoc1 = new ErrorDocument {
                ErrorXml = errorXml1
            };
            var errorDoc2 = new ErrorDocument {
                ErrorXml = errorXml2
            };


            var queryResponse = new Mock <ISearchResponse <ErrorDocument> >();

            queryResponse.Setup(x => x.Total).Returns(2);
            queryResponse.Setup(x => x.Hits).Returns(() =>
            {
                var mockHit1 = new Mock <IHit <ErrorDocument> >();
                mockHit1.Setup(x => x.Id).Returns(id1);
                mockHit1.Setup(x => x.Source).Returns(errorDoc1);

                var mockHit2 = new Mock <IHit <ErrorDocument> >();
                mockHit2.Setup(x => x.Id).Returns(id2);
                mockHit2.Setup(x => x.Source).Returns(errorDoc2);

                return(new[]
                {
                    mockHit1.Object,
                    mockHit2.Object
                });
            });
            queryResponse.Setup(x => x.IsValid).Returns(true);

            _elasticClientMock
            .Setup(x => x.Search(It.IsAny <Func <SearchDescriptor <ErrorDocument>, ISearchRequest> >()))
            .Returns(queryResponse.Object);

            var errorLog = new ElasticSearchErrorLog(_elasticClientMock.Object, new Hashtable())
            {
                ApplicationName = applicationName
            };

            // Act
            var result = new ArrayList();
            var count  = errorLog.GetErrors(0, int.MaxValue, result);

            // Assert
            Assert.That(count, Is.EqualTo(2));
            Assert.That(result.Count, Is.EqualTo(2));
        }
        protected IActionResult Error(IEnumerable <Error> errors)
        {
            var document = new ErrorDocument(errors);

            return(new ObjectResult(document)
            {
                StatusCode = (int)document.GetErrorStatusCode()
            });
        }
示例#6
0
        // @formatter:wrap_array_initializer_style restore
        public void ErrorDocument_GetErrorStatusCode_IsCorrect(HttpStatusCode[] errorCodes, HttpStatusCode expected)
        {
            // Arrange
            var document = new ErrorDocument(errorCodes.Select(code => new Error(code)));

            // Act
            var status = document.GetErrorStatusCode();

            // Assert
            status.Should().Be(expected);
        }
        public void CanGetErrors()
        {
            // Arrange
            var fixture = new Fixture();
            var id1 = fixture.Create<string>();
            var id2 = fixture.Create<string>();
            var applicationName = fixture.Create<string>();

            var error1 = new Error(new Exception("error1"));
            var error2 = new Error(new Exception("error2"));
            var errorXml1 = ErrorXml.EncodeString(error1);
            var errorXml2 = ErrorXml.EncodeString(error2);
            var errorDoc1 = new ErrorDocument {ErrorXml = errorXml1};
            var errorDoc2 = new ErrorDocument {ErrorXml = errorXml2};

            
            var queryResponse = new Mock<ISearchResponse<ErrorDocument>>();

            queryResponse.Setup(x => x.Total).Returns(2);
            queryResponse.Setup(x => x.Hits).Returns(() =>
            {
                var mockHit1 = new Mock<IHit<ErrorDocument>>();
                mockHit1.Setup(x => x.Id).Returns(id1);
                mockHit1.Setup(x => x.Source).Returns(errorDoc1);

                var mockHit2 = new Mock<IHit<ErrorDocument>>();
                mockHit2.Setup(x => x.Id).Returns(id2);
                mockHit2.Setup(x => x.Source).Returns(errorDoc2);

                return new[]
                {
                    mockHit1.Object,
                    mockHit2.Object
                };
            });
            queryResponse.Setup(x => x.IsValid).Returns(true);

            _elasticClientMock
                .Setup(x => x.Search(It.IsAny<Func<SearchDescriptor<ErrorDocument>, SearchDescriptor<ErrorDocument>>>()))
                .Returns(queryResponse.Object);

            var errorLog = new ElasticSearchErrorLog(_elasticClientMock.Object, new Hashtable())
            {
                ApplicationName = applicationName
            };

            // Act
            var result = new ArrayList();
            var count = errorLog.GetErrors(0, int.MaxValue, result);

            // Assert
            Assert.That(count, Is.EqualTo(2));
            Assert.That(result.Count, Is.EqualTo(2));
        }
        protected IActionResult Error(IEnumerable <Error> errors)
        {
            ArgumentGuard.NotNull(errors, nameof(errors));

            var document = new ErrorDocument(errors);

            return(new ObjectResult(document)
            {
                StatusCode = (int)document.GetErrorStatusCode()
            });
        }
示例#9
0
        private static object WrapErrors(object contextObject)
        {
            if (contextObject is IEnumerable <Error> errors)
            {
                contextObject = new ErrorDocument(errors);
            }

            if (contextObject is Error error)
            {
                contextObject = new ErrorDocument(error);
            }

            return(contextObject);
        }
        protected IActionResult Error(IEnumerable <Error> errors)
        {
            if (errors == null)
            {
                throw new ArgumentNullException(nameof(errors));
            }

            var document = new ErrorDocument(errors);

            return(new ObjectResult(document)
            {
                StatusCode = (int)document.GetErrorStatusCode()
            });
        }
示例#11
0
        /// <inheritdoc />
        public Task OnExceptionAsync(ExceptionContext context)
        {
            ArgumentGuard.NotNull(context, nameof(context));

            if (context.HttpContext.IsJsonApiRequest())
            {
                ErrorDocument errorDocument = _exceptionHandler.HandleException(context.Exception);

                context.Result = new ObjectResult(errorDocument)
                {
                    StatusCode = (int)errorDocument.GetErrorStatusCode()
                };
            }

            return(Task.CompletedTask);
        }
        public void CanGetErrors()
        {
            // Arrange
            var fixture         = new Fixture();
            var id1             = fixture.Create <string>();
            var id2             = fixture.Create <string>();
            var applicationName = fixture.Create <string>();

            var error1    = new Error(new HttpException());
            var error2    = new Error(new HttpException());
            var errorXml1 = ErrorXml.EncodeString(error1);
            var errorXml2 = ErrorXml.EncodeString(error2);
            var errorDoc1 = new ErrorDocument {
                ErrorXml = errorXml1, Id = id1
            };
            var errorDoc2 = new ErrorDocument {
                ErrorXml = errorXml2, Id = id2
            };

            var elasticClientMock = new Mock <IElasticClient>();
            var queryResponse     = new Mock <IQueryResponse <ErrorDocument> >();

            queryResponse.Setup(x => x.Total).Returns(2);
            queryResponse.Setup(x => x.Documents).Returns(new[] { errorDoc1, errorDoc2 });

            elasticClientMock
            .Setup(x => x.Search(It.IsAny <Func <SearchDescriptor <ErrorDocument>, SearchDescriptor <ErrorDocument> > >()))
            .Returns(queryResponse.Object);

            var errorLog = new ElasticSearchErrorLog(elasticClientMock.Object)
            {
                ApplicationName = applicationName,
            };

            // Act
            var result = new ArrayList();
            var count  = errorLog.GetErrors(0, int.MaxValue, result);

            // Assert
            Assert.That(count, Is.EqualTo(2));
            Assert.That(result.Count, Is.EqualTo(2));
        }
        public async Task Serialize_ErrorDocument()
        {
            var error1 = new Mock <IError>(MockBehavior.Strict);
            var error2 = new Mock <IError>(MockBehavior.Strict);

            var mockErrorFormatter = new Mock <IErrorFormatter>(MockBehavior.Strict);

            mockErrorFormatter.Setup(s => s.Serialize(error1.Object, It.IsAny <JsonWriter>()))
            .Returns((IError error, JsonWriter writer) =>
            {
                writer.WriteValue("first error would go here");
                return(Task.FromResult(0));
            });
            mockErrorFormatter.Setup(s => s.Serialize(error2.Object, It.IsAny <JsonWriter>()))
            .Returns((IError error, JsonWriter writer) =>
            {
                writer.WriteValue("second error would go here");
                return(Task.FromResult(0));
            });

            var mockMetadata          = new Mock <IMetadata>(MockBehavior.Strict);
            var mockMetadataFormatter = new Mock <IMetadataFormatter>(MockBehavior.Strict);

            mockMetadataFormatter.Setup(s => s.Serialize(mockMetadata.Object, It.IsAny <JsonWriter>()))
            .Returns((IMetadata metadata, JsonWriter writer) =>
            {
                writer.WriteValue("metadata goes here");
                return(Task.FromResult(0));
            });

            IErrorDocument document = new ErrorDocument(new[] { error1.Object, error2.Object }, mockMetadata.Object);

            var formatter = new ErrorDocumentFormatter(mockErrorFormatter.Object, mockMetadataFormatter.Object);

            await AssertSerializeOutput(formatter, document, "Json/Fixtures/ErrorDocumentFormatter/Serialize_ErrorDocument.json");
        }
示例#14
0
        public override string Log(Error error)
        {
            if (error == null)
            {
                throw new ArgumentNullException("error");
            }

            var errorDoc = new ErrorDocument
            {
                Error = error
            };

            using (var session = _documentStore.OpenSession(ApplicationName))
            {
                session.Store(errorDoc);
                session.SaveChanges();
            }

            return errorDoc.Id;
        }