diff --git a/src/Elastic.Transport/Components/Pipeline/RequestPipeline.cs b/src/Elastic.Transport/Components/Pipeline/RequestPipeline.cs index cfb287c..a5b9864 100644 --- a/src/Elastic.Transport/Components/Pipeline/RequestPipeline.cs +++ b/src/Elastic.Transport/Components/Pipeline/RequestPipeline.cs @@ -58,7 +58,7 @@ private RequestConfiguration PingAndSniffRequestConfiguration PingTimeout = PingTimeout, RequestTimeout = PingTimeout, Authentication = _requestData.AuthenticationHeader, - EnableHttpPipelining = _requestData.HttpPipeliningEnabled, + HttpPipeliningEnabled = _requestData.HttpPipeliningEnabled, ForceNode = _requestData.ForceNode }; diff --git a/src/Elastic.Transport/Configuration/RequestConfiguration.cs b/src/Elastic.Transport/Configuration/RequestConfiguration.cs index a7388fe..8506fef 100644 --- a/src/Elastic.Transport/Configuration/RequestConfiguration.cs +++ b/src/Elastic.Transport/Configuration/RequestConfiguration.cs @@ -181,7 +181,7 @@ public RequestConfiguration(IRequestConfiguration config) Accept = config.Accept; AllowedStatusCodes = config.AllowedStatusCodes; Authentication = config.Authentication; - ClientCertificates = config.ClientCertificates; + ClientCertificates = (config.ClientCertificates is null) ? null : new X509CertificateCollection(config.ClientCertificates); ContentType = config.ContentType; DisableDirectStreaming = config.DisableDirectStreaming; DisableAuditTrail = config.DisableAuditTrail; @@ -230,18 +230,12 @@ public RequestConfiguration(IRequestConfiguration config) /// public bool? DisablePings { get; init; } - /// - public bool? DisablePing { get; init; } // TODO: ? - /// public bool? DisableSniff { get; init; } /// public bool? HttpPipeliningEnabled { get; init; } - /// - public bool? EnableHttpPipelining { get; init; } = true; // TODO: ? - /// public bool? EnableHttpCompression { get; init; } @@ -306,7 +300,7 @@ public RequestConfigurationDescriptor(IRequestConfiguration? config) _accept = config.Accept; _allowedStatusCodes= config.AllowedStatusCodes; _authentication = config.Authentication; - _clientCertificates = config.ClientCertificates; + _clientCertificates = (config.ClientCertificates is null) ? null : new X509CertificateCollection(config.ClientCertificates);; _contentType = config.ContentType; _disableDirectStreaming = config.DisableDirectStreaming; _disableAuditTrail = config.DisableAuditTrail; @@ -341,8 +335,10 @@ public RequestConfigurationDescriptor(IRequestConfiguration? config) private bool? _disablePings; private bool? _disableSniff; private bool? _httpPipeliningEnabled; + private bool? _enableHttpCompression; private Uri? _forceNode; private int? _maxRetries; + private TimeSpan? _maxRetryTimeout; private string? _opaqueId; private bool? _parseAllHeaders; private TimeSpan? _pingTimeout; @@ -356,11 +352,6 @@ public RequestConfigurationDescriptor(IRequestConfiguration? config) private bool? _enableThreadPoolStats; private RequestMetaData? _requestMetaData; -#pragma warning disable CS0649 // Field is never assigned to, and will always have its default value - private bool? _enableHttpCompression; // TODO: ? - private TimeSpan? _maxRetryTimeout; // TODO: ? -#pragma warning restore CS0649 // Field is never assigned to, and will always have its default value - /// public RequestConfigurationDescriptor RunAs(string username) { @@ -466,6 +457,13 @@ public RequestConfigurationDescriptor MaxRetries(int retry) return this; } + /// + public RequestConfigurationDescriptor MaxRetries(TimeSpan? timeout) + { + _maxRetryTimeout = timeout; + return this; + } + /// public RequestConfigurationDescriptor Authentication(AuthorizationHeader authentication) { @@ -480,6 +478,13 @@ public RequestConfigurationDescriptor EnableHttpPipelining(bool enable = true) return this; } + /// + public RequestConfigurationDescriptor EnableHttpCompression(bool enable = true) + { + _enableHttpCompression = enable; + return this; + } + /// public RequestConfigurationDescriptor ClientCertificates(X509CertificateCollection certificates) { diff --git a/tests/Elastic.Transport.Tests/Configuration/RequestConfigurationTests.cs b/tests/Elastic.Transport.Tests/Configuration/RequestConfigurationTests.cs new file mode 100644 index 0000000..4380c75 --- /dev/null +++ b/tests/Elastic.Transport.Tests/Configuration/RequestConfigurationTests.cs @@ -0,0 +1,54 @@ +// Licensed to Elasticsearch B.V under one or more agreements. +// Elasticsearch B.V licenses this file to you under the Apache 2.0 License. +// See the LICENSE file in the project root for more information + +using System; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using FluentAssertions; +using Xunit; +#if !NETFRAMEWORK +using Soenneker.Utils.AutoBogus; +#endif + +namespace Elastic.Transport.Tests.Configuration; + +public class RequestConfigurationTests +{ + [Fact] + public void CopiesAllDefaults() + { + var config = new RequestConfiguration(); + var newConfig = new RequestConfiguration(config); + + config.Should().BeEquivalentTo(newConfig); + } + + [Fact] + public void SameDefaults() + { + IRequestConfiguration config = new RequestConfiguration(); + IRequestConfiguration newConfig = new RequestConfigurationDescriptor(); + + config.Should().BeEquivalentTo(newConfig); + } + +#if !NETFRAMEWORK + [Fact] + public void CopiesAllProperties() + { + var autoFaker = new AutoFaker(); + autoFaker.RuleFor(x => x.ClientCertificates, f => new X509CertificateCollection()); + + var config = autoFaker.Generate(); + config.Accept.Should().NotBeEmpty(); + config.ClientCertificates.Should().NotBeNull(); + + IRequestConfiguration newConfig = new RequestConfiguration(config); + config.Should().BeEquivalentTo(newConfig); + + IRequestConfiguration newDescriptor = new RequestConfigurationDescriptor(config); + config.Should().BeEquivalentTo(newDescriptor); + } +#endif +}