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)); } }
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(); } }