diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamConsumerTests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamConsumerTests.cs new file mode 100644 index 0000000..c19e92d --- /dev/null +++ b/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamConsumerTests.cs @@ -0,0 +1,194 @@ +// Copyright 2025 The NATS Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Mirrors server/jetstream_consumer_test.go in the NATS server Go source. +// ALL tests in this file are deferred: they require a running JetStream server. + +namespace ZB.MOM.NatsNet.Server.IntegrationTests.JetStream; + +/// +/// Integration tests for JetStream consumer operations. +/// Mirrors server/jetstream_consumer_test.go. +/// All tests are deferred pending JetStream server infrastructure. +/// +[Trait("Category", "Integration")] +public sealed class JetStreamConsumerTests +{ + [Fact(Skip = "deferred: requires running JetStream server")] + public void MultipleFiltersLastPerSubject_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void Delete_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void StuckAckPending_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void Unpin_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void WithPriorityGroups_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PriorityPullRequests_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void RetryAckAfterTimeout_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SwitchLeaderDuringInflightAck_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MessageDeletedDuringRedelivery_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DeliveryCount_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void Create_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void EphemeralRecoveryAfterServerRestart_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MaxDeliveryAndServerRestart_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DeleteAndServerRestart_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DurableReconnectWithOnlyPending_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void Reconnect_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DurableReconnect_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void CleanupWithRetentionPolicy_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void InternalClientLeak_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void NoMsgPayload_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PendingCountWithRedeliveries_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MaxDeliverUpdate_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void StreamUpdate_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void UpdateFilterSubject_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PullConsumerOneShotOnMaxAckLimit_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PendingLowerThanStreamFirstSeq_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void EOFBugNewFileStore_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void Purge_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void FilterUpdate_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AckFloorWithExpired_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DefaultsFromStream_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void NakThenAckFloorMove_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PauseViaEndpoint_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SurvivesRestart_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DontDecrementPendingCountOnSkippedMsg_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PendingCountAfterMsgAckAboveFloor_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PullCrossAccountExpires_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PullLastPerSubjectRedeliveries_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PullLargeBatchExpired_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void StateAlwaysFromStore_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PullNoWaitBatchLargerThanPending_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void NotInactiveDuringAckWait_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void NotInactiveDuringAckWaitBackoff_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void Prioritized_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MaxDeliverUnderflow_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void NoWaitNoMessagesOnEos_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void NoWaitNoMessagesOnEosWithDeliveredMsgs_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void WithCorruptStateIsDeleted_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void NoDeleteAfterConcurrentShutdownAndLeaderChange_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void OnlyRecalculatePendingIfFilterSubjectUpdated_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void CheckNumPending_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AllowOverlappingSubjectsIfNotSubset_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void ResetToSequence_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void ResetToSequenceConstraintOnStartSeq_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void ResetToSequenceConstraintOnStartTime_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SingleFilterSubjectInFilterSubjects_ShouldSucceed() { } +} diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamTests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamTests.cs new file mode 100644 index 0000000..a12346a --- /dev/null +++ b/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamTests.cs @@ -0,0 +1,236 @@ +// Copyright 2025 The NATS Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Mirrors server/jetstream_test.go in the NATS server Go source. +// ALL tests in this file are deferred: they require a running JetStream server. + +namespace ZB.MOM.NatsNet.Server.IntegrationTests.JetStream; + +/// +/// Integration tests for JetStream core operations. +/// Mirrors server/jetstream_test.go. +/// All tests are deferred pending JetStream server infrastructure. +/// +[Trait("Category", "Integration")] +public sealed class JetStreamTests +{ + [Fact(Skip = "deferred: requires running JetStream server")] + public void AddStreamOverlapWithJSAPISubjects_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PublishDeDupe_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void UsageNoReservation_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void UsageReservationNegativeMaxBytes_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SnapshotsAPI_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void InterestRetentionStreamWithFilteredConsumers_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SimpleFileRecovery_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PushConsumerFlowControl_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void FilteredStreamNames_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void UpdateStream_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DeleteMsg_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DeliveryAfterServerRestart_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void ConfigReloadWithGlobalAccount_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void GetLastMsgBySubject_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void GetLastMsgBySubjectAfterUpdate_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void LastSequenceBySubject_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void LastSequenceBySubjectWithSubject_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MirrorBasics_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SourceBasics_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SourceWorkingQueueWithLimit_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void StreamSourceFromKV_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void InputTransform_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void ServerEncryption_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void EphemeralPullConsumers_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void RemoveExternalSource_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void InvalidRestoreRequests_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void ProperErrorDueToOverlapSubjects_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MsgBlkFailOnKernelFault_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PartialPurgeWithAckPending_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PurgeWithRedeliveredPending_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void LastSequenceBySubjectConcurrent_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void LimitsToInterestPolicy_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void LimitsToInterestPolicyWhileAcking_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SyncInterval_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SubjectFilteredPurgeClearsPendingAcks_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AckAllWithLargeFirstSequenceAndNoAckFloor_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AckAllWithLargeFirstSequenceAndNoAckFloorWithInterestPolicy_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AuditStreams_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SourceRemovalAndReAdd_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void RateLimitHighStreamIngestDefaults_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void SourcingClipStartSeq_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MirroringClipStartSeq_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MessageTTLWhenSourcing_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MessageTTLWhenMirroring_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void InterestMaxDeliveryReached_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void WQMaxDeliveryReached_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MaxDeliveryRedeliveredReporting_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void UpgradeConsumerVersioning_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void THWExpireTasksRace_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void StreamRetentionUpdatesConsumers_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MaxMsgsPerSubjectAndDeliverLastPerSubject_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AllowMsgCounter_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AllowMsgCounterMaxPayloadAndSize_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AllowMsgCounterMirror_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AllowMsgCounterSourceAggregates_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AllowMsgCounterSourceVerbatim_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void AllowMsgCounterSourceStartingAboveZero_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PromoteMirrorDeletingOrigin_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PromoteMirrorUpdatingOrigin_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void OfflineStreamAndConsumerAfterDowngrade_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void PersistModeAsync_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void RemoveTTLOnRemoveMsg_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void MessageTTLNotExpiring_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void DirectGetBatchParallelWriteDeadlock_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void StreamMirrorWithoutDuplicateWindow_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void StreamSourceWithoutDuplicateWindow_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void FileStoreErrorOpeningBlockAfterTruncate_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void CleanupNoInterestAboveThreshold_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void StoreFilterIsAll_ShouldSucceed() { } + + [Fact(Skip = "deferred: requires running JetStream server")] + public void FlowControlCrossAccountFanOut_ShouldSucceed() { } +} diff --git a/reports/current.md b/reports/current.md index 663a9e1..e9a3d6e 100644 --- a/reports/current.md +++ b/reports/current.md @@ -1,6 +1,6 @@ # NATS .NET Porting Status Report -Generated: 2026-03-01 17:33:05 UTC +Generated: 2026-03-01 17:33:18 UTC ## Modules (12 total)