public async Task Pass_thru_when_context_not_in_services()
        {
            using (var database = SqlServerTestStore.CreateScratch())
            {
                var logProvider = new TestLoggerProvider();

                var server = TestServer.Create(app =>
                {
                    app.UseDatabaseErrorPage();
                    app.UseMiddleware <ContextNotRegisteredInServicesMiddleware>();
                    app.ApplicationServices.GetService <ILoggerFactory>().AddProvider(logProvider);
                },
                                               services =>
                {
                    services.AddEntityFramework().AddSqlServer();
                    var optionsBuilder = new DbContextOptionsBuilder();
                    if (!PlatformHelper.IsMono)
                    {
                        optionsBuilder.UseSqlServer(database.ConnectionString);
                    }
                    else
                    {
                        optionsBuilder.UseInMemoryDatabase();
                    }
                    services.AddInstance <DbContextOptions>(optionsBuilder.Options);
                });

                var ex = await Assert.ThrowsAsync <SqlException>(async() =>
                                                                 await server.CreateClient().GetAsync("http://localhost/"));

                Assert.True(logProvider.Logger.Messages.Any(m =>
                                                            m.StartsWith(StringsHelpers.GetResourceString("FormatDatabaseErrorPageMiddleware_ContextNotRegistered", typeof(BloggingContext)))));
            }
        }
Ejemplo n.º 2
0
        public async Task Exception_while_applying_migrations()
        {
            using (var database = SqlServerTestStore.CreateScratch())
            {
                var options = new DbContextOptions().UseSqlServer(database.ConnectionString);

                TestServer server = TestServer.Create(app =>
                {
                    app.UseServices(services =>
                    {
                        services.AddEntityFramework().AddSqlServer();
                        services.AddScoped <BloggingContextWithSnapshotThatThrows>();
                        services.AddInstance <DbContextOptions>(options);
                    });

                    app.UseMigrationsEndPoint();
                });

                var formData = new FormUrlEncodedContent(new List <KeyValuePair <string, string> >
                {
                    new KeyValuePair <string, string>("context", typeof(BloggingContextWithSnapshotThatThrows).AssemblyQualifiedName)
                });

                var ex = await Assert.ThrowsAsync <InvalidOperationException>(async() =>
                                                                              await server.CreateClient().PostAsync("http://localhost" + MigrationsEndPointOptions.DefaultPath, formData));

                Assert.Equal(StringsHelpers.GetResourceString("FormatMigrationsEndPointMiddleware_Exception", typeof(BloggingContextWithSnapshotThatThrows)), ex.Message);
                Assert.Equal("Welcome to the invalid snapshot!", ex.InnerException.Message);
            }
        }
        private static TestServer SetupTestServer <TContext, TMiddleware>(ILoggerProvider logProvider = null)
            where TContext : DbContext
        {
            using (var database = SqlServerTestStore.CreateScratch())
            {
                return(TestServer.Create(app =>
                {
                    app.UseServices(services =>
                    {
                        services.AddEntityFramework()
                        .AddSqlServer();

                        services.AddScoped <TContext>();
                        services.AddInstance <DbContextOptions>(
                            new DbContextOptions()
                            .UseSqlServer(database.ConnectionString));
                    });

                    app.UseDatabaseErrorPage();

                    app.UseMiddleware <TMiddleware>();

                    if (logProvider != null)
                    {
                        app.ApplicationServices.GetService <ILoggerFactory>().AddProvider(logProvider);
                    }
                }));
            }
        }
        public async Task Customize_migrations_end_point()
        {
            var migrationsEndpoint = "/MyCustomEndPoints/ApplyMyMigrationsHere";

            using (var database = SqlServerTestStore.CreateScratch())
            {
                var server = TestServer.Create(app =>
                {
                    app.UseServices(services =>
                    {
                        services.AddEntityFramework().AddSqlServer();
                        services.AddScoped <BloggingContextWithMigrations>();
                        services.AddInstance <DbContextOptions>(new DbContextOptions().UseSqlServer(database.ConnectionString));
                    });

                    var options = DatabaseErrorPageOptions.ShowAll;
                    options.MigrationsEndPointPath = new PathString(migrationsEndpoint);
                    app.UseDatabaseErrorPage(options);

                    app.UseMiddleware <PendingMigrationsMiddleware>();
                });

                HttpResponseMessage response = await server.CreateClient().GetAsync("http://localhost/");

                Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);

                var content = await response.Content.ReadAsStringAsync();

                Assert.Contains("req.open(\"POST\", \"" + migrationsEndpoint + "\", true);", content);
            }
        }
