public void Migrate_Full_Success(string seedFile, bool assertCollectionHasItems) { using (var dbContext = new HangfireDbContext(ConnectionUtils.GetConnectionString(), "Hangfire-Mongo-Migration-Tests")) { // ARRANGE dbContext.Client.DropDatabase(dbContext.Database.DatabaseNamespace.DatabaseName); if (seedFile != null) { SeedCollectionFromZipArchive(dbContext, Path.Combine("Migration", seedFile)); } var storageOptions = new MongoStorageOptions { MigrationOptions = new MongoMigrationOptions { Strategy = MongoMigrationStrategy.Migrate, BackupStrategy = MongoBackupStrategy.None } }; var migrationManager = new MongoMigrationManager(storageOptions, dbContext.Database); // ACT MongoMigrationManager.MigrateIfNeeded(storageOptions, dbContext.Database); // ASSERT AssertDataIntegrity(dbContext, assertCollectionHasItems); } }
/// <summary> /// Constructs Job Storage by Mongo client, name and options /// </summary> /// <param name="mongoClient"></param> /// <param name="databaseName"></param> /// <param name="storageOptions"></param> /// <exception cref="ArgumentNullException"></exception> public MongoStorage(MongoClient mongoClient, string databaseName, MongoStorageOptions storageOptions) { if (mongoClient == null) { throw new ArgumentNullException(nameof(mongoClient)); } if (string.IsNullOrWhiteSpace(databaseName)) { throw new ArgumentNullException(nameof(databaseName)); } if (storageOptions == null) { throw new ArgumentNullException(nameof(storageOptions)); } _mongoClient = mongoClient; _databaseName = databaseName; _storageOptions = storageOptions; _dbContext = new HangfireDbContext(mongoClient, databaseName, _storageOptions.Prefix); if (_storageOptions.CheckConnection) { CheckConnection(); } MongoMigrationManager.MigrateIfNeeded(storageOptions, _dbContext.Database); }
public void Migrate_MultipleInstances_ThereCanBeOnlyOne() { using (var dbContext = new HangfireDbContext(ConnectionUtils.GetConnectionString(), ConnectionUtils.GetDatabaseName())) { // ARRANGE dbContext.Database.DropCollection(dbContext.Schema.CollectionNamespace.CollectionName); var storageOptions = new MongoStorageOptions { MigrationOptions = new MongoMigrationOptions { Strategy = MongoMigrationStrategy.Drop, BackupStrategy = MongoBackupStrategy.None } }; var signal = new ManualResetEvent(false); var signalToStart = new ManualResetEvent(false); var taskCount = 10; var tasks = new Task <bool> [taskCount]; var count = 0; // ACT for (int i = 0; i < taskCount; i++) { tasks[i] = Task.Factory.StartNew <bool>(() => { count++; if (count == taskCount) { signalToStart.Set(); } signal.WaitOne(); return(MongoMigrationManager.MigrateIfNeeded(storageOptions, dbContext.Database)); }, TaskCreationOptions.LongRunning); } signalToStart.WaitOne(); signal.Set(); Task.WaitAll(tasks); // ASSERT Assert.True(tasks.Select(t => t.Result).Single(b => b)); } }
/// <summary> /// Constructs Job Storage by Mongo client, name and options /// </summary> /// <param name="mongoClient"></param> /// <param name="databaseName"></param> /// <param name="storageOptions"></param> /// <exception cref="ArgumentNullException"></exception> public MongoStorage(MongoClient mongoClient, string databaseName, MongoStorageOptions storageOptions) { if (string.IsNullOrWhiteSpace(databaseName)) { throw new ArgumentNullException(nameof(databaseName)); } DatabaseName = databaseName; MongoClient = mongoClient ?? throw new ArgumentNullException(nameof(mongoClient)); StorageOptions = storageOptions ?? throw new ArgumentNullException(nameof(storageOptions)); HangfireDbContext = StorageOptions.Factory.CreateDbContext(mongoClient, databaseName, storageOptions.Prefix); if (StorageOptions.CheckConnection) { CheckConnection(); } MongoMigrationManager.MigrateIfNeeded(storageOptions, HangfireDbContext.Database); }
public void Migrate_DropNoBackup_Success() { var dbContext = ConnectionUtils.CreateDbContext("Hangfire-Mongo-Migration-Tests"); // ARRANGE dbContext.Client.DropDatabase(dbContext.Database.DatabaseNamespace.DatabaseName); SeedCollectionFromZipArchive(dbContext, Path.Combine("Migration", "Hangfire-Mongo-Schema-006.zip")); var storageOptions = new MongoStorageOptions { MigrationOptions = new MongoMigrationOptions { MigrationStrategy = new DropMongoMigrationStrategy(), BackupStrategy = new NoneMongoBackupStrategy() } }; // ACT MongoMigrationManager.MigrateIfNeeded(storageOptions, dbContext.Database); // ASSERT AssertDataIntegrity(dbContext, assertCollectionHasItems: false); }