Exemplo n.º 1
0
        public async Task ProcessQueueAsync_Test()
        {
            //Arrage:
            await InitQueueDataAsync();

            var conversation = DefaultConversation.DeepCopy();
            var mock_conversationCtrlAppService = new Mock <IConversationCtrlAppService>();
            var mock_notifySessionActor         = new Mock <INotifySessionActor>();

            mock_conversationCtrlAppService.Setup(u => u.DeleteAsync(It.IsAny <Guid>())).Returns(Task.CompletedTask);
            mock_conversationCtrlAppService.Setup(u => u.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(conversation);
            mock_notifySessionActor.Setup(u => u.PushMsgNotifyAsync(It.IsAny <MessageNotifyDto>())).Returns(Task.CompletedTask);
            Func <Guid, INotifySessionActor> notifySessionActorFactory = (id) => mock_notifySessionActor.Object;

            //Act:
            CancellationTokenSource source = new CancellationTokenSource();

            ThreadPool.QueueUserWorkItem(u =>
            {
                Thread.Sleep(200);
                source.Cancel();
            });

            ConversationMsgQueueProcessor.IsInUnitTest = true;
            await ConversationMsgQueueProcessor.ProcessQueueAsync(stateManager,
                                                                  mock_conversationCtrlAppService.Object, notifySessionActorFactory, source.Token);

            //Assert:
            var msg1 = DefaultConversationMsg.DeepCopy();

            using (var tx = stateManager.CreateTransaction())
            {
                Assert.AreEqual(0, MessageProccessQueue.Count);
                var msgIndex = await MessageIndexDict.TryGetValueAsync(tx, msg1.ConversationId);

                var msgIds = msgIndex.Value;
                var msg    = await MessageListDict.TryGetValueAsync(tx, msgIds[0]);

                Assert.IsTrue(msgIndex.HasValue);
                Assert.AreEqual(1, msgIds.Count);
                Assert.AreEqual(msg1, msg.Value);
                mock_conversationCtrlAppService.Verify(u => u.GetByIdAsync(It.IsAny <Guid>()), Times.Once);
                mock_notifySessionActor.Verify(u => u.PushMsgNotifyAsync(It.IsAny <MessageNotifyDto>()), Times.AtLeast(2));
            }
        }
Exemplo n.º 2
0
        protected async Task InitDictDataAsync()
        {
            await InitDictAsync();

            var conversation = DefaultConversation.DeepCopy(); //need deep copy
            var message1     = DefaultConversationMsg.DeepCopy();
            var message2     = DefaultConversationMsg2.DeepCopy();

            using (var tx = stateManager.CreateTransaction())
            {
                await dictKeyToId.AddOrUpdateAsync(tx, conversation.Key, conversation.Id, (k, v) => conversation.Id);

                await dictIdToEntity.AddOrUpdateAsync(tx, conversation.Id, conversation, (k, v) => conversation);

                await MessageIndexDict.SetAsync(tx, message1.ConversationId, new List <Guid>() { message1.Id, message2.Id });

                await MessageListDict.SetAsync(tx, message1.Id, message1);

                await MessageListDict.SetAsync(tx, message2.Id, message2);

                await tx.CommitAsync();
            }
        }