Ejemplo n.º 5
0
        private async Task Migration_request(bool useCustomPath)
        {
            using (var database = SqlServerTestStore.CreateScratch())
            {
                var options = new DbContextOptions().UseSqlServer(database.ConnectionString);
                var path    = useCustomPath ? new PathString("/EndPoints/ApplyMyMigrations") : MigrationsEndPointOptions.DefaultPath;

                TestServer server = TestServer.Create(app =>
                {
                    app.UseServices(services =>
                    {
                        services.AddEntityFramework().AddSqlServer();
                        services.AddScoped <BloggingContextWithMigrations>();
                        services.AddInstance <DbContextOptions>(options);
                    });

                    if (useCustomPath)
                    {
                        app.UseMigrationsEndPoint(new MigrationsEndPointOptions {
                            Path = path
                        });
                    }
                    else
                    {
                        app.UseMigrationsEndPoint();
                    }
                });

                using (var db = BloggingContextWithMigrations.CreateWithoutExternalServiceProvider(options))
                {
                    Assert.False(db.Database.AsRelational().Exists());

                    var formData = new FormUrlEncodedContent(new List <KeyValuePair <string, string> >
                    {
                        new KeyValuePair <string, string>("context", typeof(BloggingContextWithMigrations).AssemblyQualifiedName)
                    });

                    HttpResponseMessage response = await server.CreateClient()
                                                   .PostAsync("http://localhost" + path, formData);

                    Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);

                    Assert.True(db.Database.AsRelational().Exists());

                    var databaseInternals = (IMigrationsEnabledDatabaseInternals)db.Database;
                    var migrator          = databaseInternals.Migrator;
                    var appliedMigrations = migrator.GetDatabaseMigrations();
                    Assert.Equal(2, appliedMigrations.Count);
                    Assert.Equal("111111111111111_MigrationOne", appliedMigrations.ElementAt(0).GetMigrationId());
                    Assert.Equal("222222222222222_MigrationTwo", appliedMigrations.ElementAt(1).GetMigrationId());
                }
            }
        }
        public async Task Pass_thru_when_exception_in_logic()
        {
            using (var database = SqlServerTestStore.CreateScratch())
            {
                var logProvider = new TestLoggerProvider();

                var server = SetupTestServer <BloggingContextWithSnapshotThatThrows, ExceptionInLogicMiddleware>(logProvider);

                var ex = await Assert.ThrowsAsync <SqlException>(async() =>
                                                                 await server.CreateClient().GetAsync("http://localhost/"));

                Assert.True(logProvider.Logger.Messages.Any(m =>
                                                            m.StartsWith(StringsHelpers.GetResourceString("FormatDatabaseErrorPageMiddleware_Exception"))));
            }
        }
        private static TestServer SetupTestServer <TContext, TMiddleware>(ILoggerProvider logProvider = null)
            where TContext : DbContext
        {
            using (var database = SqlServerTestStore.CreateScratch())
            {
                return(TestServer.Create(app =>
                {
                    app.UseDatabaseErrorPage();

                    app.UseMiddleware <TMiddleware>();

                    if (logProvider != null)
                    {
                        app.ApplicationServices.GetService <ILoggerFactory>().AddProvider(logProvider);
                    }
                },
                                         services =>
                {
                    services.AddEntityFramework()
                    .AddSqlServer();

                    services.AddScoped <TContext>();

                    var optionsBuilder = new DbContextOptionsBuilder();
                    if (!PlatformHelper.IsMono)
                    {
                        optionsBuilder.UseSqlServer(database.ConnectionString);
                    }
                    else
                    {
                        optionsBuilder.UseInMemoryDatabase();
                    }
                    services.AddInstance(optionsBuilder.Options);
                }));
            }
        }