Delete more cruft
- Remove migration from the tests
This commit is contained in:
parent
7681405eaf
commit
08e7c3424d
@ -6,14 +6,10 @@ public static class CustomExtensionMethods
|
||||
{
|
||||
var hcBuilder = services.AddHealthChecks();
|
||||
|
||||
if (configuration.GetConnectionString("CatalogDB") is string connectionString)
|
||||
{
|
||||
hcBuilder
|
||||
.AddSqlServer(
|
||||
connectionString,
|
||||
name: "CatalogDB-check",
|
||||
tags: new string[] { "live", "ready" });
|
||||
}
|
||||
hcBuilder
|
||||
.AddSqlServer(_ => configuration.GetConnectionString("CatalogDB"),
|
||||
name: "CatalogDB-check",
|
||||
tags: new string[] { "live", "ready" });
|
||||
|
||||
var accountName = configuration["AzureStorageAccountName"];
|
||||
var accountKey = configuration["AzureStorageAccountKey"];
|
||||
|
@ -1,68 +0,0 @@
|
||||
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Extensions;
|
||||
|
||||
public static class WebHostExtensions
|
||||
{
|
||||
public static bool IsInKubernetes(this IServiceProvider services)
|
||||
{
|
||||
var cfg = services.GetService<IConfiguration>();
|
||||
var orchestratorType = cfg.GetValue<string>("OrchestratorType");
|
||||
return orchestratorType?.ToUpper() == "K8S";
|
||||
}
|
||||
|
||||
public static IServiceProvider MigrateDbContext<TContext>(this IServiceProvider services, Action<TContext, IServiceProvider> seeder) where TContext : DbContext
|
||||
{
|
||||
var underK8s = services.IsInKubernetes();
|
||||
|
||||
using var scope = services.CreateScope();
|
||||
var scopedServices = scope.ServiceProvider;
|
||||
|
||||
var logger = scopedServices.GetRequiredService<ILogger<TContext>>();
|
||||
|
||||
var context = scopedServices.GetService<TContext>();
|
||||
|
||||
try
|
||||
{
|
||||
logger.LogInformation("Migrating database associated with context {DbContextName}", typeof(TContext).Name);
|
||||
|
||||
if (underK8s)
|
||||
{
|
||||
InvokeSeeder(seeder, context, scopedServices);
|
||||
}
|
||||
else
|
||||
{
|
||||
var retry = Policy.Handle<SqlException>()
|
||||
.WaitAndRetry(new TimeSpan[]
|
||||
{
|
||||
TimeSpan.FromSeconds(3),
|
||||
TimeSpan.FromSeconds(5),
|
||||
TimeSpan.FromSeconds(8),
|
||||
});
|
||||
|
||||
//if the sql server container is not created on run docker compose this
|
||||
//migration can't fail for network related exception. The retry options for DbContext only
|
||||
//apply to transient exceptions
|
||||
// Note that this is NOT applied when running some orchestrators (let the orchestrator to recreate the failing service)
|
||||
retry.Execute(() => InvokeSeeder(seeder, context, scopedServices));
|
||||
}
|
||||
|
||||
logger.LogInformation("Migrated database associated with context {DbContextName}", typeof(TContext).Name);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "An error occurred while migrating the database used on context {DbContextName}", typeof(TContext).Name);
|
||||
if (underK8s)
|
||||
{
|
||||
throw; // Rethrow under k8s because we rely on k8s to re-run the pod
|
||||
}
|
||||
}
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
private static void InvokeSeeder<TContext>(Action<TContext, IServiceProvider> seeder, TContext context, IServiceProvider services)
|
||||
where TContext : DbContext
|
||||
{
|
||||
context.Database.Migrate();
|
||||
seeder(context, services);
|
||||
}
|
||||
}
|
@ -41,6 +41,7 @@ var eventBus = app.Services.GetRequiredService<IEventBus>();
|
||||
eventBus.Subscribe<OrderStatusChangedToAwaitingValidationIntegrationEvent, OrderStatusChangedToAwaitingValidationIntegrationEventHandler>();
|
||||
eventBus.Subscribe<OrderStatusChangedToPaidIntegrationEvent, OrderStatusChangedToPaidIntegrationEventHandler>();
|
||||
|
||||
// REVIEW: This is done fore development east but shouldn't be here in production
|
||||
using (var scope = app.Services.CreateScope())
|
||||
{
|
||||
var context = scope.ServiceProvider.GetRequiredService<CatalogContext>();
|
||||
|
@ -16,8 +16,7 @@
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"EventBus": "localhost",
|
||||
"CatalogDB": ""
|
||||
"EventBus": "localhost"
|
||||
},
|
||||
"EventBus": {
|
||||
"SubscriptionClientName": "Catalog",
|
||||
|
@ -7,29 +7,11 @@ public class CatalogScenariosBase
|
||||
public TestServer CreateServer()
|
||||
{
|
||||
var factory = new CatalogApplication();
|
||||
return factory.CreateServer();
|
||||
return factory.Server;
|
||||
}
|
||||
|
||||
private class CatalogApplication : WebApplicationFactory<Program>
|
||||
{
|
||||
public TestServer CreateServer()
|
||||
{
|
||||
Services
|
||||
.MigrateDbContext<CatalogContext>((context, services) =>
|
||||
{
|
||||
var env = services.GetService<IWebHostEnvironment>();
|
||||
var settings = services.GetService<IOptions<CatalogSettings>>();
|
||||
var logger = services.GetService<ILogger<CatalogContextSeed>>();
|
||||
|
||||
new CatalogContextSeed()
|
||||
.SeedAsync(context, env, settings, logger)
|
||||
.Wait();
|
||||
})
|
||||
.MigrateDbContext<IntegrationEventLogContext>((_, __) => { });
|
||||
|
||||
return Server;
|
||||
}
|
||||
|
||||
protected override IHost CreateHost(IHostBuilder builder)
|
||||
{
|
||||
builder.ConfigureAppConfiguration(c =>
|
||||
|
@ -1,10 +1,5 @@
|
||||
{
|
||||
"ExternalCatalogBaseUrl": "http://localhost:5101",
|
||||
"Identity": {
|
||||
"Url": "http://localhost:5105",
|
||||
"ExternalUrl": "http://localhost:5105",
|
||||
"Audience": "catalog"
|
||||
},
|
||||
"isTest": "true",
|
||||
"PicBaseUrl": "http://localhost:5101/api/v1/catalog/items/[0]/pic/",
|
||||
|
||||
@ -13,7 +8,6 @@
|
||||
},
|
||||
|
||||
"EventBus": {
|
||||
"SubscriptionClientName": "Catalog",
|
||||
"ConnectionString": "localhost"
|
||||
"SubscriptionClientName": "Catalog"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user