Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        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));
            }
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        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);
        }