From edb46f641e31668c0ed599f25df70adc1be76617 Mon Sep 17 00:00:00 2001 From: Jim Borden Date: Fri, 7 Nov 2025 10:34:12 +0900 Subject: [PATCH] Add headers support to .NET server Also fix the embarassing mistake of never actually sending the proper headers from the TDK client to make the backend server failover simulation work --- client/src/cbltest/api/replicator.py | 1 + client/src/cbltest/v1/requests.py | 4 ++++ .../testserver.logic/Handlers/StartReplicatorHandler.cs | 8 ++++++-- servers/dotnet/testserver.logic/testserver.logic.csproj | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/client/src/cbltest/api/replicator.py b/client/src/cbltest/api/replicator.py index 6ff838d7..c458d357 100644 --- a/client/src/cbltest/api/replicator.py +++ b/client/src/cbltest/api/replicator.py @@ -141,6 +141,7 @@ async def start(self) -> None: payload.pinnedServerCert = self.pinned_server_cert payload.reset = self.reset payload.collections = self.collections + payload.headers = self.headers req = self.__request_factory.create_request( TestServerRequestType.START_REPLICATOR, payload ) diff --git a/client/src/cbltest/v1/requests.py b/client/src/cbltest/v1/requests.py index 69f5af3d..470e14ba 100644 --- a/client/src/cbltest/v1/requests.py +++ b/client/src/cbltest/v1/requests.py @@ -459,6 +459,9 @@ def __init__(self, database: str, endpoint: str): self.pinnedServerCert: str | None = None """The PEM representation of the TLS certificate that the remote is using""" + self.headers: dict[str, str] | None = None + """The headers to include in the replication requests""" + def to_json(self) -> Any: """Serializes the :class:`PostStartReplicatorRequestBody` to a JSON string""" raw = { @@ -469,6 +472,7 @@ def to_json(self) -> Any: "enableDocumentListener": self.enableDocumentListener, "enableAutoPurge": self.enableAutoPurge, "pinnedServerCert": self.pinnedServerCert, + "headers": self.headers, } if self.collections is not None: diff --git a/servers/dotnet/testserver.logic/Handlers/StartReplicatorHandler.cs b/servers/dotnet/testserver.logic/Handlers/StartReplicatorHandler.cs index cfdd9509..f37f7e21 100644 --- a/servers/dotnet/testserver.logic/Handlers/StartReplicatorHandler.cs +++ b/servers/dotnet/testserver.logic/Handlers/StartReplicatorHandler.cs @@ -261,12 +261,14 @@ internal readonly record struct StartReplicatorConfig public bool enableAutoPurge { get; init; } public string? pinnedServerCert { get; init; } + + public IReadOnlyDictionary? headers { get; init; } [JsonConstructor] public StartReplicatorConfig(string database, string endpoint, string replicatorType, bool continuous, IReadOnlyList collections, StartReplicatorAuthenticator? authenticator = null, bool enableDocumentListener = false, - bool enableAutoPurge = true, string? pinnedServerCert = null) + bool enableAutoPurge = true, string? pinnedServerCert = null, IReadOnlyDictionary? headers = null) { this.database = database; this.endpoint = endpoint; @@ -277,6 +279,7 @@ public StartReplicatorConfig(string database, string endpoint, this.enableDocumentListener = enableDocumentListener; this.enableAutoPurge = enableAutoPurge; this.pinnedServerCert = pinnedServerCert; + this.headers = headers; if (replicatorType.ToLowerInvariant() == "pull") { ReplicatorType = ReplicatorType.Pull; @@ -360,7 +363,8 @@ public static Task StartReplicatorHandler(int version, Session session, JsonDocu EnableAutoPurge = deserializedBody.config.enableAutoPurge, PinnedServerCertificate = deserializedBody.config.pinnedServerCert != null ? new(Encoding.ASCII.GetBytes(deserializedBody.config.pinnedServerCert)) - : null + : null, + Headers = deserializedBody.config.headers?.ToImmutableDictionary() ?? ImmutableDictionary.Empty, }; var (repl, id) = session.ObjectManager.RegisterObject(() => new Replicator(replConfig)); diff --git a/servers/dotnet/testserver.logic/testserver.logic.csproj b/servers/dotnet/testserver.logic/testserver.logic.csproj index f24c0853..55e61980 100644 --- a/servers/dotnet/testserver.logic/testserver.logic.csproj +++ b/servers/dotnet/testserver.logic/testserver.logic.csproj @@ -5,7 +5,7 @@ enable enable latest - 1.1.0 + 1.2.2