From 6545fd39e74fe572a28187bbcbce9d29a5ea4a0c Mon Sep 17 00:00:00 2001 From: Ziya Suzen Date: Thu, 4 Sep 2025 09:18:49 +0100 Subject: [PATCH 1/3] Add server version check test util --- tests/NATS.Client.TestUtilities/Utils.cs | 40 +++++++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/tests/NATS.Client.TestUtilities/Utils.cs b/tests/NATS.Client.TestUtilities/Utils.cs index 81c616317..465e0a1ec 100644 --- a/tests/NATS.Client.TestUtilities/Utils.cs +++ b/tests/NATS.Client.TestUtilities/Utils.cs @@ -173,19 +173,49 @@ await Retry.Until("service is found", async () => public static class ServerVersionUtils { public static bool ServerVersionIsGreaterThenOrEqualTo(this NatsConnection nats, int major, int minor) + { + var serverVersion = nats.GetServerVersion(); + + if (serverVersion.Major > major) + return true; + + if (serverVersion.Major == major && serverVersion.Minor >= minor) + return true; + + return false; + } + + public static bool ServerVersionIsLessThen(this NatsConnection nats, int major, int minor) + { + var serverVersion = nats.GetServerVersion(); + + if (serverVersion.Major < major) + return true; + + if (serverVersion.Major == major && serverVersion.Minor < minor) + return true; + + return false; + } + + public static bool ServerVersionIs(this NatsConnection nats, int major, int minor) + { + var serverVersion = nats.GetServerVersion(); + return serverVersion.Major == major && serverVersion.Minor == minor; + } + + public static (int Major, int Minor) GetServerVersion(this NatsConnection nats) { var m = Regex.Match(nats.ServerInfo!.Version, @"^(\d+)\.(\d+)"); + if (m.Success && m.Groups.Count == 3) { if (int.TryParse(m.Groups[1].Value, out var serverMajor) && int.TryParse(m.Groups[2].Value, out var serverMinor)) { - if (serverMajor > major) - return true; - if (serverMajor == major && serverMinor >= minor) - return true; + return (serverMajor, serverMinor); } } - return false; + throw new Exception("Failed to parse server version"); } } From f1316fb0f210ea9d5c44bc913b379f853f3c327f Mon Sep 17 00:00:00 2001 From: Ziya Suzen Date: Wed, 10 Sep 2025 13:20:25 +0100 Subject: [PATCH 2/3] Refactor server version comparison methods and add semantic versioning tests --- tests/NATS.Client.Core2.Tests/SemVerTest.cs | 23 +++++++++ .../NATS.Client.TestUtilities.csproj | 1 + tests/NATS.Client.TestUtilities/Utils.cs | 51 ++++--------------- tests/NATS.Slow.Tests/ClusterTests2.cs | 2 +- 4 files changed, 36 insertions(+), 41 deletions(-) create mode 100644 tests/NATS.Client.Core2.Tests/SemVerTest.cs diff --git a/tests/NATS.Client.Core2.Tests/SemVerTest.cs b/tests/NATS.Client.Core2.Tests/SemVerTest.cs new file mode 100644 index 000000000..f9a17cdb7 --- /dev/null +++ b/tests/NATS.Client.Core2.Tests/SemVerTest.cs @@ -0,0 +1,23 @@ +using NATS.Client.Core.Tests; + +namespace NATS.Client.Core2.Tests; + +public class SemVerTest +{ + [Fact] + public void TestSemVerParsing() + { + var server = new ServerInfo { Version = "2.12.0" }; + var test = "2.11.0"; + Assert.True(server.VersionIsGreaterThenOrEqualTo(test)); + } + + [Fact] + public void TestSemVerMajorMinor() + { + var server = new ServerInfo { Version = "2.12.0-preview.1" }; + var test = "2.12.0"; + Assert.False(server.VersionIsGreaterThenOrEqualTo(test)); + Assert.True(server.VersionMajorMinorIsGreaterThenOrEqualTo(2, 12)); + } +} diff --git a/tests/NATS.Client.TestUtilities/NATS.Client.TestUtilities.csproj b/tests/NATS.Client.TestUtilities/NATS.Client.TestUtilities.csproj index 741e25d1a..85befff6c 100644 --- a/tests/NATS.Client.TestUtilities/NATS.Client.TestUtilities.csproj +++ b/tests/NATS.Client.TestUtilities/NATS.Client.TestUtilities.csproj @@ -11,6 +11,7 @@ + diff --git a/tests/NATS.Client.TestUtilities/Utils.cs b/tests/NATS.Client.TestUtilities/Utils.cs index 465e0a1ec..5ddd0cbf6 100644 --- a/tests/NATS.Client.TestUtilities/Utils.cs +++ b/tests/NATS.Client.TestUtilities/Utils.cs @@ -172,50 +172,21 @@ await Retry.Until("service is found", async () => public static class ServerVersionUtils { - public static bool ServerVersionIsGreaterThenOrEqualTo(this NatsConnection nats, int major, int minor) + public static bool VersionMajorMinorIsGreaterThenOrEqualTo(this INatsServerInfo? serverInfo, int major, int minor) { - var serverVersion = nats.GetServerVersion(); - - if (serverVersion.Major > major) - return true; - - if (serverVersion.Major == major && serverVersion.Minor >= minor) + var testVersion = new SemanticVersioning.Version($"{major}.{minor}.0"); + var serverVersion = new SemanticVersioning.Version(serverInfo!.Version); + if (serverVersion.Major > testVersion.Major) return true; - - return false; + if (serverVersion.Major < testVersion.Major) + return false; + return serverVersion.Minor >= testVersion.Minor; } - public static bool ServerVersionIsLessThen(this NatsConnection nats, int major, int minor) + public static bool VersionIsGreaterThenOrEqualTo(this INatsServerInfo? serverInfo, string version) { - var serverVersion = nats.GetServerVersion(); - - if (serverVersion.Major < major) - return true; - - if (serverVersion.Major == major && serverVersion.Minor < minor) - return true; - - return false; - } - - public static bool ServerVersionIs(this NatsConnection nats, int major, int minor) - { - var serverVersion = nats.GetServerVersion(); - return serverVersion.Major == major && serverVersion.Minor == minor; - } - - public static (int Major, int Minor) GetServerVersion(this NatsConnection nats) - { - var m = Regex.Match(nats.ServerInfo!.Version, @"^(\d+)\.(\d+)"); - - if (m.Success && m.Groups.Count == 3) - { - if (int.TryParse(m.Groups[1].Value, out var serverMajor) && int.TryParse(m.Groups[2].Value, out var serverMinor)) - { - return (serverMajor, serverMinor); - } - } - - throw new Exception("Failed to parse server version"); + var testVersion = new SemanticVersioning.Version(version); + var serverVersion = new SemanticVersioning.Version(serverInfo!.Version); + return serverVersion >= testVersion; } } diff --git a/tests/NATS.Slow.Tests/ClusterTests2.cs b/tests/NATS.Slow.Tests/ClusterTests2.cs index 654fcbc6c..4846f6369 100644 --- a/tests/NATS.Slow.Tests/ClusterTests2.cs +++ b/tests/NATS.Slow.Tests/ClusterTests2.cs @@ -91,7 +91,7 @@ public async Task Check_JetStream_cluster_related_fields() Assert.NotNull(s1.Info.Cluster.RaftGroup); Assert.True(s1.Info.Cluster.RaftGroup.Length > 0); - if (nats.ServerVersionIsGreaterThenOrEqualTo(2, 12)) + if (nats.ServerInfo.VersionMajorMinorIsGreaterThenOrEqualTo(2, 12)) { var tolerance = TimeSpan.FromSeconds(10); Assert.True(s1.Info.Cluster.LeaderSince > started - tolerance); From 0ea4584abfb6fd648b80547f039a1f128fdcf57a Mon Sep 17 00:00:00 2001 From: Ziya Suzen Date: Thu, 11 Sep 2025 10:05:43 +0100 Subject: [PATCH 3/3] Fix BOM --- tests/NATS.Client.Core2.Tests/SemVerTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/NATS.Client.Core2.Tests/SemVerTest.cs b/tests/NATS.Client.Core2.Tests/SemVerTest.cs index f9a17cdb7..5f82bceb7 100644 --- a/tests/NATS.Client.Core2.Tests/SemVerTest.cs +++ b/tests/NATS.Client.Core2.Tests/SemVerTest.cs @@ -1,4 +1,4 @@ -using NATS.Client.Core.Tests; +using NATS.Client.Core.Tests; namespace NATS.Client.Core2.Tests;