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); }
protected override void OnOpen(TimeSpan timeout) { MethodInvocationTrace.Write(); var timeoutTimer = TimeoutTimer.StartNew(timeout); base.OnOpen(timeoutTimer.RemainingTime); var connFactory = Binding.CreateConnectionFactory(RemoteAddress.Uri.Host, RemoteAddress.Uri.Port); var localAddress = new RabbitMQTaskQueueUri(LocalAddress.Uri.ToString()); var setup = new RabbitMQReaderSetup { CancelToken = ConcurrentOperationManager.Token, ConnectionFactory = connFactory, DeleteQueueOnClose = true, Exchange = Binding.Exchange, IsDurable = Binding.IsDurable, MaxPriority = Binding.MaxPriority, Options = Binding.ReaderOptions, QueueName = localAddress.QueueName, QueueTimeToLive = Binding.ReplyQueueTimeToLive, Timeout = timeoutTimer.RemainingTime, }; setup.QueueArguments = new Dictionary<string, object>(); setup.QueueArguments.Add(TaskQueueReaderQueueArguments.IsTaskInputQueue, false); setup.QueueArguments.Add(TaskQueueReaderQueueArguments.Scheme, Constants.Scheme); _queueReader = Binding.QueueReaderWriterFactory.CreateReader(setup); }
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); } }