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();
|
var hcBuilder = services.AddHealthChecks();
|
||||||
|
|
||||||
if (configuration.GetConnectionString("CatalogDB") is string connectionString)
|
hcBuilder
|
||||||
{
|
.AddSqlServer(_ => configuration.GetConnectionString("CatalogDB"),
|
||||||
hcBuilder
|
name: "CatalogDB-check",
|
||||||
.AddSqlServer(
|
tags: new string[] { "live", "ready" });
|
||||||
connectionString,
|
|
||||||
name: "CatalogDB-check",
|
|
||||||
tags: new string[] { "live", "ready" });
|
|
||||||
}
|
|
||||||
|
|
||||||
var accountName = configuration["AzureStorageAccountName"];
|
var accountName = configuration["AzureStorageAccountName"];
|
||||||
var accountKey = configuration["AzureStorageAccountKey"];
|
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<OrderStatusChangedToAwaitingValidationIntegrationEvent, OrderStatusChangedToAwaitingValidationIntegrationEventHandler>();
|
||||||
eventBus.Subscribe<OrderStatusChangedToPaidIntegrationEvent, OrderStatusChangedToPaidIntegrationEventHandler>();
|
eventBus.Subscribe<OrderStatusChangedToPaidIntegrationEvent, OrderStatusChangedToPaidIntegrationEventHandler>();
|
||||||
|
|
||||||
|
// REVIEW: This is done fore development east but shouldn't be here in production
|
||||||
using (var scope = app.Services.CreateScope())
|
using (var scope = app.Services.CreateScope())
|
||||||
{
|
{
|
||||||
var context = scope.ServiceProvider.GetRequiredService<CatalogContext>();
|
var context = scope.ServiceProvider.GetRequiredService<CatalogContext>();
|
||||||
|
@ -16,8 +16,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"EventBus": "localhost",
|
"EventBus": "localhost"
|
||||||
"CatalogDB": ""
|
|
||||||
},
|
},
|
||||||
"EventBus": {
|
"EventBus": {
|
||||||
"SubscriptionClientName": "Catalog",
|
"SubscriptionClientName": "Catalog",
|
||||||
|
@ -7,29 +7,11 @@ public class CatalogScenariosBase
|
|||||||
public TestServer CreateServer()
|
public TestServer CreateServer()
|
||||||
{
|
{
|
||||||
var factory = new CatalogApplication();
|
var factory = new CatalogApplication();
|
||||||
return factory.CreateServer();
|
return factory.Server;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CatalogApplication : WebApplicationFactory<Program>
|
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)
|
protected override IHost CreateHost(IHostBuilder builder)
|
||||||
{
|
{
|
||||||
builder.ConfigureAppConfiguration(c =>
|
builder.ConfigureAppConfiguration(c =>
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ExternalCatalogBaseUrl": "http://localhost:5101",
|
"ExternalCatalogBaseUrl": "http://localhost:5101",
|
||||||
"Identity": {
|
|
||||||
"Url": "http://localhost:5105",
|
|
||||||
"ExternalUrl": "http://localhost:5105",
|
|
||||||
"Audience": "catalog"
|
|
||||||
},
|
|
||||||
"isTest": "true",
|
"isTest": "true",
|
||||||
"PicBaseUrl": "http://localhost:5101/api/v1/catalog/items/[0]/pic/",
|
"PicBaseUrl": "http://localhost:5101/api/v1/catalog/items/[0]/pic/",
|
||||||
|
|
||||||
@ -13,7 +8,6 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"EventBus": {
|
"EventBus": {
|
||||||
"SubscriptionClientName": "Catalog",
|
"SubscriptionClientName": "Catalog"
|
||||||
"ConnectionString": "localhost"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user