Пример #1
0
        public async Task SimpleScheduleSuccessTestApi()
        {
            var context = _workContext.WithTag(_tag);

            AgentContractV1 agent = await _utility.SetupAgentAndQueue(_queueName, _agentName);

            EnqueueMessageContractV1 message = _utility.CreateMessage(context, agent.AgentId, _queueName);

            message.ScheduleDate = DateTime.UtcNow.AddSeconds(2);

            await _client.Message.EnqueueMessage(context, message);

            await _utility.VerifyQueue(context, _queueName, 0, 1);

            MessageContractV1 readMessage = (await _client.Message.DequeueMessageAndDelete(context, _queueName, null)).Value;

            readMessage.Should().BeNull();

            await Task.Delay(TimeSpan.FromSeconds(10));

            readMessage = (await _client.Message.DequeueMessageAndDelete(context, _queueName, null)).Value;
            _utility.VerifyMessage(message, readMessage, agent.AgentId, false);

            HistoryContractV1 history = (await _client.History.GetHistory(context, readMessage.MessageId)).Value;

            _utility.VerifyHistoryMessage(readMessage, history, _queueName, _agentName);
        }
Пример #2
0
        public async Task ClientImplicitEnqueueDequeueTest()
        {
            var context = _workContext.WithTag(_tag);

            var payload = new Payload
            {
                ProcessName = Guid.NewGuid().ToString(),
                IntValue    = 5,
            };

            await _client.Enqueue(context, payload);

            await _utility.VerifyQueue(context, _queueName, 1, 0);

            MessageEvent <Payload> readPayload = await _client.Dequeue(context, useSettle : false);

            readPayload.Should().NotBeNull();
            VerifyMessage(payload, readPayload.Message);
            readPayload.UseSettle.Should().BeFalse();

            await _utility.VerifyQueue(context, _queueName, 0, 0);

            HistoryContractV1 history = (await _client.Client.History.GetHistory(context, readPayload.Contract.MessageId)).Value;

            _utility.VerifyHistoryMessage(readPayload.Contract, history, _queueName, _agentName);
        }
Пример #3
0
        public async Task SimpleEnqueueWithLockSuccessTestApi()
        {
            var context = _workContext.WithTag(_tag);

            AgentContractV1 agent = await _utility.SetupAgentAndQueue(_queueName, _agentName);

            EnqueueMessageContractV1 message = _utility.CreateMessage(context, agent.AgentId, _queueName);

            await _client.Message.EnqueueMessage(context, message);

            await _utility.VerifyQueue(context, _queueName, 1, 0);

            MessageContractV1 readMessage = (await _client.Message.DequeueMessageWithLock(context, _queueName, agent, null)).Value;

            _utility.VerifyMessage(message, readMessage, agent.AgentId, true);

            var settleMessage = new SettleMessageContractV1
            {
                AgentId    = agent.AgentId,
                QueueName  = _queueName,
                SettleType = SettleType.Processed,
                MessageId  = readMessage.MessageId,
            };

            await _client.Message.SettleMessage(context, settleMessage);

            await _utility.VerifyQueue(context, _queueName, 0, 0);

            HistoryContractV1 history = (await _client.History.GetHistory(context, readMessage.MessageId)).Value;

            _utility.VerifyHistoryMessage(readMessage, history, _queueName, _agentName);
        }
