コード例 #1
0
        public void Sagas_With_Locks_Are_Correctly_Started_And_10_Non_Parallel_Messages_Are_Correlated()
        {
            var sagaId = Guid.NewGuid();

            var container = new HandlersContainer(SERVICENAME, true);

            Assert.IsTrue(container.messageToSagaDictionary[typeof(SimpleSagaStartingMessage)].Count == 1);

            container.HandleAsync(new SimpleSagaStartingMessage()
            {
                Id = sagaId
            }, null).Wait();

            for (int i = 0; i < 10; i++)
            {
                container.HandleAsync(new SimpleSagaIntermediateMessage()
                {
                    Id = sagaId
                }, null).Wait();
            }

            var lockSaga        = false;
            var sagaPersistence = new SagaAzureStoragePersistence(new SagaAzureStorageLocker(), lockSaga);

            var sagaData = sagaPersistence.GetSagaDataAsync <SimpleTestSagaData>("SimpleTestSaga", sagaId.ToString()).Result as SimpleTestSagaData;

            Assert.IsTrue(sagaData.Counter == 11);

            container.HandleAsync(new SimpleSagaTerminatingMessage()
            {
                Id = sagaId
            }, null).Wait();
        }
コード例 #2
0
        public void Sagas_With_Events_Multiple_Saga_Can_Receive_An_Event()
        {
            InvocationCounter.Instance.Reset();

            var sagaId1 = Guid.NewGuid();
            var sagaId2 = Guid.NewGuid();

            var container = new HandlersContainer(SERVICENAME, true);

            Assert.IsTrue(container.messageToSagaDictionary[typeof(EventSagaStartingMessage)].Count == 1);

            container.HandleAsync(new EventSagaStartingMessage()
            {
                Id = sagaId1
            }, null).Wait();
            container.HandleAsync(new EventSagaStartingMessage()
            {
                Id = sagaId2
            }, null).Wait();

            container.HandleAsync(new EventSagaIntermediateMessage()
            {
            }, null).Wait();

            Assert.IsTrue(InvocationCounter.Instance.Counter == 2);

            container.HandleAsync(new EventSagaTerminatingMessage()
            {
                Id = sagaId1
            }, null).Wait();
            container.HandleAsync(new EventSagaTerminatingMessage()
            {
                Id = sagaId2
            }, null).Wait();
        }
コード例 #3
0
        public void Sagas_With_Locks_Lock_is_freed_in_exception()
        {
            var sagaId = Guid.NewGuid();

            var container = new HandlersContainer(SERVICENAME, true);

            Assert.IsTrue(container.messageToSagaDictionary[typeof(ErrorSagaStartingMessage)].Count == 1);

            container.HandleAsync(new ErrorSagaStartingMessage()
            {
                Id = sagaId
            }, null).Wait();

            try
            {
                container.HandleAsync(new ErrorSagaIntermediateMessage()
                {
                    Id = sagaId
                }, null).Wait();
            }
            catch
            { }

            var locker = new SagaAzureStorageLocker();

            var lease = locker.CreateLock(ErrorTestSaga.PARTITION_KEY + sagaId.ToString()).Result;

            locker.DeleteLock(ErrorTestSaga.PARTITION_KEY + sagaId.ToString(), lease).Wait();

            container.HandleAsync(new ErrorSagaTerminatingMessage()
            {
                Id = sagaId
            }, null).Wait();
        }
コード例 #4
0
        public void Sagas_With_Locks_Can_Be_Singletons()
        {
            var sagaId = Guid.NewGuid();

            var container = new HandlersContainer(SERVICENAME, true);

            Assert.IsTrue(container.messageToSagaDictionary[typeof(SingletonSagaStartingMessage)].Count == 1);

            container.HandleAsync(new SingletonSagaStartingMessage()
            {
                Id = sagaId
            }, null).Wait();

            container.HandleAsync(new SingletonSagaStartingMessage()
            {
                Id = sagaId
            }, null).Wait();

            var lockSaga        = false;
            var sagaPersistence = new SagaAzureStoragePersistence(new SagaAzureStorageLocker(), lockSaga);

            var sagaData = sagaPersistence.GetSagaDataAsync <SingletonTestSagaData>("SingletonTestSaga", sagaId.ToString()).Result as SingletonTestSagaData;

            Assert.IsTrue(sagaData.Counter == 1);
        }
コード例 #5
0
        public void HandlersContainer_HandlerNotFoundForThisMessage()
        {
            var container = new HandlersContainer();

            Assert.IsTrue(container.messageHandlersDictionary[typeof(TestMessage)].Count == 2);

            container.HandleAsync(new TestMessageHandler2(), null).Wait();
        }
        public void HandlersContainer_IHandle2HandlersInOneClass()
        {
            InvocationCounter.Instance.Reset();
            var container = new HandlersContainer(SERVICENAME);

            container.HandleAsync(new ClassWithTwoHandlersMessage1(), null).Wait();
            container.HandleAsync(new ClassWithTwoHandlersMessage2(), null).Wait();

            Assert.IsTrue(InvocationCounter.Instance.Counter == 2);
        }
