Esempio n. 1
0
    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);
        }
Esempio n. 3
0
    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);
            }
        }
    }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
        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);
        }