Пример #4
0
        public async Task MultipleScheduleSuccessTestApi()
        {
            const int scheduleSize = 10;
            var       context      = _workContext.WithTag(_tag);

            AgentContractV1 agent = await _utility.SetupAgentAndQueue(_queueName, _agentName);

            var list = new List <EnqueueMessageContractV1>();

            foreach (var item in Enumerable.Range(0, scheduleSize))
            {
                EnqueueMessageContractV1 message = _utility.CreateMessage(context, agent.AgentId, _queueName);
                message.ScheduleDate = DateTime.UtcNow.AddSeconds(2);

                await _client.Message.EnqueueMessage(context, message);

                list.Add(message);
            }

            await _utility.VerifyQueue(context, _queueName, 0, scheduleSize);

            MessageContractV1 readMessage = (await _client.Message.DequeueMessageAndDelete(context, _queueName, null)).Value;

            readMessage.Should().BeNull();

            await Task.Delay(TimeSpan.FromSeconds(10));

            var readList = new List <MessageContractV1>();

            foreach (var item in Enumerable.Range(0, scheduleSize))
            {
                readMessage = (await _client.Message.DequeueMessageAndDelete(context, _queueName, null)).Value;
                readMessage.Should().NotBeNull();

                readList.Add(readMessage);
            }

            readList.Count.Should().Be(scheduleSize);

            readMessage = (await _client.Message.DequeueMessageAndDelete(context, _queueName, null)).Value;
            readMessage.Should().BeNull();

            var zip = list
                      .OrderBy(x => x.ClientMessageId)
                      .Zip(readList.OrderBy(x => x.ClientMessageId), (f, s) => new Tuple <EnqueueMessageContractV1, MessageContractV1>(f, s));

            foreach (var item in zip)
            {
                _utility.VerifyMessage(item.Item1, item.Item2, agent.AgentId, false);
            }

            await _utility.VerifyQueue(context, _queueName, 0, 0);

            foreach (var item in readList)
            {
                HistoryContractV1 history = (await _client.History.GetHistory(context, item.MessageId)).Value;
                _utility.VerifyHistoryMessage(item, history, _queueName, _agentName);
            }
        }
Пример #5
0
        public async Task ClientMultipleExplicitEnqueueDequeueProcessTest()
        {
            var       context      = _workContext.WithTag(_tag);
            var       receiveList  = new List <Tuple <Payload, MessageEvent> >();
            var       sendList     = new List <Payload>();
            const int messageCount = 10;

            CancellationTokenSource tokenSource = new CancellationTokenSource();

            int count = 0;

            Task t = Task.Run(() => _client.ProcessDequeue(
                                  context,
                                  (c, m, e) =>
            {
                receiveList.Add(new Tuple <Payload, MessageEvent>(m, e));
                Interlocked.Increment(ref count);
                return(Task.FromResult(true));
            },
                                  tokenSource.Token,
                                  useSettle: true,
                                  wait: false)
                              );

            foreach (var index in Enumerable.Range(0, messageCount))
            {
                var payload = new Payload
                {
                    ProcessName = Guid.NewGuid().ToString(),
                    IntValue    = index,
                };

                await _client.Enqueue(context, payload);

                sendList.Add(payload);
            }

            await Task.Delay(TimeSpan.FromSeconds(5));

            tokenSource.Cancel();

            t.Wait();
            count.Should().Be(messageCount);

            foreach (var index in Enumerable.Range(0, messageCount))
            {
                VerifyMessage(sendList[index], receiveList[index].Item1);

                MessageContractV1 contract = receiveList[index].Item2.Contract;
                HistoryContractV1 history  = (await _client.Client.History.GetHistory(context, contract.MessageId)).Value;
                _utility.VerifyHistoryMessage(contract, history, _queueName, _agentName);
            }
        }
Пример #6
0
        public async Task ClientExplicitEnqueueDequeueProcessTest()
        {
            var context = _workContext.WithTag(_tag);

            var payload = new Payload
            {
                ProcessName = Guid.NewGuid().ToString(),
                IntValue    = 5,
            };

            await _client.Enqueue(context, payload);

            await _utility.VerifyQueue(context, _queueName, 1, 0);

            CancellationTokenSource tokenSource = new CancellationTokenSource();

            Payload      readPayload  = null;
            MessageEvent messageEvent = null;
            int          count        = 0;

            Task t = _client.ProcessDequeue(
                context,
                (c, m, e) =>
            {
                readPayload  = m;
                messageEvent = e;
                Interlocked.Increment(ref count);
                return(Task.FromResult <bool>(true));
            },
                tokenSource.Token,
                useSettle: true,
                wait: false);

            await Task.Delay(TimeSpan.FromSeconds(5));

            tokenSource.Cancel();

            t.Wait();
            Verify.IsNotNull(nameof(messageEvent), messageEvent);
            count.Should().Be(1);
            VerifyMessage(payload, readPayload);

            await _client.Settle(context, messageEvent.Contract.MessageId, SettleType.Processed);

            await _utility.VerifyQueue(context, _queueName, 0, 0);

            HistoryContractV1 history = (await _client.Client.History.GetHistory(context, messageEvent.Contract.MessageId)).Value;

            _utility.VerifyHistoryMessage(messageEvent.Contract, history, _queueName, _agentName);
        }
