public async Task Cleanup() { var config = _provider.QueryModule <IMakabaNetworkConfig>(); config.BaseUri = null; await config.Save(); await _collection.Dispose(); _collection = null; _provider = null; }
public async Task Cleanup() { await _collection.Dispose(); _modules = null; _collection = null; }
public async Task Cleanup() { await _collection.Dispose(); _collection = null; _provider = null; _store = null; }
public async Task TestSuspend() { var collection = new ModuleCollection(); var modules = new SuspensionAwareModule[] { new SuspensionAwareModule(true), new SuspensionAwareModule(true), new SuspensionAwareModule(true), new SuspensionAwareModule(true), }; foreach (var m in modules) { var lt = m.QueryView <IModuleLifetime>(); Assert.IsNotNull(lt, "Модуль должен поддерживать управление временем жизни"); Assert.IsTrue(lt.IsSuspendAware, "Модуль должен поддерживать приостановку работы"); } foreach (var m in modules) { collection.RegisterModule <SuspensionAwareModule, ISuspensionAwareModule>(m); } await collection.Seal(); foreach (var m in modules) { Assert.IsFalse(m.IsSuspended, "Модуль не должен быть приостановлен"); } await collection.Suspend(); foreach (var m in modules) { Assert.IsTrue(m.IsSuspended, "Модуль должен быть приостановлен"); } await collection.Resume(); foreach (var m in modules) { Assert.IsFalse(m.IsSuspended, "Модуль не должен быть приостановлен после Resume"); Assert.IsTrue(m.IsAllResumed, "Должен быть вызван метод AllResumed()"); Assert.AreEqual(1, m.AllResumedCount, "Метод AllResumed() должен быть вызван один раз"); } await collection.Dispose(); }
public async Task TestAttachedLifetime() { var collection = new ModuleCollection(); await collection.Seal(); var provider = collection.GetModuleProvider(); var modules = new SuspensionAwareModule[] { new SuspensionAwareModule(true, true), new SuspensionAwareModule(true, true), new SuspensionAwareModule(true, true), new SuspensionAwareModule(true, true), }; var suspendTasks = new List <Task>(); var resumeTasks = new List <Task>(); var disposeTasks = new List <Task>(); foreach (var m in modules) { var lt = m.QueryView <IModuleLifetime>(); var lte = m.QueryView <IModuleLifetimeEvents>(); Assert.IsNotNull(lt, "Модуль должен поддерживать управление временем жизни"); Assert.IsNotNull(lte, "Модуль должен поддерживать события времени жизни"); await lt.InitializeModule(provider); var tcsd = new TaskCompletionSource <bool>(); var tcss = new TaskCompletionSource <bool>(); var tcsr = new TaskCompletionSource <bool>(); var tcsar = new TaskCompletionSource <bool>(); lte.Disposed += _ => { tcsd.SetResult(true); }; lte.Suspended += _ => { tcss.SetResult(true); }; lte.Resumed += _ => { tcsr.SetResult(true); }; lte.AllResumed += _ => { tcsar.SetResult(true); }; disposeTasks.Add(tcsd.Task); suspendTasks.Add(tcss.Task); resumeTasks.Add(tcsr.Task); resumeTasks.Add(tcsar.Task); } foreach (var m in modules) { var lt = m.QueryView <IModuleLifetime>(); await lt.AllModulesInitialized(); } foreach (var m in modules) { Assert.IsFalse(m.IsSuspended, "Модуль не должен быть приостановлен"); } await collection.Suspend(); var suspendWaiter = new Task[] { Task.WhenAll(suspendTasks.ToArray()), Task.Delay(TimeSpan.FromSeconds(10)) }; var suspendResult = await Task.WhenAny(suspendWaiter); Assert.AreSame(suspendWaiter[0], suspendResult, "Сработал таймаут по событию Suspended"); foreach (var m in modules) { Assert.IsTrue(m.IsSuspended, "Модуль должен быть приостановлен"); } await collection.Resume(); var resumeWaiter = new Task[] { Task.WhenAll(resumeTasks.ToArray()), Task.Delay(TimeSpan.FromSeconds(10)) }; var resumeResult = await Task.WhenAny(resumeWaiter); Assert.AreSame(resumeWaiter[0], resumeResult, "Сработал таймаут по событию Resumed"); foreach (var m in modules) { Assert.IsFalse(m.IsSuspended, "Модуль не должен быть приостановлен после Resume"); Assert.IsTrue(m.IsAllResumed, "Должен быть вызван метод AllResumed()"); Assert.AreEqual(1, m.AllResumedCount, "Метод AllResumed() должен быть вызван один раз"); } await collection.Dispose(); var disposeWaiter = new Task[] { Task.WhenAll(disposeTasks.ToArray()), Task.Delay(TimeSpan.FromSeconds(10)) }; var disposeResult = await Task.WhenAny(disposeWaiter); Assert.AreSame(disposeWaiter[0], disposeResult, "Сработал таймаут по событию Disposed"); foreach (var m in modules) { Assert.IsTrue(m.IsDisposed, "Модуль должен быть завершён"); } }