public void Receive_with_non_empty_queue_waits_time_specified_for_max_num_messages() { var qUrl = helper.CreateQueue(); helper.SendMessages(qUrl, count: 3); var sw = Stopwatch.StartNew(); var response = client.ReceiveMessage(new ReceiveMessageRequest { QueueUrl = qUrl, MaxNumberOfMessages = 4, VisibilityTimeout = 30, WaitTimeSeconds = 2 }); sw.Stop(); SqsTestAssert.FakeEqualRealGreater(3, 1, response.Messages.Count); if (SqsTestAssert.IsFakeClient) { // SQS support for long polling doesn't guarantee a specific wait time oddly Assert.GreaterOrEqual(sw.ElapsedMilliseconds, 2000); } }
public void Can_remove_empty_temp_queues() { //Clean up sqsQueueManager.RemoveEmptyTemporaryQueues(DateTime.UtcNow.AddDays(5).ToUnixTime()); var nonEmptyTempQueue = sqsQueueManager.CreateQueue(QueueNames.GetTempQueueName()); sqsQueueManager.SqsClient.SendMessage(new SendMessageRequest(nonEmptyTempQueue.QueueUrl, "Just some text")); sqsQueueManager.SqsClient.SendMessage(new SendMessageRequest(nonEmptyTempQueue.QueueUrl, "Just some more text")); var emptyTempQueue1 = sqsQueueManager.CreateQueue(QueueNames.GetTempQueueName()); var emptyTempQueue2 = sqsQueueManager.CreateQueue(QueueNames.GetTempQueueName()); var emptyTempQueueNotCached = sqsQueueManager.CreateQueue(QueueNames.GetTempQueueName()); if (!SqsTestAssert.IsFakeClient) { // List queue doesn't return newly created queues for a bit, so if this a "real", we skip this part sqsQueueManager.QueueNameMap.TryRemove(emptyTempQueueNotCached.QueueName, out _); } var countOfQueuesRemoved = sqsQueueManager.RemoveEmptyTemporaryQueues(DateTime.UtcNow.AddDays(5).ToUnixTime()); try { SqsTestAssert.FakeEqualRealGreater(3, 2, countOfQueuesRemoved); } finally { // Cleanup sqsQueueManager.DeleteQueue(nonEmptyTempQueue.QueueName); sqsQueueManager.DeleteQueue(emptyTempQueue1.QueueName); sqsQueueManager.DeleteQueue(emptyTempQueue2.QueueName); sqsQueueManager.DeleteQueue(emptyTempQueueNotCached.QueueName); } }
public void Receive_is_buffered_when_buffering_enabled_and_disposing_drains() { var buffer = GetNewMqBuffer(); buffer.QueueDefinition.SendBufferSize = 1; 10.Times(i => { var sent = buffer.Send(new SendMessageRequest { QueueUrl = buffer.QueueDefinition.QueueUrl, MessageBody = GetNewId() }); Assert.IsTrue(sent); Assert.AreEqual(0, buffer.SendBufferCount); }); // Using a real SQS queue results in the Receive being sporadic in terms of actually returning // a batch of stuff on a receive call, as it is dependent on the size of the queue, where you land, // etc., so in a real SQS scenario, allow a few attempts to the server to actually receive a batch // of data, which is the best we can do var timesToTry = SqsTestAssert.IsFakeClient ? 1 : 10; var attempts = 0; Message received = null; while (attempts < timesToTry) { received = buffer.Receive(new ReceiveMessageRequest { QueueUrl = buffer.QueueDefinition.QueueUrl, MaxNumberOfMessages = 10, WaitTimeSeconds = SqsTestAssert.IsFakeClient ? 0 : SqsQueueDefinition.MaxWaitTimeSeconds, VisibilityTimeout = SqsQueueDefinition.MaxVisibilityTimeoutSeconds }); if (received != null && buffer.ReceiveBufferCount > 0) { break; } attempts++; } Assert.IsNotNull(received); SqsTestAssert.FakeEqualRealGreater(9, 0, buffer.ReceiveBufferCount); buffer.Dispose(); Assert.AreEqual(0, buffer.ReceiveBufferCount, "Dispose did not drain"); }
public void Can_delete_batch_of_messages() { var newQueueUrl = helper.CreateQueue(); helper.SendMessages(newQueueUrl, count: 6); var received = client.ReceiveMessage(new ReceiveMessageRequest { QueueUrl = newQueueUrl, MaxNumberOfMessages = 5, VisibilityTimeout = 30, WaitTimeSeconds = 0 }); SqsTestAssert.FakeEqualRealGreater(5, 1, received.Messages.Count); var response = client.DeleteMessageBatch(new DeleteMessageBatchRequest( newQueueUrl, received.Messages.Select(m => new DeleteMessageBatchRequestEntry { Id = m.MessageId, ReceiptHandle = m.ReceiptHandle }).ToList() )); Assert.AreEqual(received.Messages.Count, response.Successful.Count); received = client.ReceiveMessage(new ReceiveMessageRequest { QueueUrl = newQueueUrl, MaxNumberOfMessages = 5, VisibilityTimeout = 30, WaitTimeSeconds = 0 }); SqsTestAssert.FakeEqualRealGreater(1, 0, received.Messages.Count); }