Пример #7
0
        public async Task SimpleEnqueueWithLockTimeoutSuccessTestApi()
        {
            var context = _workContext.WithTag(_tag);

            AgentContractV1 agent = await _utility.SetupAgentAndQueue(_queueName, _agentName, lockValidForSec : 5);

            EnqueueMessageContractV1 message = _utility.CreateMessage(context, agent.AgentId, _queueName);

            await _client.Message.EnqueueMessage(context, message);

            await _utility.VerifyQueue(context, _queueName, 1, 0);

            MessageContractV1 readMessage = (await _client.Message.DequeueMessageWithLock(context, _queueName, agent, null)).Value;
            long saveMessageId            = readMessage.MessageId;

            _utility.VerifyMessage(message, readMessage, agent.AgentId, true);

            MessageContractV1 tempMessage = (await _client.Message.DequeueMessageWithLock(context, _queueName, agent, null)).Value;

            tempMessage.Should().BeNull();

            await Task.Delay(TimeSpan.FromSeconds(10));

            readMessage = (await _client.Message.DequeueMessageWithLock(context, _queueName, agent, null)).Value;
            _utility.VerifyMessage(message, readMessage, agent.AgentId, true);
            readMessage.MessageId.Should().Be(saveMessageId);

            var settleMessage = new SettleMessageContractV1
            {
                AgentId    = agent.AgentId,
                QueueName  = _queueName,
                SettleType = SettleType.Processed,
                MessageId  = readMessage.MessageId,
            };

            await _client.Message.SettleMessage(context, settleMessage);

            await _utility.VerifyQueue(context, _queueName, 0, 0);

            HistoryContractV1 history = (await _client.History.GetHistory(context, readMessage.MessageId)).Value;

            _utility.VerifyHistoryMessage(readMessage, history, _queueName, _agentName, retryCount: 2);
        }
        public async Task SimpleClearQueueHistoryTestApi()
        {
            var context = _workContext.WithTag(_tag);

            AgentContractV1 agent = await _utility.SetupAgentAndQueue(_queueName, _agentName);

            EnqueueMessageContractV1 message = _utility.CreateMessage(context, agent.AgentId, _queueName);

            RestResponse <EnqueuedContractV1> response = await _client.Message.EnqueueMessage(context, message);

            await _utility.VerifyQueue(context, _queueName, 1, 0);

            await _client.Management.ClearQueue(context, _queueName, true);

            await _utility.VerifyQueue(context, _queueName, 0, 0);

            HistoryContractV1 history = (await _client.History.GetHistory(context, response.Value.MessageId)).Value;

            history.Should().NotBeNull();
        }
Пример #9
0
 public void VerifyHistoryMessage(
     MessageContractV1 readMessage,
     HistoryContractV1 history,
     string queueName,
     string agentName,
     int retryCount        = 1,
     SettleType settleType = SettleType.Processed
     )
 {
     history.Should().NotBeNull();
     history.HistoryId.Should().BeGreaterOrEqualTo(0);
     history.MessageId.Should().Be(readMessage.MessageId);
     history.ActivityType.Should().Be(settleType.ToString());
     history.QueueName.Should().Be(queueName);
     history.Cv.Should().Be(readMessage.Cv);
     history.ClientMessageId.Should().Be(readMessage.ClientMessageId);
     history.Payload.Should().Be(readMessage.Payload);
     history.SettleByAgent.Should().Be(agentName);
     history.ErrorMesage.Should().BeNullOrEmpty();
     history.RetryCount.Should().Be(retryCount);
 }
