Delete more cruft

- Remove migration from the tests
This commit is contained in:
David Fowler 2023-05-04 21:42:29 -07:00 committed by Reuben Bond
parent 7681405eaf
commit 08e7c3424d
6 changed files with 8 additions and 104 deletions

View File

@ -6,14 +6,10 @@ public static class CustomExtensionMethods
{
var hcBuilder = services.AddHealthChecks();
if (configuration.GetConnectionString("CatalogDB") is string connectionString)
{
hcBuilder
.AddSqlServer(
connectionString,
.AddSqlServer(_ => configuration.GetConnectionString("CatalogDB"),
name: "CatalogDB-check",
tags: new string[] { "live", "ready" });
}
var accountName = configuration["AzureStorageAccountName"];
var accountKey = configuration["AzureStorageAccountKey"];

View File

@ -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);
}
}

View File

@ -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>();

View File

@ -16,8 +16,7 @@
}
},
"ConnectionStrings": {
"EventBus": "localhost",
"CatalogDB": ""
"EventBus": "localhost"
},
"EventBus": {
"SubscriptionClientName": "Catalog",

View File

@ -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 =>

View File

@ -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"
}
}