コード例 #7
0
        public void DI_Nominal()
        {
            var container = new HandlersContainer();

            HandlersContainer.AddDependency <IUoWTest, UoWTest>();

            Assert.IsTrue(container.messageHandlersDictionary[typeof(DIMessage)].Count == 1);

            container.HandleAsync(new DIMessage(), null).Wait();
        }
コード例 #8
0
        public void HandlersContainer_IHandleTypesAreCorrectlyInvoked()
        {
            InvocationCounter.Instance.Reset();

            var container = new HandlersContainer();

            Assert.IsTrue(container.messageHandlersDictionary[typeof(TestMessage)].Count == 2);

            container.HandleAsync(new TestMessage(), null).Wait();

            Assert.IsTrue(InvocationCounter.Instance.Counter == 2);
        }
コード例 #9
0
        public static HttpResponseMessage RunGetPaymentsByUser([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, ILogger log)
        {
            log.LogInformation("GetPaymentsByUser received a request.");

            var repository = HandlersContainer.SolveDependency <IPaymentsRepository>();

            var payments = repository.GetOrdersPayed();

            return(payments == null
                ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
                : req.CreateResponse(HttpStatusCode.OK, payments));
        }
コード例 #10
0
        public void HandlersContainer_HandleAsync_Sends_To_Delay_If_Some_Delay_Is_Left_2()
        {
            InvocationCounter.Instance.Reset();

            var container = new HandlersContainer();

            HandlersContainer.AddDependencyWithInstance <ISendMessages>(new AzureStorageQueueSendTransportShortMaxDelay(HandlersContainer.SolveDependency <ISerializeMessages>()));


            var message = new TestMessage()
            {
                SomeData = "delayed"
            };

            var serializer = HandlersContainer.SolveDependency <ISerializeMessages>();


            SendOnlyBus.SendAsync(message, SERVICENAME, TimeSpan.FromSeconds(15), serializer, new AzureStorageQueueSendTransportShortMaxDelay(serializer)).Wait();

            string stringMessage = null;

            do
            {
                stringMessage = QueueReader.ReadOneMessageFromQueueAsync(SERVICENAME).Result;
            }while (string.IsNullOrEmpty(stringMessage));

            container.HandleAsync(stringMessage, null).Wait();

            Assert.IsTrue(InvocationCounter.Instance.Counter == 0, "message not delayed");


            do
            {
                stringMessage = QueueReader.ReadOneMessageFromQueueAsync(SERVICENAME).Result;
            }while (string.IsNullOrEmpty(stringMessage));

            container.HandleAsync(stringMessage, null).Wait();

            Assert.IsTrue(InvocationCounter.Instance.Counter == 0, "message not delayed 2");

            do
            {
                stringMessage = QueueReader.ReadOneMessageFromQueueAsync(SERVICENAME).Result;
            }while (string.IsNullOrEmpty(stringMessage));

            container.HandleAsync(stringMessage, null).Wait();


            Assert.IsTrue(InvocationCounter.Instance.Counter == 2, "message delayed more than once");
        }
コード例 #11
0
        public void Sagas_With_Locks_Are_Correctly_Started_And_10_Parallel_Messages_Are_Correlated()
        {
            InvocationCounter.Instance.Reset();
            var sagaId = Guid.NewGuid();

            var container = new HandlersContainer(SERVICENAME, true);

            Assert.IsTrue(container.messageToSagaDictionary[typeof(SimpleSagaStartingMessage)].Count == 1);

            container.HandleAsync(new SimpleSagaStartingMessage()
            {
                Id = sagaId
            }, null).Wait();

            Parallel.For(0, 10, i =>
            {
                bool retry = true;
                while (retry)
                {
                    try
                    {
                        container.HandleAsync(new SimpleSagaIntermediateMessage()
                        {
                            Id = sagaId
                        }, null).Wait();
                        retry = false;
                    }
                    catch (Exception)
                    {
                    }
                }
            });

            var lockSaga        = false;
            var sagaPersistence = new SagaAzureStoragePersistence(new SagaAzureStorageLocker(), lockSaga);

            var sagaData = sagaPersistence.GetSagaDataAsync <SimpleTestSagaData>("SimpleTestSaga", sagaId.ToString()).Result as SimpleTestSagaData;

            Assert.IsTrue(sagaData.Counter == 11);

            Assert.IsTrue(InvocationCounter.Instance.Counter == 11);

            container.HandleAsync(new SimpleSagaTerminatingMessage()
            {
                Id = sagaId
            }, null).Wait();
        }
コード例 #12
0
        public void Sagas_With_Locks_Are_Correctly_Started_And_A_Message_Is_Not_Correlated()
        {
            var sagaId = Guid.NewGuid();

            var container = new HandlersContainer(SERVICENAME, true);

            Assert.IsTrue(container.messageToSagaDictionary[typeof(SimpleSagaStartingMessage)].Count == 1);

            container.HandleAsync(new SimpleSagaStartingMessage()
            {
                Id = sagaId
            }, null).Wait();

            //non correlating message
            container.HandleAsync(new SimpleSagaIntermediateMessage()
            {
                Id = Guid.NewGuid()
            }, null).Wait();
        }
コード例 #13
0
        public void DI_Dependency_not_found()
        {
            var container = new HandlersContainer();

            HandlersContainer.ClearDependencies();

            Assert.IsTrue(container.messageHandlersDictionary[typeof(DIMessage)].Count == 1);


            try
            {
                container.HandleAsync(new DIMessage(), null).Wait();
            }
            catch (Exception ex)
            {
                Assert.IsTrue(ex.InnerException.Message.Contains("No depedency can be solved"));
                throw ex;
            }
        }
コード例 #14
0
        public void BigMessage_Bug_Small_After_Big_Mixes_Message_In_File_Flag()
        {
            BlobReader.DeleteFilesAsync().Wait();
            QueueReader.CleanQueueAsync(SERVICENAME).Wait();

            InvocationCounter.Instance.Reset();

            var container = new HandlersContainer(SERVICENAME);

            var message = new BigMessage2();

            message.Data = new string('*', 66000);

            SendOnlyBus.SendAsync(message, SERVICENAME).Wait();

            var stringMessage = QueueReader.ReadOneMessageFromQueueAsync(SERVICENAME).Result;

            container.HandleAsync(stringMessage, null).Wait();

            Assert.IsTrue(BlobReader.ListFilesAsync().Result.Count() == 0);
        }
コード例 #15
0
        public void BigMessage_Going_To_File_In_Send()
        {
            BlobReader.DeleteFilesAsync().Wait();
            QueueReader.CleanQueueAsync(SERVICENAME).Wait();

            InvocationCounter.Instance.Reset();

            var container = new HandlersContainer(SERVICENAME);

            var message = new BigMessage();

            message.Data = new string('*', 66000);

            SendOnlyBus.SendAsync(message, SERVICENAME).Wait();

            var stringMessage = QueueReader.ReadOneMessageFromQueueAsync(SERVICENAME).Result;

            container.HandleAsync(stringMessage, null).Wait();

            Assert.IsTrue(InvocationCounter.Instance.Counter == 1);
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: p1p3/microsoft-luis-rx
        static void Main(string[] args)
        {
            HandlersContainer.Config();

            luisClient = new LuisClient(AppId, SubscriptionKey);


            crisClient = new CrisReactiveClient("fd63977286fb4fe5bb91b63502dfbad3",
                                                "https://08c41aa65fce4d7e93b55bdbfa28066e.api.cris.ai/ws/cris/speech/recognize/continuous",
                                                "https://westus.api.cognitive.microsoft.com/sts/v1.0/issueToken");

            crisClient.MicStatus.Subscribe(recording => Console.WriteLine($"Recording {recording}"));
            crisClient.ConversationError.Subscribe(error => Console.WriteLine(error));

            Console.WriteLine("Let me know");
            var userInput = ConsoleInput();

            userInput.FlatMap(ActLuisReactive)
            .Subscribe(Console.WriteLine);


            crisClient.StartMicAndRecognition()
            .FlatMap(result =>
            {
                var textResult = result.Results.Select(crisResult => crisResult.DisplayText);
                var fullText   = string.Join(" ", textResult);
                return(fullText);
            }).Buffer(new TimeSpan(0, 0, 0, 10))
            .FlatMap(text => ActLuisReactive(text.ToString()))
            .Subscribe(chars => Console.WriteLine(String.Join("", chars)));



            while (true)
            {
                ;
            }
        }
コード例 #17
0
        public void Sagas_With_Locks_Are_Correctly_Scanned()
        {
            var container = new HandlersContainer(SERVICENAME, true);

            Assert.IsTrue(container.messageToSagaDictionary[typeof(SimpleSagaStartingMessage)].Count == 1);
        }
コード例 #18
0
ファイル: Options.cs プロジェクト: KissLog-net/KissLog.Sdk
 public Options()
 {
     Handlers = new HandlersContainer();
 }
コード例 #19
0
 static CommandsReceiverFunction()
 {
     HandlersContainer.AddDependency <IPaymentsRepository, InMemoryPaymentsRepository>();
 }
コード例 #20
0
 static ShippingService()
 {
     HandlersContainer.AddDependency <IShippingRepository, InMemoryShippingRepository>();
 }
コード例 #21
0
        public void HandlersContainer_IHandleTypesAreCorrectlyScanned()
        {
            var container = new HandlersContainer();

            Assert.IsTrue(container.messageHandlersDictionary[typeof(TestMessage)].Count == 2);
        }
コード例 #22
0
        public AFBusService(IHubContext <Events> hubcontext)
        {
            this.hubcontext = hubcontext;

            HandlersContainer.AddDependencyWithInstance <IHubContext <Events> >(hubcontext);
        }