diff --git a/Obvs.NetMQ.Tests/TestPublishSubscribe.cs b/Obvs.NetMQ.Tests/TestPublishSubscribe.cs index 1c2a9e9..ed4167d 100644 --- a/Obvs.NetMQ.Tests/TestPublishSubscribe.cs +++ b/Obvs.NetMQ.Tests/TestPublishSubscribe.cs @@ -13,6 +13,8 @@ namespace Obvs.NetMQ.Tests { + // Each test uses its own port, clear of the ranges TestServiceBusWithNetMq binds, + // because xUnit runs test classes in parallel public class TestPublishSubscribe { [Fact, Trait("Category", "Explicit")] @@ -29,7 +31,7 @@ public async Task TestSendingAndReceivingStringsOverLocalHost() }, err => Console.WriteLine("Error: " + err)); - IMessageSource source = new MessageSource("tcp://localhost:5556", + IMessageSource source = new MessageSource("tcp://localhost:5560", new IMessageDeserializer[] { new JsonMessageDeserializer(), @@ -39,7 +41,7 @@ public async Task TestSendingAndReceivingStringsOverLocalHost() var sub = source.Messages.Subscribe(observer); - IMessagePublisher publisher = new MessagePublisher("tcp://localhost:5556", + IMessagePublisher publisher = new MessagePublisher("tcp://localhost:5560", new JsonMessageSerializer(), topic); await publisher.PublishAsync(new TestMessage1 { Id = 1 }); @@ -50,6 +52,10 @@ public async Task TestSendingAndReceivingStringsOverLocalHost() await publisher.PublishAsync(new TestMessage2 { Id = 3 }); await Task.Delay(TimeSpan.FromSeconds(2)); + sub.Dispose(); + source.Dispose(); + publisher.Dispose(); + Assert.True(messages.OfType().Any(msg => msg.Id == 1), "TestMessage1 1 not received"); Assert.True(messages.OfType().Any(msg => msg.Id == 2), "TestMessage1 2 not received"); Assert.True(messages.OfType().Any(msg => msg.Id == 3), "TestMessage1 3 not received"); @@ -57,9 +63,6 @@ public async Task TestSendingAndReceivingStringsOverLocalHost() Assert.True(messages.OfType().Any(msg => msg.Id == 1), "TestMessage2 1 not received"); Assert.True(messages.OfType().Any(msg => msg.Id == 2), "TestMessage2 2 not received"); Assert.True(messages.OfType().Any(msg => msg.Id == 3), "TestMessage2 3 not received"); - - sub.Dispose(); - source.Dispose(); } [Fact, Trait("Category", "Explicit")] @@ -76,7 +79,7 @@ public async Task TestSendingAndReceivingBytesOverLocalHost() }, err => Console.WriteLine("Error: " + err)); - IMessageSource source = new MessageSource("tcp://localhost:5556", + IMessageSource source = new MessageSource("tcp://localhost:5561", new IMessageDeserializer[] { new ProtoBufMessageDeserializer(), @@ -86,7 +89,7 @@ public async Task TestSendingAndReceivingBytesOverLocalHost() var sub = source.Messages.Subscribe(observer); - IMessagePublisher publisher = new MessagePublisher("tcp://localhost:5556", + IMessagePublisher publisher = new MessagePublisher("tcp://localhost:5561", new ProtoBufMessageSerializer(), topic); await publisher.PublishAsync(new TestMessage1 { Id = 1 }); @@ -97,6 +100,10 @@ public async Task TestSendingAndReceivingBytesOverLocalHost() await publisher.PublishAsync(new TestMessage2 { Id = 3 }); await Task.Delay(TimeSpan.FromSeconds(2)); + sub.Dispose(); + source.Dispose(); + publisher.Dispose(); + Assert.True(messages.OfType().Any(msg => msg.Id == 1), "TestMessage1 1 not received"); Assert.True(messages.OfType().Any(msg => msg.Id == 2), "TestMessage1 2 not received"); Assert.True(messages.OfType().Any(msg => msg.Id == 3), "TestMessage1 3 not received"); @@ -104,9 +111,6 @@ public async Task TestSendingAndReceivingBytesOverLocalHost() Assert.True(messages.OfType().Any(msg => msg.Id == 1), "TestMessage2 1 not received"); Assert.True(messages.OfType().Any(msg => msg.Id == 2), "TestMessage2 2 not received"); Assert.True(messages.OfType().Any(msg => msg.Id == 3), "TestMessage2 3 not received"); - - sub.Dispose(); - source.Dispose(); } [Fact, Trait("Category", "Explicit")] @@ -117,8 +121,10 @@ public async Task TestMessagesLongerThan32Characters() const string topic = "TestTopicxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; IDisposable sub; + MessageSource source; + MessagePublisher publisher; { - var source = new MessageSource("tcp://localhost:5557", + source = new MessageSource("tcp://localhost:5562", new IMessageDeserializer[] { new ProtoBufMessageDeserializer(), @@ -134,7 +140,7 @@ public async Task TestMessagesLongerThan32Characters() } { - var publisher = new MessagePublisher("tcp://localhost:5557", + publisher = new MessagePublisher("tcp://localhost:5562", new ProtoBufMessageSerializer(), topic); @@ -150,6 +156,8 @@ await publisher.PublishAsync(new TestMessageWhereTypeIsVeryMuchDefinitionLongerT await Task.Delay(TimeSpan.FromSeconds(2)); sub.Dispose(); + source.Dispose(); + publisher.Dispose(); } [ProtoContract] diff --git a/Obvs.NetMQ.Tests/TestServiceBusWithNetMq.cs b/Obvs.NetMQ.Tests/TestServiceBusWithNetMq.cs index 851819c..721e3e2 100644 --- a/Obvs.NetMQ.Tests/TestServiceBusWithNetMq.cs +++ b/Obvs.NetMQ.Tests/TestServiceBusWithNetMq.cs @@ -141,6 +141,11 @@ public async Task TestServiceEndpointsOverLocalHostSockets() // wait some time until we think all messages have been sent and received await Task.Delay(TimeSpan.FromSeconds(3)); + // dispose before asserting, so a failed assertion doesn't leave sockets bound for other tests + ((IDisposable)serviceBus).Dispose(); + ((IDisposable)serviceBusClient1).Dispose(); + ((IDisposable)serviceBusClient2).Dispose(); + // test we got everything we expected Assert.True(messages.OfType().Count() == 2, "TestCommand1"); Assert.True(messages.OfType().Count() == 4, "TestEvent1");