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
+}