public void CheckMigrationPolicies() { _dbPath = DisposableDbManager.FindDatabaseScriptsPath(DbName); var undocumentedMigrations = new List<string>(); var migrations = new MigrationManager().GetSqlSriptsIn(_dbPath.FullName); foreach (var migration in migrations) { var migrationContents = File.ReadAllText(migration.FullName).ToLower(); bool found = false; foreach (var migrationPolicyText in _migrationStringContainingPolicies) { if (migrationContents.Contains(migrationPolicyText.ToLower())) { found = true; } } if (!found) { undocumentedMigrations.Add(migration.Name); } } if (undocumentedMigrations.Count > 0) { throw new InvalidOperationException( String.Format("The following migrations don't comply with the policies: {0}" + Environment.NewLine + "Policies are: {1}", Environment.NewLine + string.Join("," + Environment.NewLine, undocumentedMigrations.ToArray()), Environment.NewLine + string.Join("," + Environment.NewLine, _migrationPolicies.ToArray()))); } }
private void RunMigrations(string disposableDbName, IEnumerable<string> migrationWhiteList) { if (migrationWhiteList != null) Console.WriteLine("Attempting to run {0} migrations in {1}...", migrationWhiteList.Count(), _dbNameInVcs); else Console.WriteLine("Attempting to run all migrations in {0}...", _dbNameInVcs); int migrationCount = new MigrationManager() .RunScripts(_disposableDbServer, _dbScriptsPath, disposableDbName, _dbNameInVcs, migrationWhiteList); if (migrationWhiteList != null && migrationCount < migrationWhiteList.Count()) throw new Exception(String.Format("There was some kind of problem and {0} migrations were applied instead of {1}. First migration requested was {2}.", migrationCount, migrationWhiteList.Count(), migrationWhiteList.First())); Console.WriteLine("Successfully applied {0} migrations", migrationCount); }
public void CheckStuckMigrations() { _disposableDbServer = DatabaseCreationTests.GetDisposableDbServer(); TimeSpan maxPeriod = TimeSpan.FromDays(15); DirectoryInfo dbpath = DisposableDbManager.FindDatabaseScriptsPath(DbName); var stuckMigrations = new List<MigrationManager.Migration>(); var migrationManager = new MigrationManager(); IEnumerable<string> migrationSqlFiles = migrationManager.GetSqlSriptsIn(dbpath.FullName).Select(file => Path.GetFileNameWithoutExtension(file.Name)); foreach (var migration in migrationManager.GetMigrationsRunInDb(dbpath, _disposableDbServer, DbName)) { if (migrationSqlFiles.Contains(migration.FileNameWithoutExtension) && migration.AppliedDate.Add(maxPeriod) < DateTime.Now) stuckMigrations.Add(migration); } if (stuckMigrations.Count > 0) { throw new InvalidOperationException( String.Format( "The following migrations have been more than {0} days in staging phase " + "(they need to be merged to the History/ subforlder to not be considered in 'staging'): {1}", maxPeriod.Days, Environment.NewLine + string.Join("," + Environment.NewLine, stuckMigrations.Select(m => m.FileNameWithoutExtension).ToArray()))); } }
public void CheckThatDisposableDbCreationStillWorksAfterApplyingEachMigration() { _dbCreationPath = ConfigurationManager.AppSettings["DbCreationPath"]; _disposableDbServer = DatabaseCreationTests.GetDisposableDbServer(); var creator = new DisposableDbManager(_dbCreationPath, _disposableDbServer, DbName); creator.AllowCreatingSameDb = true; var baseDbWithNoMigrations = creator.CreateCompleteDisposableDbWithMigrations(new string[0]); _dbPath = DisposableDbManager.FindDatabaseScriptsPath(DbName); IEnumerable<FileInfo> migrations = new MigrationManager().GetSqlSriptsIn(_dbPath.FullName); var migrationsAlreadyTested = new List<string>(); foreach (var migration in migrations) { TestMigration(migration, migrationsAlreadyTested, baseDbWithNoMigrations); migrationsAlreadyTested.Add(Path.GetFileNameWithoutExtension(migration.FullName)); } }