Пример #10
0
        public async Task ClientExplicitEnqueueDequeueTest()
        {
            var context = _workContext.WithTag(_tag);

            var variations = new[]
            {
                new {
                    SettleType = SettleType.Processed
                },
                new {
                    SettleType = SettleType.Rejected
                },
            };

            foreach (var test in variations)
            {
                var payload = new Payload
                {
                    ProcessName = Guid.NewGuid().ToString(),
                    IntValue    = 5,
                };

                await _client.Enqueue(context, payload);

                await _utility.VerifyQueue(context, _queueName, 1, 0);

                MessageEvent <Payload> readPayload = await _client.Dequeue(context, useSettle : true);

                VerifyMessage(payload, readPayload.Message);
                readPayload.UseSettle.Should().BeTrue();

                await _client.Settle(context, readPayload, test.SettleType);

                await _utility.VerifyQueue(context, _queueName, 0, 0);

                HistoryContractV1 history = (await _client.Client.History.GetHistory(context, readPayload.Contract.MessageId)).Value;
                _utility.VerifyHistoryMessage(readPayload.Contract, history, _queueName, _agentName, settleType: test.SettleType);
            }
        }
Пример #11
0
        public async Task SimpleEnqueueSuccessTestApi()
        {
            var context = _workContext.WithTag(_tag);

            AgentContractV1 agent = await _utility.SetupAgentAndQueue(_queueName, _agentName);

            EnqueueMessageContractV1 message = _utility.CreateMessage(context, agent.AgentId, _queueName);

            await _client.Message.EnqueueMessage(context, message);

            await _utility.VerifyQueue(context, _queueName, 1, 0);

            MessageContractV1 readMessage = (await _client.Message.DequeueMessageAndDelete(context, _queueName, null)).Value;

            _utility.VerifyMessage(message, readMessage, agent.AgentId, false);

            await _utility.VerifyQueue(context, _queueName, 0, 0);

            HistoryContractV1 history = (await _client.History.GetHistory(context, readMessage.MessageId)).Value;

            _utility.VerifyHistoryMessage(readMessage, history, _queueName, _agentName);
        }
Пример #12
0
        public async Task QueueSizeLimitTestApi()
        {
            const int messageSize = 10;
            var       context     = _workContext.WithTag(_tag);

            AgentContractV1 agent = await _utility.SetupAgentAndQueue(_queueName, _agentName, queueSize : 10);

            var messageList     = new List <EnqueueMessageContractV1>();
            var readMessageList = new List <MessageContractV1>();

            foreach (int index in Enumerable.Range(0, messageSize))
            {
                EnqueueMessageContractV1 message = _utility.CreateMessage(context, agent.AgentId, _queueName);
                messageList.Add(message);

                await _client.Message.EnqueueMessage(context, message);
            }

            await Verify.AssertExceptionAsync <RestConflictException>(async() =>
            {
                EnqueueMessageContractV1 message = _utility.CreateMessage(context, agent.AgentId, _queueName);
                await _client.Message.EnqueueMessage(context, message);
            });

            await _utility.VerifyQueue(context, _queueName, messageSize, 0);

            MessageContractV1 readMessage;

            foreach (int index in Enumerable.Range(0, messageSize))
            {
                readMessage = (await _client.Message.DequeueMessageWithLock(context, _queueName, agent, null)).Value;
                readMessage.Should().NotBeNull();
                readMessageList.Add(readMessage);
            }

            readMessage = (await _client.Message.DequeueMessageWithLock(context, _queueName, agent, null)).Value;
            readMessage.Should().BeNull();

            var zip = messageList
                      .OrderBy(x => x.ClientMessageId)
                      .Zip(readMessageList.OrderBy(x => x.ClientMessageId), (f, s) => new Tuple <EnqueueMessageContractV1, MessageContractV1>(f, s));

            foreach (var item in zip)
            {
                _utility.VerifyMessage(item.Item1, item.Item2, agent.AgentId, true);
            }

            foreach (var item in readMessageList)
            {
                var settleMessage = new SettleMessageContractV1
                {
                    AgentId    = agent.AgentId,
                    QueueName  = _queueName,
                    SettleType = SettleType.Processed,
                    MessageId  = item.MessageId,
                };

                await _client.Message.SettleMessage(context, settleMessage);
            }

            await _utility.VerifyQueue(context, _queueName, 0, 0);

            foreach (var item in readMessageList)
            {
                HistoryContractV1 history = (await _client.History.GetHistory(context, item.MessageId)).Value;
                _utility.VerifyHistoryMessage(item, history, _queueName, _agentName);
            }
        }