diff --git a/src/Umbraco.Tests.Integration/Testing/BaseTestDatabase.cs b/src/Umbraco.Tests.Integration/Testing/BaseTestDatabase.cs index 2a9733fd9d..52a0778a59 100644 --- a/src/Umbraco.Tests.Integration/Testing/BaseTestDatabase.cs +++ b/src/Umbraco.Tests.Integration/Testing/BaseTestDatabase.cs @@ -19,7 +19,9 @@ namespace Umbraco.Tests.Integration.Testing protected IUmbracoDatabaseFactory _databaseFactory; protected IList _testDatabases; - protected UmbracoDatabase.CommandInfo[] _cachedDatabaseInitCommands; + protected const int _threadCount = 2; + + protected UmbracoDatabase.CommandInfo[] _cachedDatabaseInitCommands = new UmbracoDatabase.CommandInfo[0]; protected BlockingCollection _prepareQueue; protected BlockingCollection _readySchemaQueue; @@ -92,46 +94,52 @@ namespace Umbraco.Tests.Integration.Testing }); } - protected void RebuildSchema(IDbCommand command, TestDbMeta meta) + private void RebuildSchema(IDbCommand command, TestDbMeta meta) { - if (_cachedDatabaseInitCommands != null) + lock (_cachedDatabaseInitCommands) { - foreach (var dbCommand in _cachedDatabaseInitCommands) + if (!_cachedDatabaseInitCommands.Any()) { - - if (dbCommand.Text.StartsWith("SELECT ")) - { - continue; - } - - command.CommandText = dbCommand.Text; - command.Parameters.Clear(); - - foreach (var parameterInfo in dbCommand.Parameters) - { - AddParameter(command, parameterInfo); - } - - command.ExecuteNonQuery(); + RebuildSchemaFirstTime(command, meta); + return; } } - else + + foreach (var dbCommand in _cachedDatabaseInitCommands) { - _databaseFactory.Configure(meta.ConnectionString, Core.Constants.DatabaseProviders.SqlServer); - - using (var database = (UmbracoDatabase)_databaseFactory.CreateDatabase()) + if (dbCommand.Text.StartsWith("SELECT ")) { - database.LogCommands = true; + continue; + } - using (var transaction = database.GetTransaction()) - { - var schemaCreator = new DatabaseSchemaCreator(database, _loggerFactory.CreateLogger(), _loggerFactory, new UmbracoVersion()); - schemaCreator.InitializeDatabaseSchema(); + command.CommandText = dbCommand.Text; + command.Parameters.Clear(); - transaction.Complete(); + foreach (var parameterInfo in dbCommand.Parameters) + { + AddParameter(command, parameterInfo); + } - _cachedDatabaseInitCommands = database.Commands.ToArray(); - } + command.ExecuteNonQuery(); + } + } + + private void RebuildSchemaFirstTime(IDbCommand command, TestDbMeta meta) + { + _databaseFactory.Configure(meta.ConnectionString, Core.Constants.DatabaseProviders.SqlServer); + + using (var database = (UmbracoDatabase)_databaseFactory.CreateDatabase()) + { + database.LogCommands = true; + + using (var transaction = database.GetTransaction()) + { + var schemaCreator = new DatabaseSchemaCreator(database, _loggerFactory.CreateLogger(), _loggerFactory, new UmbracoVersion()); + schemaCreator.InitializeDatabaseSchema(); + + transaction.Complete(); + + _cachedDatabaseInitCommands = database.Commands.ToArray(); } } } diff --git a/src/Umbraco.Tests.Integration/Testing/LocalDbTestDatabase.cs b/src/Umbraco.Tests.Integration/Testing/LocalDbTestDatabase.cs index add3df9fe8..59a9b00215 100644 --- a/src/Umbraco.Tests.Integration/Testing/LocalDbTestDatabase.cs +++ b/src/Umbraco.Tests.Integration/Testing/LocalDbTestDatabase.cs @@ -19,8 +19,6 @@ namespace Umbraco.Tests.Integration.Testing private static LocalDb.Instance _localDbInstance; private static string _filesPath; - private const int _threadCount = 2; - public static LocalDbTestDatabase Instance { get; private set; } //It's internal because `Umbraco.Core.Persistence.LocalDb` is internal diff --git a/src/Umbraco.Tests.Integration/Testing/SqlDeveloperTestDatabase.cs b/src/Umbraco.Tests.Integration/Testing/SqlDeveloperTestDatabase.cs index 4a7f602ac6..2e1f75cd45 100644 --- a/src/Umbraco.Tests.Integration/Testing/SqlDeveloperTestDatabase.cs +++ b/src/Umbraco.Tests.Integration/Testing/SqlDeveloperTestDatabase.cs @@ -17,8 +17,6 @@ namespace Umbraco.Tests.Integration.Testing private readonly string _masterConnectionString; public const string DatabaseName = "UmbracoTests"; - private const int _threadCount = 2; - public static SqlDeveloperTestDatabase Instance { get; private set; } public SqlDeveloperTestDatabase(ILoggerFactory loggerFactory, IUmbracoDatabaseFactory databaseFactory, string masterConnectionString)