コード例 #1
0
        public void MongoDBStorage()
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile(@"Configs\Storage.MongoDB.json")
                         .Build();

            Assert.NotNull(config);
            var exceptionalSection = config.GetSection("Exceptional");

            Assert.NotNull(exceptionalSection);

            var settings = new ExceptionalSettings();

            exceptionalSection.Bind(settings);

            // Store
            Assert.NotNull(settings.Store);
            Assert.Equal("Samples (ASP.NET Core MongoDB)", settings.Store.ApplicationName);
            Assert.Equal("MongoDB", settings.Store.Type);
            Assert.Equal("mongodb://localhost/test", settings.Store.ConnectionString);

            Assert.IsType <MongoDBErrorStore>(settings.DefaultStore);
            var store = settings.DefaultStore as MongoDBErrorStore;

            Assert.Equal("Samples (ASP.NET Core MongoDB)", store.ApplicationName);
        }
コード例 #2
0
        public void JSONStorage()
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile(@"Configs\Storage.JSON.json")
                         .Build();

            Assert.NotNull(config);
            var exceptionalSection = config.GetSection("Exceptional");

            Assert.NotNull(exceptionalSection);

            var settings = new ExceptionalSettings();

            exceptionalSection.Bind(settings);

            // Store
            Assert.NotNull(settings.Store);
            Assert.Equal("Samples (ASP.NET Core JSON)", settings.Store.ApplicationName);
            Assert.Equal("JSON", settings.Store.Type);
            Assert.Equal("/errors", settings.Store.Path);
            Assert.Equal(200, settings.Store.Size);

            Assert.IsType <JSONErrorStore>(settings.DefaultStore);
            var jsonStore = settings.DefaultStore as JSONErrorStore;

            Assert.Equal("Samples (ASP.NET Core JSON)", jsonStore.ApplicationName);
        }
コード例 #3
0
        public void MySQLStorage()
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile(@"Configs\Storage.MySQL.json")
                         .Build();

            Assert.NotNull(config);
            var exceptionalSection = config.GetSection("Exceptional");

            Assert.NotNull(exceptionalSection);

            var settings = new ExceptionalSettings();

            exceptionalSection.Bind(settings);

            // Store
            Assert.NotNull(settings.Store);
            Assert.Equal("Samples (ASP.NET Core MySQL)", settings.Store.ApplicationName);
            Assert.Equal("MySQL", settings.Store.Type);
            Assert.Equal("Server=.;Database=Exceptions;Username=Exceptions;Pwd=myPassword!", settings.Store.ConnectionString);

            Assert.IsType <MySQLErrorStore>(settings.DefaultStore);
            var sqlStore = settings.DefaultStore as MySQLErrorStore;

            Assert.Equal("Samples (ASP.NET Core MySQL)", sqlStore.ApplicationName);
        }
コード例 #4
0
        public void PostgreSqlStorage()
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile(@"Configs\Storage.PostgreSql.json")
                         .Build();

            Assert.NotNull(config);
            var exceptionalSection = config.GetSection("Exceptional");

            Assert.NotNull(exceptionalSection);

            var settings = new ExceptionalSettings();

            exceptionalSection.Bind(settings);

            // Store
            Assert.NotNull(settings.Store);
            Assert.Equal("Samples (ASP.NET Core PostgreSql)", settings.Store.ApplicationName);
            Assert.Equal("PostgreSql", settings.Store.Type);
            Assert.Equal("Server=localhost;Port=5432;Database=Exceptions;User Id=postgres;Password=postgres;", settings.Store.ConnectionString);

            Assert.IsType <PostgreSqlErrorStore>(settings.DefaultStore);
            var sqlStore = settings.DefaultStore as PostgreSqlErrorStore;

            Assert.Equal("Samples (ASP.NET Core PostgreSql)", sqlStore.ApplicationName);
        }
