public void DequeueReturnsMessageTest() { var connFactory = Substitute.For<IConnectionFactory>(); var conn = Substitute.For<IConnection>(); var model = Substitute.For<IModel>(); var queueName = Guid.NewGuid().ToString(); connFactory.CreateConnection().Returns(conn); connFactory.CreateConnection(string.Empty).ReturnsForAnyArgs(conn); conn.CreateModel().Returns(model); conn.IsOpen.Returns(true); model.IsClosed.Returns(false); model.QueueDeclare(null, false, false, false, null).ReturnsForAnyArgs(new QueueDeclareOk(queueName, 1, 0)); model.QueueDeclarePassive(null).ReturnsForAnyArgs(new QueueDeclareOk(string.Empty, 1, 0)); model.MessageCount(null).ReturnsForAnyArgs(x => 1u); var payload = Guid.NewGuid().ToByteArray(); var result = new BasicGetResult(0, false, null, null, 0, null, payload); model.BasicGet(queueName, false).Returns(result); var setup = new RabbitMQReaderSetup { ConnectionFactory = connFactory, Exchange = Constants.DefaultExchange, QueueName = queueName, IsDurable = false, DeleteQueueOnClose = true, QueueTimeToLive = TimeSpan.FromMinutes(20), Options = new RabbitMQReaderOptions(), }; using (var rdr = new RabbitMQReader(setup, false)) { var msg = rdr.Dequeue(TimeSpan.FromSeconds(30), CancellationToken.None); Assert.Equal(payload, msg.Body.CopyToByteArray()); } }
public void DequeueThrowsWhenDisposedTest() { var connFactory = Substitute.For<IConnectionFactory>(); var conn = Substitute.For<IConnection>(); var model = Substitute.For<IModel>(); var throttler = Substitute.For<IDequeueThrottler>(); var throttlerFactory = Substitute.For<IDequeueThrottlerFactory>(); throttlerFactory.Create(null, null).ReturnsForAnyArgs(throttler); connFactory.CreateConnection().Returns(conn); connFactory.CreateConnection(string.Empty).ReturnsForAnyArgs(conn); conn.CreateModel().Returns(model); model.QueueDeclare(null, false, false, false, null).ReturnsForAnyArgs(new QueueDeclareOk(string.Empty, 0, 0)); model.QueueDeclarePassive(null).ReturnsForAnyArgs(new QueueDeclareOk(string.Empty, 1, 0)); var setup = new RabbitMQReaderSetup { ConnectionFactory = connFactory, Exchange = null, QueueName = null, IsDurable = false, DeleteQueueOnClose = true, QueueTimeToLive = TimeSpan.FromMinutes(20), Options = new RabbitMQReaderOptions { DequeueThrottlerFactory = throttlerFactory }, }; using (var rdr = new RabbitMQReader(setup, false)) { throttler.WhenForAnyArgs(x => x.Throttle(0, 0, CancellationToken.None)).Do(x => { ThreadPool.QueueUserWorkItem(state => { try { rdr.Dispose(); } catch { } }); }); Exception error = null; try { rdr.Dequeue(TimeSpan.FromSeconds(90), CancellationToken.None); } catch (ObjectDisposedException e) { error = e; } Assert.NotNull(error); } }