public void AcknowledgeMessageCallsBasicAckTest() { var connFactory = Substitute.For<IConnectionFactory>(); var conn = Substitute.For<IConnection>(); var model = Substitute.For<IModel>(); 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)); var setup = new RabbitMQReaderSetup { ConnectionFactory = connFactory, Exchange = null, QueueName = null, IsDurable = false, DeleteQueueOnClose = true, QueueTimeToLive = TimeSpan.FromMinutes(20), Options = new RabbitMQReaderOptions(), }; using (var rdr = new RabbitMQReader(setup, false)) { rdr.AcknowledgeMessage(5, TimeSpan.FromSeconds(90), CancellationToken.None); model.Received().BasicAck(5, false); } }
public RabbitMessageQueueReaderTests(ITestOutputHelper outputHelper) : base(outputHelper) { var setup = new RabbitMQReaderSetup { ConnectionFactory = TestConnectionFactory.Instance, Exchange = "amq.direct", QueueName = Guid.NewGuid().ToString(), IsDurable = false, DeleteQueueOnClose = true, QueueTimeToLive = TimeSpan.FromMinutes(20), Options = new RabbitMQReaderOptions(), }; Reader = new RabbitMQReader(setup, false); }
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 WaitForMessageReturnsTrueWhenMessageIsAvailableTest() { var delay = TimeSpan.FromSeconds(15); var queueName = Guid.NewGuid().ToString(); var setup = new RabbitMQReaderSetup { ConnectionFactory = new ConnectionFactory(), QueueName = queueName, Exchange= PredeclaredExchangeNames.Direct, IsDurable = false, DeleteQueueOnClose = true, QueueTimeToLive = TimeSpan.FromMinutes(20), Options = new RabbitMQReaderOptions(), }; using (var rdr = new RabbitMQReader(setup, false)) using (var writer = new RabbitMQWriter(new RabbitMQWriterSetup { ConnectionFactory = new ConnectionFactory() }, false)) using (var timer = new Timer(state => writer.Publish(PredeclaredExchangeNames.Direct, queueName, new MemoryStream(), TimeSpan.MaxValue, CancellationToken.None), null, delay, TimeSpan.Zero)) { var stopwatch = Stopwatch.StartNew(); var gotMsg = rdr.WaitForMessage(TimeSpan.FromSeconds(90), CancellationToken.None); stopwatch.Stop(); Assert.True(gotMsg); Assert.True(stopwatch.Elapsed >= delay); } }
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); } }