コード例 #5
0
        public void SQLStorage()
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile(GetPath("Storage.SQL.json"))
                         .Build();

            Assert.NotNull(config);
            var exceptionalSection = config.GetSection("Exceptional");

            Assert.NotNull(exceptionalSection);

            var settings = new ExceptionalSettings();

            exceptionalSection.Bind(settings);

            // Store
            Assert.NotNull(settings.Store);
            Assert.Equal("Samples (ASP.NET Core SQL)", settings.Store.ApplicationName);
            Assert.Equal("SQL", settings.Store.Type);
            Assert.Equal("Server=.;Database=Local.Exceptions;Trusted_Connection=True;", settings.Store.ConnectionString);
            Assert.Equal("MyExceptions", settings.Store.TableName);

            Assert.IsType <SQLErrorStore>(settings.DefaultStore);
            var sqlStore = settings.DefaultStore as SQLErrorStore;

            Assert.Equal("Samples (ASP.NET Core SQL)", sqlStore.ApplicationName);
        }
コード例 #6
0
        public async Task RendersExceptionalPage()
        {
            ExceptionalSettings settings = null;
            var builder = new WebHostBuilder()
                          .ConfigureServices(services => services.AddExceptional(s =>
            {
                s.Store.ApplicationName     = nameof(RendersExceptionalPage);
                s.UseExceptionalPageOnThrow = true;
                settings = s;
            }))
                          .Configure(app =>
            {
                app.UseExceptional();
                app.Run(_ => throw new Exception("Log me!"));
            });

            using (var server = new TestServer(builder))
            {
                using (var response = await server.CreateClient().GetAsync("").ConfigureAwait(false))
                {
                    Assert.False(response.IsSuccessStatusCode);
                    Assert.Equal(System.Net.HttpStatusCode.InternalServerError, response.StatusCode);
                    var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    Assert.Contains("var Exception = ", responseText);
                    Assert.Contains("An error was thrown during this request.", responseText);
                    Assert.Contains("Log me!", responseText);
                }

                var errors = await settings.DefaultStore.GetAllAsync(nameof(RendersExceptionalPage)).ConfigureAwait(false);

                Assert.Single(errors);
                Assert.Equal("Log me!", errors[0].Message);
            }
        }
コード例 #7
0
        public void UsingBindOverride()
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile(@"Configs\Full.json")
                         .Build();

            Assert.NotNull(config);
            var exceptionalSection = config.GetSection("Exceptional");

            Assert.NotNull(exceptionalSection);
            Assert.Equal("Exceptional", exceptionalSection.Key);

            var settings = new ExceptionalSettings();

            exceptionalSection.Bind(settings);

            // Top level
            Assert.NotNull(settings.DataIncludeRegex);
            Assert.Matches(settings.DataIncludeRegex, "MyPrefix.Test");
            Assert.True(settings.UseExceptionalPageOnThrow);

            // Store
            Assert.NotNull(settings.Store);
            Assert.Equal("Samples (ASP.NET Core)", settings.Store.ApplicationName);
            Assert.Equal("Memory", settings.Store.Type);
            Assert.Equal(TimeSpan.FromMinutes(5), settings.Store.RollupPeriod);
            Assert.Equal(100, settings.Store.BackupQueueSize);

            // Ignore
            Assert.NotNull(settings.Ignore);
            Assert.Equal(2, settings.Ignore.Regexes.Count);
            Assert.Contains(settings.Ignore.Regexes, r => r.IsMatch("Request timed out."));
            Assert.Contains(settings.Ignore.Regexes, r => r.IsMatch("Top SECRET DATA."));
            Assert.DoesNotContain(settings.Ignore.Regexes, r => r.IsMatch("Pickles"));
            Assert.Equal(2, settings.Ignore.Types.Count);
            Assert.Contains("MyNameSpace.MyException", settings.Ignore.Types);
            Assert.Contains("MyNameSpace.NoLogPleaseException", settings.Ignore.Types);

            // LogFilters
            Assert.NotNull(settings.LogFilters);
            Assert.Single(settings.LogFilters.Cookie);
            Assert.Equal("**no tokens saved! pheww**", settings.LogFilters.Cookie["authToken"]);
            Assert.Single(settings.LogFilters.Form);
            Assert.Equal("*********", settings.LogFilters.Form["password"]);
            Assert.Single(settings.LogFilters.Header);
            Assert.Equal("*********", settings.LogFilters.Header["Accept-Language"]);

            // Email
            Assert.NotNull(settings.Email);
            Assert.Equal("*****@*****.**", settings.Email.ToAddress);
            Assert.Equal("*****@*****.**", settings.Email.FromAddress);
            Assert.Equal("Wendy", settings.Email.FromDisplayName);
            Assert.Equal("localhost", settings.Email.SMTPHost);
            Assert.Equal(25, settings.Email.SMTPPort);
            Assert.Equal("dummy", settings.Email.SMTPUserName);
            Assert.Equal("pwd", settings.Email.SMTPPassword);
            Assert.True(settings.Email.SMTPEnableSSL);
            Assert.True(settings.Email.PreventDuplicates);
        }
