public void EnqueuedMessagesArePersistentTest() { var connFactory = Substitute.For<IConnectionFactory>(); var conn = Substitute.For<IConnection>(); var model = Substitute.For<IModel>(); var msg = new MemoryStream(Guid.NewGuid().ToByteArray()); connFactory.CreateConnection().Returns(conn); connFactory.CreateConnection(string.Empty).ReturnsForAnyArgs(conn); conn.CreateModel().Returns(model); var setup = new RabbitMQWriterSetup { ConnectionFactory = connFactory, Options = new RabbitMQWriterOptions(), }; using (var writer = new RabbitMQWriter(setup, false)) { IBasicProperties props = null; model.WhenForAnyArgs(x => x.BasicPublish(null, null, false, null, null)).Do(ci => { props = ci.Arg<IBasicProperties>(); model.BasicAcks += Raise.EventWith(model, new BasicAckEventArgs()); }); writer.Enqueue(null, null, msg, TimeSpan.MaxValue, TimeSpan.FromSeconds(90), CancellationToken.None); Assert.NotNull(props); Assert.True(props.Persistent); } }
public IRabbitMQWriter CreateWriter(RabbitMQWriterSetup setup) { setup = setup.Clone(); RabbitMQWriter writer = null; try { writer = new RabbitMQWriter(setup, false); writer.EnsureOpen(setup.Timeout, setup.CancelToken); return writer; } catch { DisposeHelper.DisposeIfNotNull(writer); throw; } }
public void ConfirmSelectIsEnabledTest() { 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); var setup = new RabbitMQWriterSetup { ConnectionFactory = connFactory, Options = new RabbitMQWriterOptions(), }; using (var rdr = new RabbitMQWriter(setup, false)) { rdr.EnsureOpen(TimeSpan.FromSeconds(90), CancellationToken.None); model.Received().ConfirmSelect(); } }
public void EnqueueUsesPassedInExchangeAndQueueNameTest() { var connFactory = Substitute.For<IConnectionFactory>(); var conn = Substitute.For<IConnection>(); var model = Substitute.For<IModel>(); model.WhenForAnyArgs(x => x.BasicPublish(null, null, false, null, null)).Do(ci => model.BasicAcks += Raise.EventWith(model, new BasicAckEventArgs())); connFactory.CreateConnection().Returns(conn); connFactory.CreateConnection(string.Empty).ReturnsForAnyArgs(conn); conn.CreateModel().Returns(model); var setup = new RabbitMQWriterSetup { ConnectionFactory = connFactory, Options = new RabbitMQWriterOptions(), }; using (var writer = new RabbitMQWriter(setup, false)) { var exchange = Guid.NewGuid().ToString(); var queueName = Guid.NewGuid().ToString(); var msg = Guid.NewGuid(); writer.Enqueue(exchange, queueName, new MemoryStream(msg.ToByteArray()), TimeSpan.MaxValue, TimeSpan.FromSeconds(30), CancellationToken.None); model.Received(1).BasicPublish(exchange, queueName, true, Arg.Any<IBasicProperties>(), Arg.Is<byte[]>(m => new Guid(m) == msg)); } }
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); } }