public void Database_Initialize_without_force_can_be_called_by_multiple_threads_and_initialization_only_happens_once() { var countingInitializer = new ThreadSafeCountingInitializer <ContextForCallingInitializer>(); Database.SetInitializer(countingInitializer); ExecuteInParallel(() => GetDatabaseForInitialization <ContextForCallingInitializer>().Initialize(force: false)); Assert.Equal(1, countingInitializer.Count); }
public void Database_Initialize_with_force_can_be_called_by_multiple_threads_and_initialization_happens_every_time() { var countingInitializer = new ThreadSafeCountingInitializer <ContextForCallingInitializerWithForce>(); Database.SetInitializer(countingInitializer); ExecuteInParallel(() => GetDatabaseForInitialization <ContextForCallingInitializerWithForce>().Initialize(force: true)); Assert.Equal(20, countingInitializer.Count); }
public void Database_initializer_can_be_set_by_multiple_threads() { var countingInitializer = new ThreadSafeCountingInitializer <ContextForSettingInitializer>(); ExecuteInParallel(() => Database.SetInitializer(countingInitializer)); GetDatabaseForInitialization <ContextForSettingInitializer>().Initialize(force: false); Assert.Equal(1, countingInitializer.Count); }
Database_Initialize_without_force_can_be_called_by_multiple_threads_and_initialization_is_attempted_until_one_thread_succeeds() { var countingInitializer = new ThreadSafeCountingInitializer <ContextForCallingInitializerWithFailures>(throwFoFirstFive: true); Database.SetInitializer(countingInitializer); try { ExecuteInParallel(() => GetDatabaseForInitialization <ContextForCallingInitializerWithFailures>().Initialize(force: false)); } catch (AggregateException ex) { Assert.Equal(5, ex.InnerExceptions.Count); foreach (var innerException in ex.InnerExceptions) { Assert.Equal("Fail!", innerException.Message); } } Assert.Equal(6, countingInitializer.Count); }