public async Task VeryBasicTransactionThing() { const string destinationQueueName = "another-queue"; var network = new InMemNetwork(); network.CreateQueue(destinationQueueName); var transport = new InMemTransport(network, "test-queue"); transport.Initialize(); using (var scope = new RebusTransactionScope()) { var headers = new Dictionary <string, string> { { Headers.MessageId, Guid.NewGuid().ToString() } }; await transport.Send( destinationAddress : destinationQueueName, message : new TransportMessage(headers, new byte[] { 1, 2, 3 }), context : scope.TransactionContext ); Assert.That(network.Count(destinationQueueName), Is.EqualTo(0), $"Expected ZERO messages in queue '{destinationQueueName}' at this point, because the scope was not completed"); await scope.CompleteAsync(); } Assert.That(network.Count(destinationQueueName), Is.EqualTo(1), $"Expected 1 message in queue '{destinationQueueName}' at this point, because the scope is completed now"); }
public async Task ItWorks(bool useExtensionMethod) { var network = new InMemNetwork(); var handlerWasEntered = new ManualResetEvent(false); var activator = new BuiltinHandlerActivator(); Using(activator); activator.Handle <string>(async(bus, context, message) => { var cancellationToken = useExtensionMethod ? context.GetCancellationToken() : context.IncomingStepContext.Load <CancellationToken>(); handlerWasEntered.Set(); await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken); }); const string queueName = "cancellation-verification"; Configure.With(activator) .Transport(t => t.UseInMemoryTransport(network, queueName)) .Start(); await activator.Bus.SendLocal("HEJ MED DIG"); // wait until the handler is entered handlerWasEntered.WaitOrDie(TimeSpan.FromSeconds(1)); // wait one more second await Task.Delay(TimeSpan.FromSeconds(1)); // measure how long it takes to stop the bus var stopwatch = Stopwatch.StartNew(); CleanUpDisposables(); var elapsedDisposingTheBus = stopwatch.Elapsed; Assert.That(elapsedDisposingTheBus, Is.LessThan(TimeSpan.FromSeconds(2)), "Expected the bus to have shut down very quickly"); Assert.That(network.Count(queueName), Is.EqualTo(1), "Expected the message to have been moved back into the input queue"); }