public void SecureClientClearsPoolWhenAllConnectionsCorrupt() { var connectionManager = new ConnectionManager(); var stream = Substitute.For <IMessageExchangeStream>(); stream.When(x => x.IdentifyAsClient()).Do(x => { throw new ConnectionInitializationFailedException(""); }); for (int i = 0; i < HalibutLimits.RetryCountLimit; i++) { var connection = Substitute.For <IConnection>(); connection.Protocol.Returns(new MessageExchangeProtocol(stream)); connectionManager.ReleaseConnection(endpoint, connection); } var request = new RequestMessage { Destination = endpoint, ServiceName = "IEchoService", MethodName = "SayHello", Params = new object[] { "Fred" } }; var secureClient = new SecureListeningClient(endpoint, Certificates.Octopus, log, connectionManager); ResponseMessage response = null; secureClient.ExecuteTransaction((mep) => response = mep.ExchangeAsClient(request)); // The pool should be cleared after the second failure stream.Received(2).IdentifyAsClient(); // And a new valid connection should then be made response.Result.Should().Be("Fred..."); }
ResponseMessage SendOutgoingHttpsRequest(RequestMessage request, CancellationToken cancellationToken) { var client = new SecureListeningClient(request.Destination, serverCertificate, logs.ForEndpoint(request.Destination.BaseUri), connectionManager); ResponseMessage response = null; client.ExecuteTransaction(protocol => { response = protocol.ExchangeAsClient(request); }, cancellationToken); return(response); }