public async Task TestInsertIsCaptured() { while (MongoClient.Cluster.Description.Type != ClusterType.ReplicaSet) { await Task.Delay(1000); } TestSettings testSettings = null; void SettingsCallback(TestSettings settings) { testSettings = settings; _logger.LogInformation(settings.ToJson()); } await using (var settingsWatcher = new SharpSettingsMongoSettingsWatcher <TestSettings>(_logger, _testSettingsDataStore, "Local", SettingsCallback)) { Assert.False(settingsWatcher.IsRunning()); Assert.False(settingsWatcher.IsFaulted()); await settingsWatcher.WaitForStartupAsync(TimeSpan.FromSeconds(5)); Assert.Null(testSettings); var newSettings = new TestSettings() { Foo = "foo", Bar = "bar", Id = "Local", LastUpdate = 0 }; await Col.InsertOneAsync(newSettings); var waitCount = 0; while (testSettings == null && waitCount < 10) { await Task.Delay(1000); waitCount++; } Assert.NotNull(testSettings); } }
public async Task TestResultDoesNotDeadlock() { while (MongoClient.Cluster.Description.Type != ClusterType.ReplicaSet) { await Task.Delay(1000); } var newSettings = new TestSettings() { Foo = "Foo", Bar = "Bar", Id = "Local", LastUpdate = 0 }; await Col.InsertOneAsync(newSettings); void SettingsCallback(TestSettings settings) { _logger.LogInformation(settings.ToJson()); } await using var settingsWatcher = new SharpSettingsMongoSettingsWatcher <TestSettings>(_logger, _testSettingsDataStore, "Local", SettingsCallback); Assert.False(settingsWatcher.IsRunning()); Assert.False(settingsWatcher.IsFaulted()); await settingsWatcher.WaitForStartupAsync(TimeSpan.FromSeconds(5)); await Col.UpdateOneAsync(Builders <TestSettings> .Filter.Eq(x => x.Id, newSettings.Id), Builders <TestSettings> .Update.Set(x => x.Foo, "Bar").Set(x => x.Bar, "Foo")); var settingses = await Task.WhenAll(Enumerable.Range(0, 10000).AsParallel().Select(x => { return(Task.Factory.StartNew(() => settingsWatcher.GetSettingsAsync().Result)); })); var testSettings = settingses.First(); Assert.NotNull(testSettings); Assert.Equal("Foo", testSettings.Bar); Assert.Equal("Bar", testSettings.Foo); }