public async Task Try() { var persister = new InMemorySagaPersister(); var inbox = new InMemoryInbox(); var dispatcher = new FakeDispatcher(); var manager = new SagaManager(persister, inbox, dispatcher); await manager.Process <SagaData>("messageId", "correlationId", new ContextBag(), HandlerCallback); var dataContainer = await persister.LoadByCorrelationId("correlationId"); var sagaData = (SagaData)dataContainer.SagaData; Assert.AreEqual(1, sagaData.Counter); }
public void StoreRestore1() { var epm = new EndpointManager(); var sp = new Services(epm); var frm = new FakeResourceManager(); var mgr2 = new SagaManager(sp); var rm = new ResourceManager(sp); var mgr = new SagaManager(sp); var pmr = new PluginManager(sp); String pluginPath = ChatbotTests.GetPluginPath(); var configuration = new ConfigurationBuilder().Build(); //ProcS.RegisterSagas(rm, mgr); //ProcS.RegisterActivities(rm); //ProcS.RegisterSagas(frm, mgr2); //ProcS.RegisterActivities(frm); pmr.LoadPlugins(pluginPath, configuration); pmr.RegisterResources(rm, mgr); pmr.RegisterResources(frm, mgr2); var impl = new Dictionary <Type, Type> { { typeof(IIncomingMessage), typeof(BotIncMess) }, { typeof(IKeyboard), null } }; //impl.Add(typeof(BotCore.IButton), typeof(Button)); BaseClass.TestRegistred(rm, frm.TheList, impl); }
async Task ProcessMessage(SagaManager managerA, TestController testController) { var completed = false; while (!completed) { try { await managerA.Process <SagaData>("messageId", "correlationId", new ContextBag(), HandlerCallback); completed = true; testController.Complete(); } catch (ConcurrencyException e) { //Swallow and retry } catch (Exception e) { Console.WriteLine(e.Message); } } }
public async Task PerformScenario(string scenario) { var controller = new TestController(scenario); var persister = new InMemorySagaPersister(); var inbox = new InMemoryInbox(); var dispatcher = new FakeDispatcher(); var persisterA = new TestingSagaDataPersister(persister, inbox, 'A', controller.GetBarrier); var persisterB = new TestingSagaDataPersister(persister, inbox, 'B', controller.GetBarrier); var managerA = new SagaManager(persisterA, persisterA, dispatcher); var managerB = new SagaManager(persisterB, persisterB, dispatcher); var processA = Task.Run(() => ProcessMessage(managerA, controller)); var processB = Task.Run(() => ProcessMessage(managerB, controller)); var done = Task.WhenAll(processA, processB); await done.ConfigureAwait(false); var dataContainer = await persister.LoadByCorrelationId("correlationId"); var sagaData = (SagaData)dataContainer.SagaData; Assert.AreEqual(1, sagaData.Counter); }
public async Task RunWorkflow() { var nm = new NotifyManager(); var configuration = new ConfigurationBuilder().Build(); var scriptEngine = new ScriptEngine(); var lg = new A2v10.ProcS.Tests.FakeLogger(); var epm = new EndpointManager(); var sp = new Services(epm); var rm = new ResourceManager(sp); var storage = new A2v10.ProcS.Tests.FakeStorage(rm, "../../../workflows/"); var repository = new Repository(storage, storage, configuration); var mgr = new SagaManager(sp); var pmr = new PluginManager(sp); String pluginPath = ChatbotTests.GetPluginPath(); ProcS.RegisterSagas(rm, mgr, scriptEngine, repository); ProcS.RegisterActivities(rm); pmr.LoadPlugins(pluginPath, configuration); pmr.RegisterResources(rm, mgr); var taskManager = new SyncTaskManager(); var keeper = new InMemorySagaKeeper(mgr.Resolver); var bus = new ServiceBus(taskManager, keeper, lg, nm); var engine = new WorkflowEngine(repository, bus, scriptEngine, lg, nm); sp.Add(bus); sp.Add(engine); var param = new DynamicObject { ["ChatId"] = "0c3af6d2-0000-0000-d2f6-3a0c00000000" }; IInstance inst = await engine.StartWorkflow(new Identity("ChatBotTest.json"), param); await bus.Process(); var plug = pmr.GetPlugin <Plugin>(Plugin.Name); await plug.GetBotAsync(BotEngine.Mocking, "TestBot"); var m1json = msg1.Replace('\'', '"'); var m1do = DynamicObjectConverters.FromJson(m1json); var m1 = rm.Unwrap <IMessage>(m1do); bus.Send(m1); await bus.Process(); var ni = await repository.Get(inst.Id); Assert.AreEqual("WaitForName", ni.CurrentState); }