示例#1
0
        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...");
        }
示例#2
0
        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);
        }