public void PreriodicReaderMustRaiseError() { var cts = new CancellationTokenSource(); var repo = new InMemoryRepository(); var manager = new SettingsManagerPeriodic(repo); var settings = manager.Get<ReadOnlySettings>(); settings.Text = "a"; manager.Save(settings); var error = false; manager.PeriodicReaderError += (s, a) => { error = true; }; manager.StartReadingTask(TimeSpan.FromMilliseconds(10), cts.Token); Thread.Sleep(200); Assert.AreEqual(false, error); }
public void PeriodicReaderMustDetectNewFlags() { var cts = new CancellationTokenSource(); var repo = new InMemoryRepository(); var manager = new SettingsManagerPeriodic(repo); Assert.AreEqual(false, manager.IsFlagSet("TestFlag")); manager.StartReadingTask(TimeSpan.FromMilliseconds(10), cts.Token); repo.Content.Add(new SettingsStorageModel() { Category = SettingsManager.FlagsCategoryName, Name = "TestFlag", Value = "True" }); Thread.Sleep(200); Assert.AreEqual(true, manager.IsFlagSet("TestFlag")); cts.Cancel(); }
public void PeriodicReaderShouldReactToFlagChanges() { Mock<ISettingsRepository> settingsRepo = new Mock<ISettingsRepository>(); _mockSettingsStorageModels.AddRange(new List<SettingsStorageModel> { new SettingsStorageModel { Category = SettingsManager.FlagsCategoryName, Name = "X", Value = "true", UpdatedAt = new DateTime(2015, 1, 1) } }); settingsRepo.Setup(x => x.ReadSettings(It.IsAny<string>())) .Returns<string>(category => _mockSettingsStorageModels); settingsRepo.Setup(x => x.ReadSettings(It.IsAny<IList<string>>(), It.IsAny<DateTime?>())) .Returns<IList<string>, DateTime?>((categories, lastChangedDate) => _mockSettingsStorageModels); var cancellationTokenSource = new CancellationTokenSource(); var manager = new SettingsManagerPeriodic(settingsRepo.Object); var initialValue = manager.IsFlagSet("X"); manager.StartReadingTask(TimeSpan.FromMilliseconds(10), cancellationTokenSource.Token); Thread.Sleep(100); var repoItem = _mockSettingsStorageModels.Single(s => s.Name == "X"); repoItem.Value = "0"; Thread.Sleep(100); Assert.AreEqual(!initialValue, manager.IsFlagSet("X")); }
public void PeriodicReaderCancel() { var repo = new InMemoryRepository(); var manager = new SettingsManagerPeriodic(repo); var settings = manager.Get<Settings>(); var cts = new CancellationTokenSource(); var task = manager.StartReadingTask(TimeSpan.FromMilliseconds(1), cts.Token); int cnt = 0; bool cancelEvent = false; manager.ReaderExecuting += (sender, args) => cnt++; manager.PeriodicReaderCanceled += (sender, args) => cancelEvent = true; Thread.Sleep(200); cts.Cancel(); Thread.Sleep(200); Assert.IsTrue(cancelEvent); Assert.IsTrue(task.IsCanceled); Assert.IsTrue(cnt > 0); }