diff --git a/ChangeLog.md b/ChangeLog.md index 470c356229..dd8c19b2bc 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -5,3 +5,7 @@ `ConnectionFactory#CreateConnection` could deadlock in some circumstances. GH issue: [rabbitmq-dotnet-client#239](https://github.com/rabbitmq/rabbitmq-dotnet-client/issues/239). + +Occasional NullReferenceException when unable to resolve any endpoints/ + +GH issue: [rabbitmq-dotnet-client#238](https://github.com/rabbitmq/rabbitmq-dotnet-client/issues/238) diff --git a/projects/client/RabbitMQ.Client/src/client/api/IEndpointResolverExtensions.cs b/projects/client/RabbitMQ.Client/src/client/api/IEndpointResolverExtensions.cs index 9da7ed8bbf..fb87668e57 100755 --- a/projects/client/RabbitMQ.Client/src/client/api/IEndpointResolverExtensions.cs +++ b/projects/client/RabbitMQ.Client/src/client/api/IEndpointResolverExtensions.cs @@ -65,7 +65,8 @@ public static T SelectOne(this IEndpointResolver resolver, Func endpoints; + public TestEndpointResolver (IEnumerable endpoints) + { + this.endpoints = endpoints; + } + + public IEnumerable All() + { + return endpoints; + } + } + + class TestEndpointException : Exception + { + public TestEndpointException(string message) : base(message) + { + } + } + + public class TestIEndpointResolverExtensions + { + [Test] + public void SelectOneShouldReturnDefaultWhenThereAreNoEndpoints() + { + var ep = new TestEndpointResolver(new List()); + Assert.IsNull(ep.SelectOne((x) => null)); + } + + [Test] + public void SelectOneShouldRaiseThrownExceptionWhenThereAreOnlyInaccessibleEndpoints() + { + var ep = new TestEndpointResolver(new List { new AmqpTcpEndpoint()}); + Assert.Throws(() => ep.SelectOne((x) => { throw new TestEndpointException("bananas"); })); + } + + [Test] + public void SelectOneShouldReturnFoundEndpoint() + { + var ep = new TestEndpointResolver(new List { new AmqpTcpEndpoint()}); + Assert.IsNotNull(ep.SelectOne((e) => e)); + } + } +} \ No newline at end of file