예제 #1
0
        public void It_should_write_faults_when_operation_is_kind_of_soap()
        {
            var operation = new RemoraOperation
                                {
                                    Kind = RemoraOperationKind.Soap,
                                    Exception = new InvalidConfigurationException("themessage")
                                };

            using (var stream = new MemoryStream())
            {
                var response = _mocks.Stub<IUniversalResponse>();
                SetupResult.For(response.OutputStream).Return(stream);
                _mocks.Replay(response);
                var formatter = new ExceptionFormatter();

                formatter.WriteException(operation, response);

                Assert.That(response.ContentType, Is.EqualTo("text/xml"));
                Assert.That(response.StatusCode, Is.EqualTo((int) HttpStatusCode.OK));
                Assert.That(response.ContentEncoding, Is.EqualTo(Encoding.UTF8));

                stream.Position = 0;
                var body = Encoding.UTF8.GetString(stream.ReadFully(0));

                Assert.That(body, Contains.Substring("InvalidConfiguration"));
                Assert.That(body, Contains.Substring("themessage"));

                using (var reader = new StringReader(body))
                {
                    Assert.That(() => XDocument.Load(reader), Throws.Nothing);
                }
            }
        }
예제 #2
0
        public void It_should_validate_arguments()
        {
            var formatter = new ExceptionFormatter();

            Assert.That(() => formatter.WriteException(null, null),
                        Throws.Exception.TypeOf<ArgumentNullException>()
                            .With.Message.Contains("operation")
                );

            Assert.That(() => formatter.WriteException(new RemoraOperation(), null),
                        Throws.Exception.TypeOf<ArgumentNullException>()
                            .With.Message.Contains("response")
                );
        }
예제 #3
0
        public void It_should_write_html_errors_when_unknown()
        {
            var operation = new RemoraOperation
                                {
                                    Kind = RemoraOperationKind.Unknown,
                                    Exception = new InvalidConfigurationException("themessage")
                                };

            using (var stream = new MemoryStream())
            {
                var response = _mocks.Stub<IUniversalResponse>();
                SetupResult.For(response.OutputStream).Return(stream);
                _mocks.Replay(response);
                var formatter = new ExceptionFormatter();

                formatter.WriteException(operation, response);

                Assert.That(response.ContentType, Is.EqualTo("text/html"));
                Assert.That(response.StatusCode, Is.EqualTo((int) HttpStatusCode.InternalServerError));
                Assert.That(response.ContentEncoding, Is.EqualTo(Encoding.UTF8));

                stream.Position = 0;
                var body = Encoding.UTF8.GetString(stream.ReadFully(0));

                Assert.That(body, Contains.Substring("InvalidConfiguration"));
                Assert.That(body, Contains.Substring("themessage"));
            }
        }
예제 #4
0
        private void WriteGenericException(Exception exception)
        {
            IExceptionFormatter formatter;
            try
            {
                formatter = _container.Resolve<IExceptionFormatter>();
            }
            catch
            {
                formatter = new ExceptionFormatter();
            }

            IUniversalResponse universalResponse = null;
            switch (_kind)
            {
                case ContextKind.Web:
                    universalResponse = new UniversalResponse(HttpWebContext.Response);
                    break;
                case ContextKind.Net:
                    universalResponse = new UniversalResponse(HttpListenerContext.Response);
                    break;
            }
            formatter.WriteHtmlException(exception, universalResponse);
        }