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