From d2ba9f86797d3b7d7c39b30ff96bb64bd25a15d5 Mon Sep 17 00:00:00 2001 From: micah686 <3616220+micah686@users.noreply.github.com> Date: Sat, 2 May 2026 15:05:08 -0700 Subject: [PATCH] Updated package references and dependencies --- .../FlySwattr.NATS.Abstractions.csproj | 2 +- .../ValueObjects/Ids.cs | 27 ++++++++----------- .../FlySwattr.NATS.Caching.csproj | 2 +- .../FlySwattr.NATS.Core.csproj | 8 +++--- .../FlySwattr.NATS.DistributedLock.csproj | 4 +-- .../FlySwattr.NATS.Hosting.csproj | 8 +++--- .../FlySwattr.NATS.Resilience.csproj | 12 ++++----- .../FlySwattr.NATS.Topology.csproj | 6 ++--- Samples/NatsTester/NatsTester.csproj | 6 ++--- Samples/Service1/Service1.csproj | 4 +-- Samples/Service2/Service2.csproj | 4 +-- Tests/Benchmarks/Benchmarks.csproj | 2 +- .../Infrastructure/NatsContainerFixture.cs | 3 +-- .../IntegrationTests/IntegrationTests.csproj | 16 +++++------ .../Core/Messaging/NatsJetStreamBusTests.cs | 2 +- .../NatsJetStreamBusTelemetryTests.cs | 16 ++++++++--- .../Core/Telemetry/NatsTelemetryTests.cs | 4 +-- .../NatsConsumerBackgroundServiceTests.cs | 8 +++--- Tests/UnitTests/UnitTests.csproj | 18 ++++++------- 19 files changed, 77 insertions(+), 75 deletions(-) diff --git a/FlySwattr.NATS.Abstractions/FlySwattr.NATS.Abstractions.csproj b/FlySwattr.NATS.Abstractions/FlySwattr.NATS.Abstractions.csproj index 285d6dc..80d67a2 100644 --- a/FlySwattr.NATS.Abstractions/FlySwattr.NATS.Abstractions.csproj +++ b/FlySwattr.NATS.Abstractions/FlySwattr.NATS.Abstractions.csproj @@ -12,7 +12,7 @@ - + diff --git a/FlySwattr.NATS.Abstractions/ValueObjects/Ids.cs b/FlySwattr.NATS.Abstractions/ValueObjects/Ids.cs index 7936d93..3cd9f13 100644 --- a/FlySwattr.NATS.Abstractions/ValueObjects/Ids.cs +++ b/FlySwattr.NATS.Abstractions/ValueObjects/Ids.cs @@ -7,8 +7,7 @@ namespace FlySwattr.NATS.Abstractions; [ValueObject] public partial struct StreamName { - [GeneratedRegex(@"^[a-zA-Z0-9_-]+$")] - private static partial Regex ValidPattern(); + private static readonly Regex ValidPattern = new("^[a-zA-Z0-9_-]+$", RegexOptions.Compiled | RegexOptions.CultureInvariant); private static Validation Validate(string value) { @@ -16,7 +15,7 @@ private static Validation Validate(string value) return Validation.Invalid("Stream name cannot be empty"); if (value.Length > 256) return Validation.Invalid("Stream name cannot exceed 256 characters"); - if (!ValidPattern().IsMatch(value)) + if (!ValidPattern.IsMatch(value)) return Validation.Invalid("Stream name can only contain letters, numbers, underscores, and hyphens"); return Validation.Ok; } @@ -25,8 +24,7 @@ private static Validation Validate(string value) [ValueObject] public partial struct ConsumerName { - [GeneratedRegex(@"^[a-zA-Z0-9_-]+$")] - private static partial Regex ValidPattern(); + private static readonly Regex ValidPattern = new("^[a-zA-Z0-9_-]+$", RegexOptions.Compiled | RegexOptions.CultureInvariant); private static Validation Validate(string value) { @@ -34,7 +32,7 @@ private static Validation Validate(string value) return Validation.Invalid("Consumer name cannot be empty"); if (value.Length > 256) return Validation.Invalid("Consumer name cannot exceed 256 characters"); - if (!ValidPattern().IsMatch(value)) + if (!ValidPattern.IsMatch(value)) return Validation.Invalid("Consumer name can only contain letters, numbers, underscores, and hyphens"); return Validation.Ok; } @@ -45,8 +43,7 @@ public partial struct SubjectName { // NATS subjects allow alphanumeric, dots (hierarchy), and wildcards (* for single token, > for multi) // Wildcards should only appear in subscription patterns, not in publish subjects - [GeneratedRegex(@"^[a-zA-Z0-9_\-.*>]+$")] - private static partial Regex ValidPattern(); + private static readonly Regex ValidPattern = new("^[a-zA-Z0-9_\\-.*>]+$", RegexOptions.Compiled | RegexOptions.CultureInvariant); private static Validation Validate(string value) { @@ -72,7 +69,7 @@ private static Validation Validate(string value) if (value.Contains("..") || value.Contains("**") || value.Contains(">>")) return Validation.Invalid("Subject contains invalid pattern sequences"); - if (!ValidPattern().IsMatch(value)) + if (!ValidPattern.IsMatch(value)) return Validation.Invalid("Subject name contains invalid characters"); // Check for invalid wildcard positions (> must be at end if present) if (value.Contains('>') && !value.EndsWith('>')) @@ -86,8 +83,7 @@ private static Validation Validate(string value) public partial struct BucketName { // KV/Object store bucket names: alphanumeric, underscores, hyphens only - [GeneratedRegex(@"^[a-zA-Z0-9_-]+$")] - private static partial Regex ValidPattern(); + private static readonly Regex ValidPattern = new("^[a-zA-Z0-9_-]+$", RegexOptions.Compiled | RegexOptions.CultureInvariant); private static Validation Validate(string value) { @@ -95,7 +91,7 @@ private static Validation Validate(string value) return Validation.Invalid("Bucket name cannot be empty"); if (value.Length > 256) return Validation.Invalid("Bucket name cannot exceed 256 characters"); - if (!ValidPattern().IsMatch(value)) + if (!ValidPattern.IsMatch(value)) return Validation.Invalid("Bucket name can only contain letters, numbers, underscores, and hyphens"); return Validation.Ok; } @@ -105,8 +101,7 @@ private static Validation Validate(string value) public partial struct QueueGroup { // Queue groups: no spaces, dots, or wildcards - [GeneratedRegex(@"^[a-zA-Z0-9_-]+$")] - private static partial Regex ValidPattern(); + private static readonly Regex ValidPattern = new("^[a-zA-Z0-9_-]+$", RegexOptions.Compiled | RegexOptions.CultureInvariant); private static Validation Validate(string value) { @@ -114,8 +109,8 @@ private static Validation Validate(string value) return Validation.Invalid("Queue group cannot be empty"); if (value.Length > 256) return Validation.Invalid("Queue group cannot exceed 256 characters"); - if (!ValidPattern().IsMatch(value)) + if (!ValidPattern.IsMatch(value)) return Validation.Invalid("Queue group can only contain letters, numbers, underscores, and hyphens"); return Validation.Ok; } -} \ No newline at end of file +} diff --git a/FlySwattr.NATS.Caching/FlySwattr.NATS.Caching.csproj b/FlySwattr.NATS.Caching/FlySwattr.NATS.Caching.csproj index e3f2839..25930e8 100644 --- a/FlySwattr.NATS.Caching/FlySwattr.NATS.Caching.csproj +++ b/FlySwattr.NATS.Caching/FlySwattr.NATS.Caching.csproj @@ -16,7 +16,7 @@ - + \ No newline at end of file diff --git a/FlySwattr.NATS.Core/FlySwattr.NATS.Core.csproj b/FlySwattr.NATS.Core/FlySwattr.NATS.Core.csproj index c7b4b8a..0a29f60 100644 --- a/FlySwattr.NATS.Core/FlySwattr.NATS.Core.csproj +++ b/FlySwattr.NATS.Core/FlySwattr.NATS.Core.csproj @@ -15,10 +15,10 @@ - - - - + + + + diff --git a/FlySwattr.NATS.DistributedLock/FlySwattr.NATS.DistributedLock.csproj b/FlySwattr.NATS.DistributedLock/FlySwattr.NATS.DistributedLock.csproj index 6b65127..790c8bf 100644 --- a/FlySwattr.NATS.DistributedLock/FlySwattr.NATS.DistributedLock.csproj +++ b/FlySwattr.NATS.DistributedLock/FlySwattr.NATS.DistributedLock.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/FlySwattr.NATS.Hosting/FlySwattr.NATS.Hosting.csproj b/FlySwattr.NATS.Hosting/FlySwattr.NATS.Hosting.csproj index 1855f7d..3c3b8c2 100644 --- a/FlySwattr.NATS.Hosting/FlySwattr.NATS.Hosting.csproj +++ b/FlySwattr.NATS.Hosting/FlySwattr.NATS.Hosting.csproj @@ -17,10 +17,10 @@ - - - - + + + + diff --git a/FlySwattr.NATS.Resilience/FlySwattr.NATS.Resilience.csproj b/FlySwattr.NATS.Resilience/FlySwattr.NATS.Resilience.csproj index 73a9fc3..bba7b1e 100644 --- a/FlySwattr.NATS.Resilience/FlySwattr.NATS.Resilience.csproj +++ b/FlySwattr.NATS.Resilience/FlySwattr.NATS.Resilience.csproj @@ -16,12 +16,12 @@ - - - - - - + + + + + + diff --git a/FlySwattr.NATS.Topology/FlySwattr.NATS.Topology.csproj b/FlySwattr.NATS.Topology/FlySwattr.NATS.Topology.csproj index 4490d64..77966ba 100644 --- a/FlySwattr.NATS.Topology/FlySwattr.NATS.Topology.csproj +++ b/FlySwattr.NATS.Topology/FlySwattr.NATS.Topology.csproj @@ -16,9 +16,9 @@ - - - + + + diff --git a/Samples/NatsTester/NatsTester.csproj b/Samples/NatsTester/NatsTester.csproj index 00dfba7..1ae11d9 100644 --- a/Samples/NatsTester/NatsTester.csproj +++ b/Samples/NatsTester/NatsTester.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/Samples/Service1/Service1.csproj b/Samples/Service1/Service1.csproj index 1b0a399..71317ba 100644 --- a/Samples/Service1/Service1.csproj +++ b/Samples/Service1/Service1.csproj @@ -5,8 +5,8 @@ - - + + diff --git a/Samples/Service2/Service2.csproj b/Samples/Service2/Service2.csproj index 1b0a399..71317ba 100644 --- a/Samples/Service2/Service2.csproj +++ b/Samples/Service2/Service2.csproj @@ -5,8 +5,8 @@ - - + + diff --git a/Tests/Benchmarks/Benchmarks.csproj b/Tests/Benchmarks/Benchmarks.csproj index f8b99b7..151640f 100644 --- a/Tests/Benchmarks/Benchmarks.csproj +++ b/Tests/Benchmarks/Benchmarks.csproj @@ -9,7 +9,7 @@ - + diff --git a/Tests/IntegrationTests/Infrastructure/NatsContainerFixture.cs b/Tests/IntegrationTests/Infrastructure/NatsContainerFixture.cs index c59a72c..c34034d 100644 --- a/Tests/IntegrationTests/Infrastructure/NatsContainerFixture.cs +++ b/Tests/IntegrationTests/Infrastructure/NatsContainerFixture.cs @@ -8,8 +8,7 @@ public class NatsContainerFixture : IAsyncDisposable public NatsContainerFixture() { - _container = new NatsBuilder() - .WithImage("nats:2.10") // Explicit version + _container = new NatsBuilder("nats:2.10") .WithCommand("--jetstream") .Build(); } diff --git a/Tests/IntegrationTests/IntegrationTests.csproj b/Tests/IntegrationTests/IntegrationTests.csproj index c07812a..d93656d 100644 --- a/Tests/IntegrationTests/IntegrationTests.csproj +++ b/Tests/IntegrationTests/IntegrationTests.csproj @@ -11,16 +11,16 @@ - - - - - - - + + + + + + + - + diff --git a/Tests/UnitTests/Core/Messaging/NatsJetStreamBusTests.cs b/Tests/UnitTests/Core/Messaging/NatsJetStreamBusTests.cs index 2d3cb69..fd5f3d7 100644 --- a/Tests/UnitTests/Core/Messaging/NatsJetStreamBusTests.cs +++ b/Tests/UnitTests/Core/Messaging/NatsJetStreamBusTests.cs @@ -146,7 +146,7 @@ public async Task PublishAsync_ShouldStampConfiguredWireVersionHeader() // Assert await Assert.That(publishedHeaders).IsNotNull(); - await Assert.That(publishedHeaders!["X-Test-Wire-Version"]).IsEqualTo("7"); + await Assert.That(publishedHeaders!["X-Test-Wire-Version"].Single()).IsEqualTo("7"); } private record TestMessage(string Data); diff --git a/Tests/UnitTests/Core/Telemetry/NatsJetStreamBusTelemetryTests.cs b/Tests/UnitTests/Core/Telemetry/NatsJetStreamBusTelemetryTests.cs index 591e686..a9f4970 100644 --- a/Tests/UnitTests/Core/Telemetry/NatsJetStreamBusTelemetryTests.cs +++ b/Tests/UnitTests/Core/Telemetry/NatsJetStreamBusTelemetryTests.cs @@ -387,9 +387,19 @@ public async Task PublishAsync_WithoutParentActivity_ShouldCreateNewTrace() SetupPublishMock(); var startCount = _capturedActivities.Count; - // Act - publish without a parent activity - await _bus.PublishAsync(subject1, message, "msg-1"); - await _bus.PublishAsync(subject2, message, "msg-2"); + var previousActivity = Activity.Current; + try + { + Activity.Current = null; + + // Act - publish without a parent activity + await _bus.PublishAsync(subject1, message, "msg-1"); + await _bus.PublishAsync(subject2, message, "msg-2"); + } + finally + { + Activity.Current = previousActivity; + } // Assert - find our specific activities var ourActivities = _capturedActivities.Skip(startCount).Where(a => a.OperationName.Contains(prefix)).ToList(); diff --git a/Tests/UnitTests/Core/Telemetry/NatsTelemetryTests.cs b/Tests/UnitTests/Core/Telemetry/NatsTelemetryTests.cs index 3de6e13..bed9523 100644 --- a/Tests/UnitTests/Core/Telemetry/NatsTelemetryTests.cs +++ b/Tests/UnitTests/Core/Telemetry/NatsTelemetryTests.cs @@ -195,9 +195,7 @@ public void InjectTraceContext_WithActivityWithNoId_ShouldNotModifyHeaders() { // Arrange var headers = new NatsHeaders(); - // Create an activity that won't be sampled (no listener for this source) - using var tempSource = new ActivitySource("temp-test-source"); - using var activity = tempSource.StartActivity("test"); // Will be null without listener + using var activity = new Activity("test"); // Act NatsTelemetry.InjectTraceContext(activity, headers); diff --git a/Tests/UnitTests/Hosting/Services/NatsConsumerBackgroundServiceTests.cs b/Tests/UnitTests/Hosting/Services/NatsConsumerBackgroundServiceTests.cs index cf904f7..83a37a0 100644 --- a/Tests/UnitTests/Hosting/Services/NatsConsumerBackgroundServiceTests.cs +++ b/Tests/UnitTests/Hosting/Services/NatsConsumerBackgroundServiceTests.cs @@ -169,7 +169,7 @@ public async Task ExecuteAsync_ShouldBlockInsteadOfNak_WhenChannelFull_Backpress var msg = Substitute.For>(); msg.Data.Returns($"message-{i}"); msg.Subject.Returns("test.subject"); - msg.NakAsync(default, default, default) + msg.NakAsync(default, default) .ReturnsForAnyArgs(ValueTask.CompletedTask) .AndDoes(x => Interlocked.Increment(ref nakCount)); mockMessages.Add(msg); @@ -372,7 +372,7 @@ public async Task ExecuteAsync_ShouldDrainQueuedMessagesAndNakOnShutdown() var secondMsg = Substitute.For>(); secondMsg.Data.Returns("second"); secondMsg.Subject.Returns("test.subject.2"); - secondMsg.NakAsync(default, default, default).ReturnsForAnyArgs(ValueTask.CompletedTask); + secondMsg.NakAsync(default, default).ReturnsForAnyArgs(ValueTask.CompletedTask); consumer.ConsumeAsync( Arg.Any>(), @@ -469,7 +469,7 @@ private static async Task WaitForNakAsync(INatsJSMsg message, TimeSpan t { try { - await message.Received(1).NakAsync(default, TimeSpan.FromSeconds(1), Arg.Any()); + await message.Received(1).NakAsync(Arg.Is(opts => opts != null && opts.Value.NakDelay == TimeSpan.FromSeconds(1)), Arg.Any()); return; } catch @@ -478,6 +478,6 @@ private static async Task WaitForNakAsync(INatsJSMsg message, TimeSpan t } } - await message.Received(1).NakAsync(default, TimeSpan.FromSeconds(1), Arg.Any()); + await message.Received(1).NakAsync(Arg.Is(opts => opts != null && opts.Value.NakDelay == TimeSpan.FromSeconds(1)), Arg.Any()); } } diff --git a/Tests/UnitTests/UnitTests.csproj b/Tests/UnitTests/UnitTests.csproj index ddb9671..39b7912 100644 --- a/Tests/UnitTests/UnitTests.csproj +++ b/Tests/UnitTests/UnitTests.csproj @@ -11,18 +11,18 @@ - + - - - - - + + + + + - - - + + +