public bool Process(WebTestConfig config, bool dropExisting) { DropExisting = dropExisting; Server = config.DatabaseManager ?? throw new Exception("Database manager is not specified for WebTestConfig"); LoadMetaDirectory(); TempDatabaseName = DatabaseManager.GetDatabaseName().Or("Default.Temp"); if (!TempDatabaseName.ToLower().EndsWith(".temp")) { Debug.WriteLine($"Temp databae creation aborted as '{TempDatabaseName}' does not end in '.Temp'."); return(false); } EnsurePermissions(); CreateDatabaseFilesPath(); lock (SyncLock) { if (!EstablishDatabaseFromScripts()) { return(false); } CopyFiles(); } Task.Factory.RunSync(() => Context.Current.Database().Refresh()); return(true); }
public static async Task Create(bool dropExisting = false) { if (!WebTestConfig.IsActive()) { Debug.WriteLine("Creating temp database aborted. Test mode is not active."); return; } try { if (new TestDatabaseGenerator().Process(Config, dropExisting)) { try { await(WebTestConfig.ReferenceDataCreator?.Invoke() ?? Task.CompletedTask); } catch (Exception ex) { throw new Exception("Failed to run the reference data.", ex); } } Status = CreationStatus.Created; } catch { Status = CreationStatus.Failed; throw; } finally { DatabaseChangeWatcher.Restart(); } }
internal static IDevCommandsConfig AddDatabaseManager(this IDevCommandsConfig config) { config.Add("dbChanges", () => DatabaseChangeWatcher.DispatchChanges()); async Task <bool> startDatabase(bool shouldRedirect = false) { var redirect = Context.Current.Request().ToAbsoluteUri().AsUri().RemoveQueryString("Web.Test.Command").ToString(); WebTestConfig.SetRunner(); await TempDatabase.Restart(); if (shouldRedirect) { Debug.WriteLine("All done. Redirecting to: " + redirect); Context.Current.Response().Redirect(redirect); } return(shouldRedirect); } foreach (var command in new[] { "start", "run", "ran", "cancel" }) { config.Add(command, () => startDatabase()); } config.Add("restart", () => startDatabase(shouldRedirect: true), "Restart DB"); return(config); }
public static IApplicationBuilder UseWebTest(this IApplicationBuilder app, Func <Task> createReferenceData, Action <IWebTestConfig> config = null) { if (!WebTestConfig.IsActive()) { return(app); } WebTestConfig.ReferenceDataCreator = createReferenceData; var settings = new WebTestConfig(); config?.Invoke(settings); if (settings.AddDefaultHandlers) { settings.AddDatabaseManager().AddSnapshot().AddTimeInjector().AddSqlProfile(); } app.UseMiddleware <WebTestMiddleware>(); Task.Factory.RunSync(() => TempDatabase.Create(enforceRestart: false, mustRenew: false)); return(app); }
async Task <bool> ProcessAsWebCommand() { if (TempDatabase.Config?.DatabaseManager == null) { return(false); } await TempDatabase.AwaitReadiness(); var command = Context.Current.Request().Param("Web.Test.Command"); if (command.IsEmpty()) { return(false); } try { return(await WebTestConfig.Run(command)); } catch (Exception ex) { await Context.Current.Response().EndWith(ex.ToLogString().ToHtmlLines()); return(false); } }
public static async Task InitializeTempDatabase <TDatabaseManager>(this IApplicationBuilder app, Func <Task> createReferenceData) where TDatabaseManager : DatabaseManager, new() { if (!WebTestConfig.IsActive()) { return; } TempDatabase.Config.DatabaseManager = new TDatabaseManager(); WebTestConfig.ReferenceDataCreator = createReferenceData; await TempDatabase.AwaitReadiness(); }
public static async Task Create(bool enforceRestart, bool mustRenew) { if (!WebTestConfig.IsActive()) { Debug.WriteLine("Creating temp database aborted. Test mode is not active."); return; } IsDatabaseBeingCreated = true; var createdNew = false; try { SqlConnection.ClearAllPools(); if (enforceRestart) { TempDatabaseInitiated = null; } if (TempDatabaseInitiated.HasValue) { return; } var generator = new TestDatabaseGenerator(isTempDatabaseOptional: true, mustRenew: mustRenew); TempDatabaseInitiated = generator.Process(); createdNew = generator.CreatedNewDatabase; await Database.Instance.Refresh(); SqlConnection.ClearAllPools(); } finally { IsDatabaseBeingCreated = false; } if (createdNew) { // A new database is created. Add the reference data try { await(WebTestConfig.ReferenceDataCreator?.Invoke() ?? Task.CompletedTask); } catch (Exception ex) { throw new Exception("Failed to run the reference data.", ex); } } }
public static IApplicationBuilder UseWebTest(this IApplicationBuilder app, Action <IDevCommandsConfig> config = null) { if (!WebTestConfig.IsActive()) { return(app); } config?.Invoke(TempDatabase.Config); if (TempDatabase.Config.AddDefaultHandlers) { TempDatabase.Config.AddDatabaseManager() .AddTimeInjector() .AddSqlProfile() .AddClearDatabaseCache(); } app.UseMiddleware <WebTestMiddleware>(); return(app); }