コード例 #8
0
 protected IWebHostBuilder BasicBuilder(RequestDelegate requestDelegate, [CallerMemberName] string name = null) =>
 new WebHostBuilder()
 .ConfigureServices(services => services.AddExceptional(s =>
 {
     s.SetDefaultStore(new MemoryErrorStore());
     CurrentSettings = s;
 }))
 .Configure(app =>
 {
     app.UseExceptional();
     app.Run(requestDelegate);
 });
コード例 #9
0
        public void AddCommand()
        {
            var settings = new ExceptionalSettings();
            var ex       = new Exception();
            var err      = new Error(ex, settings);

            err.AddCommand(
                new Command("SQL", "Select * From MyTable")
                .AddData("Server", "SQL01"));
            Assert.Single(err.Commands);
            Assert.Equal("SQL", err.Commands[0].Type);
            Assert.Equal("Select * From MyTable", err.Commands[0].CommandString);
            Assert.Single(err.Commands[0].Data);
            Assert.Equal("SQL01", err.Commands[0].Data["Server"]);
        }
コード例 #10
0
        public void RendersNullCustomData()
        {
            var settings = new ExceptionalSettings();
            var ex       = new Exception("My exception");
            var error    = new Error(ex, settings, initialCustomData: new Dictionary <string, string>
            {
                ["MyData"] = null
            });

            var errorPage = new ErrorDetailPage(error, settings, settings.DefaultStore, "/", error.GUID);

            Assert.NotNull(errorPage);

            var rendered = errorPage.Render();

            Assert.NotNull(rendered);
            Assert.Contains("var Exception = ", rendered);
            Assert.Contains("MyData", rendered);
        }
コード例 #11
0
        public async Task ExceptionalStaticSet()
        {
            var appName = Guid.NewGuid().ToString();
            ExceptionalSettings settings = null;
            var builder = new WebHostBuilder()
                          .ConfigureServices(services => services.AddExceptional(s =>
            {
                settings = s;
                settings.Store.ApplicationName = appName;
            }))
                          .Configure(app => app.UseExceptional().Run(context => context.Response.WriteAsync("Hello World")));

            using (var server = new TestServer(builder))
            {
                using (var response = await server.CreateClient().GetAsync("").ConfigureAwait(false))
                {
                    Assert.Same(settings.Store.ApplicationName, Exceptional.Settings.Store.ApplicationName);
                }
            }
        }
コード例 #12
0
        public void BeforeAbort()
        {
            bool beforeFired = false,
                 afterFired  = false;
            Error error      = null;
            var   settings   = new ExceptionalSettings();

            settings.OnBeforeLog += (s, e) => { beforeFired = true; e.Abort = true; };
            settings.OnAfterLog  += (s, e) => { afterFired = true; error = e.Error; };

            var ex  = new Exception();
            var err = new Error(ex, settings);

            Assert.False(beforeFired);
            Assert.False(afterFired);

            Assert.False(err.LogToStore());
            Assert.True(beforeFired);
            Assert.False(afterFired);
            Assert.Null(error);
        }
コード例 #13
0
        public void Serialization()
        {
            var settings = new ExceptionalSettings();
            var ex       = new Exception();
            var err      = new Error(ex, settings);

            err.AddCommand(
                new Command("SQL", "Select * From MyTable")
                .AddData("Server", "SQL01"));

            var json = err.ToJson();

            Assert.Contains("Select * From MyTable", json);

            var derr = Error.FromJson(json);

            Assert.Single(derr.Commands);
            Assert.Equal("SQL", derr.Commands[0].Type);
            Assert.Equal("Select * From MyTable", derr.Commands[0].CommandString);
            Assert.Single(derr.Commands[0].Data);
            Assert.Equal("SQL01", derr.Commands[0].Data["Server"]);
        }