public async Task SimpleScheduleSuccessTest() { var context = _workContext.WithTag(_tag); int agentId = await _utility.SetupAgentAndQueue(_queueName, _agentName); InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); message.ScheduleDate = DateTime.UtcNow.AddSeconds(2); await _message.EnqueueMessage(context, message); await _utility.VerifyQueue(context, _queueName, 0, 1); InternalMessageV1 readMessage = await _message.DequeueMessageAndDelete(context, _queueName); readMessage.Should().BeNull(); await Task.Delay(TimeSpan.FromSeconds(5)); readMessage = await _message.DequeueMessageAndDelete(context, _queueName); _utility.VerifyMessage(message, readMessage, agentId, false); InternalHistoryV1 history = await _management.GetHistory(context, readMessage.MessageId); _utility.VerifyHistoryMessage(readMessage, history, _queueName, _agentName); }
public async Task ListActiveQueueTest() { const int messageSize = 100; var context = _workContext.WithTag(_tag); int agentId = await _utility.SetupAgentAndQueue(_queueName, _agentName); var messageList = new List <InternalEnqueueMessageV1>(); foreach (int index in Enumerable.Range(0, messageSize)) { InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); messageList.Add(message); await _message.EnqueueMessage(context, message); } await _utility.VerifyQueue(context, _queueName, messageSize, 0); IEnumerable <InternalMessageV1> activeMessage = await _message.ListActiveMessages(context, _queueName); var zip = messageList .OrderBy(x => x.ClientMessageId) .Zip(activeMessage.OrderBy(x => x.ClientMessageId), (f, s) => new Tuple <InternalEnqueueMessageV1, InternalMessageV1>(f, s)); }
public async Task QueueAbandonTest() { var context = _workContext.WithTag(_tag); int agentId = await _utility.SetupAgentAndQueue(_queueName, _agentName); InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); await _message.EnqueueMessage(context, message); await _utility.VerifyQueue(context, _queueName, 1, 0); InternalMessageV1 readMessage = await _message.DequeueMessageWithLock(context, _queueName, agentId); _utility.VerifyMessage(message, readMessage, agentId, true); await _message.SettleMessage(context, readMessage.MessageId, agentId, SettleType.Abandon); await _utility.VerifyQueue(context, _queueName, 1, 0); readMessage = await _message.DequeueMessageWithLock(context, _queueName, agentId); _utility.VerifyMessage(message, readMessage, agentId, true); await _message.SettleMessage(context, readMessage.MessageId, agentId, SettleType.Processed); await _utility.VerifyQueue(context, _queueName, 0, 0); InternalHistoryV1 history = await _management.GetHistory(context, readMessage.MessageId); _utility.VerifyHistoryMessage(readMessage, history, _queueName, _agentName, 2); }
public async Task MultipleEnqueueWithLockSuccessTest() { const int messageSize = 100; var context = _workContext.WithTag(_tag); int agentId = await _utility.SetupAgentAndQueue(_queueName, _agentName); var messageList = new List <InternalEnqueueMessageV1>(); var readMessageList = new List <InternalMessageV1>(); foreach (int index in Enumerable.Range(0, messageSize)) { InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); messageList.Add(message); await _message.EnqueueMessage(context, message); } await _utility.VerifyQueue(context, _queueName, messageSize, 0); InternalMessageV1 readMessage; foreach (int index in Enumerable.Range(0, messageSize)) { readMessage = await _message.DequeueMessageWithLock(context, _queueName, agentId); readMessage.Should().NotBeNull(); readMessageList.Add(readMessage); } readMessage = await _message.DequeueMessageWithLock(context, _queueName, agentId); readMessage.Should().BeNull(); var zip = messageList .OrderBy(x => x.ClientMessageId) .Zip(readMessageList.OrderBy(x => x.ClientMessageId), (f, s) => new Tuple <InternalEnqueueMessageV1, InternalMessageV1>(f, s)); foreach (var item in zip) { _utility.VerifyMessage(item.Item1, item.Item2, agentId, true); } foreach (var item in readMessageList) { await _message.SettleMessage(context, item.MessageId, agentId, SettleType.Processed); } await _utility.VerifyQueue(context, _queueName, 0, 0); foreach (var item in readMessageList) { InternalHistoryV1 history = await _management.GetHistory(context, item.MessageId); _utility.VerifyHistoryMessage(item, history, _queueName, _agentName); } }
private async Task WriteQueue(IWorkContext context, int agentId, CancellationToken token) { while (!token.IsCancellationRequested) { try { await Task.Delay(TimeSpan.FromMilliseconds(10), token); } catch { continue; } InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); await _message.EnqueueMessage(context, message); Interlocked.Increment(ref _writeCounter); } }
public async Task SimpleClearQueueHistoryTest() { var context = _workContext.WithTag(_tag); int agentId = await _utility.SetupAgentAndQueue(_queueName, _agentName); InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); long messageId = await _message.EnqueueMessage(context, message); await _utility.VerifyQueue(context, _queueName, 1, 0); await _management.ClearQueue(context, _queueName, true); await _utility.VerifyQueue(context, _queueName, 0, 0); InternalHistoryV1 history = await _management.GetHistory(context, messageId); history.Should().NotBeNull(); }
public void VerifyMessage(InternalEnqueueMessageV1 message, InternalMessageV1 readMessage, int agentId, bool testLock) { readMessage.Should().NotBeNull(); readMessage.QueueId.Should().BeGreaterOrEqualTo(0); readMessage.MessageId.Should().BeGreaterOrEqualTo(0); readMessage.CreatedByAgentId.Should().Be(agentId); readMessage.ClientMessageId.Should().Be(message.ClientMessageId); readMessage.Cv.Should().Be(message.Cv); readMessage.Payload.Should().Be(message.Payload); if (testLock) { readMessage.LockedByAgentId.Should().Be(agentId); } WorkRequest readWorkRequest = readMessage.Deserialize <WorkRequest>(); readWorkRequest.Should().NotBeNull(); readWorkRequest.ProcessName.Should().Be("this process"); readWorkRequest.Parameters.Should().NotBeNull(); readWorkRequest.Parameters.Count().Should().Be(3); }
public async Task <long> EnqueueMessage(IWorkContext context, InternalEnqueueMessageV1 message) { Verify.IsNotNull(nameof(message), message); IEnumerable <ReturnIdRow> rows; try { if (message.ScheduleDate != null) { rows = await new SqlExec(_configuration.SqlConfiguration) .SetCommand("[App].[Create-Schedule]") .AddParameter(nameof(message.QueueName), message.QueueName) .AddParameter(nameof(message.AgentId), message.AgentId) .AddParameter(nameof(message.ClientMessageId), message.ClientMessageId) .AddParameter(nameof(message.Cv), message.Cv) .AddParameter(nameof(message.Payload), message.Payload) .AddParameter(nameof(message.ScheduleDate), (DateTime)message.ScheduleDate) .Execute(context, ReturnIdRow.Read); return(rows.First().Id); } rows = await new SqlExec(_configuration.SqlConfiguration) .SetCommand("[App].[Enqueue-Message]") .AddParameter(nameof(message.QueueName), message.QueueName) .AddParameter(nameof(message.AgentId), message.AgentId) .AddParameter(nameof(message.ClientMessageId), message.ClientMessageId) .AddParameter(nameof(message.Cv), message.Cv) .AddParameter(nameof(message.Payload), message.Payload) .Execute(context, ReturnIdRow.Read); return(rows.First().Id); } catch (SqlException ex) { throw new QueueFullException(message.ScheduleDate == null ? "Enqueue" : "Schedule", context, ex); } }
public async Task SimpleEnqueueSuccessTest() { var context = _workContext.WithTag(_tag); int agentId = await _utility.SetupAgentAndQueue(_queueName, _agentName); InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); await _message.EnqueueMessage(context, message); await _utility.VerifyQueue(context, _queueName, 1, 0); InternalMessageV1 readMessage = await _message.DequeueMessageAndDelete(context, _queueName); _utility.VerifyMessage(message, readMessage, agentId, false); await _utility.VerifyQueue(context, _queueName, 0, 0); InternalHistoryV1 history = await _management.GetHistory(context, readMessage.MessageId); _utility.VerifyHistoryMessage(readMessage, history, _queueName, _agentName); }
public async Task SimpleEnqueueWithLockTimeoutSuccessTest() { var context = _workContext.WithTag(_tag); int agentId = await _utility.SetupAgentAndQueue(_queueName, _agentName, lockValidForSec : 5); InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); await _message.EnqueueMessage(context, message); await _utility.VerifyQueue(context, _queueName, 1, 0); InternalMessageV1 readMessage = await _message.DequeueMessageWithLock(context, _queueName, agentId); long saveMessageId = readMessage.MessageId; _utility.VerifyMessage(message, readMessage, agentId, true); InternalMessageV1 tempMessage = await _message.DequeueMessageWithLock(context, _queueName, agentId); tempMessage.Should().BeNull(); await Task.Delay(TimeSpan.FromSeconds(10)); readMessage = await _message.DequeueMessageWithLock(context, _queueName, agentId); _utility.VerifyMessage(message, readMessage, agentId, true); readMessage.MessageId.Should().Be(saveMessageId); await _message.SettleMessage(context, readMessage.MessageId, agentId, SettleType.Processed); await _utility.VerifyQueue(context, _queueName, 0, 0); InternalHistoryV1 history = await _management.GetHistory(context, readMessage.MessageId); _utility.VerifyHistoryMessage(readMessage, history, _queueName, _agentName, retryCount: 2); }
public async Task MultipleScheduleSuccessTest() { const int scheduleSize = 10; var context = _workContext.WithTag(_tag); int agentId = await _utility.SetupAgentAndQueue(_queueName, _agentName); var list = new List <InternalEnqueueMessageV1>(); foreach (var item in Enumerable.Range(0, scheduleSize)) { InternalEnqueueMessageV1 message = _utility.CreateMessage(context, agentId, _queueName); message.ScheduleDate = DateTime.UtcNow.AddSeconds(2); await _message.EnqueueMessage(context, message); list.Add(message); } await _utility.VerifyQueue(context, _queueName, 0, scheduleSize); InternalMessageV1 readMessage = await _message.DequeueMessageAndDelete(context, _queueName); readMessage.Should().BeNull(); await Task.Delay(TimeSpan.FromSeconds(5)); var readList = new List <InternalMessageV1>(); foreach (var item in Enumerable.Range(0, scheduleSize)) { readMessage = await _message.DequeueMessageAndDelete(context, _queueName); readMessage.Should().NotBeNull(); readList.Add(readMessage); } readList.Count.Should().Be(scheduleSize); readMessage = await _message.DequeueMessageAndDelete(context, _queueName); readMessage.Should().BeNull(); var zip = list .OrderBy(x => x.ClientMessageId) .Zip(readList.OrderBy(x => x.ClientMessageId), (f, s) => new Tuple <InternalEnqueueMessageV1, InternalMessageV1>(f, s)); foreach (var item in zip) { _utility.VerifyMessage(item.Item1, item.Item2, agentId, false); } await _utility.VerifyQueue(context, _queueName, 0, 0); foreach (var item in readList) { InternalHistoryV1 history = await _management.GetHistory(context, item.MessageId); _utility.VerifyHistoryMessage(item, history, _queueName, _agentName); } }