Skip to content

Bump Azure.Storage.Blobs from 12.19.1 to 12.26.0 - #12

Closed
dependabot[bot] wants to merge 31 commits into
mainfrom
dependabot/nuget/Azure.Storage.Blobs-12.26.0
Closed

Bump Azure.Storage.Blobs from 12.19.1 to 12.26.0#12
dependabot[bot] wants to merge 31 commits into
mainfrom
dependabot/nuget/Azure.Storage.Blobs-12.26.0

Bump Azure.Storage.Blobs from 12.19.1 to 12.26.0

c4d472f
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
GitHub Actions / Test Results succeeded Nov 9, 2025 in 1s

283 passed, 0 failed and 0 skipped

Tests passed successfully

Report Passed Failed Skipped Time
tests/MultiLock.IntegrationTests/TestResults/test-results.trx 54✅ 38s
tests/MultiLock.Tests/TestResults/test-results.trx 229✅ 6s

✅ tests/MultiLock.IntegrationTests/TestResults/test-results.trx

54 tests were completed in 38s with 54 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
MultiLock.IntegrationTests.AzureBlobStorageIntegrationTests 8✅ 3s
MultiLock.IntegrationTests.ConsulIntegrationTests 8✅ 34s
MultiLock.IntegrationTests.PostgreSqlIntegrationTests 9✅ 1s
MultiLock.IntegrationTests.RedisIntegrationTests 9✅ 2s
MultiLock.IntegrationTests.SqlServerIntegrationTests 9✅ 2s
MultiLock.IntegrationTests.ZooKeeperIntegrationTests 11✅ 4s

✅ MultiLock.IntegrationTests.AzureBlobStorageIntegrationTests

✅ AzureBlobStorage_LeaderElection_ShouldWork
✅ HealthCheck_WithAzurite_ShouldReturnTrue
✅ IsLeader_WhenLeader_ShouldReturnTrue
✅ ReleaseLeadership_ShouldAllowNewLeader
✅ TryAcquireLeadership_WhenAlreadyAcquired_ShouldReturnFalse
✅ TryAcquireLeadership_WithAzurite_ShouldSucceed
✅ UpdateHeartbeat_AsLeader_ShouldSucceed
✅ UpdateHeartbeat_AsNonLeader_ShouldReturnFalse

✅ MultiLock.IntegrationTests.ConsulIntegrationTests

✅ Consul_LeaderElection_ShouldWork
✅ HealthCheck_WithConsul_ShouldReturnTrue
✅ IsLeader_WhenLeader_ShouldReturnTrue
✅ ReleaseLeadership_ShouldAllowNewLeader
✅ TryAcquireLeadership_WhenAlreadyAcquired_ShouldReturnFalse
✅ TryAcquireLeadership_WithConsul_ShouldSucceed
✅ UpdateHeartbeat_AsLeader_ShouldSucceed
✅ UpdateHeartbeat_AsNonLeader_ShouldReturnFalse

✅ MultiLock.IntegrationTests.PostgreSqlIntegrationTests

✅ GetCurrentLeader_ShouldReturnLeaderInfo
✅ HealthCheck_WithPostgreSQL_ShouldReturnTrue
✅ IsLeader_ShouldReturnCorrectStatus
✅ PostgreSQL_LeaderElection_ShouldWork
✅ ReleaseLeadership_ShouldAllowNewLeader
✅ TryAcquireLeadership_WhenAlreadyAcquired_ShouldReturnFalse
✅ TryAcquireLeadership_WithPostgreSQL_ShouldSucceed
✅ UpdateHeartbeat_AsLeader_ShouldSucceed
✅ UpdateHeartbeat_AsNonLeader_ShouldReturnFalse

✅ MultiLock.IntegrationTests.RedisIntegrationTests

✅ GetCurrentLeader_ShouldReturnLeaderInfo
✅ HealthCheck_WithRedis_ShouldReturnTrue
✅ IsLeader_ShouldReturnCorrectStatus
✅ Redis_LeaderElection_ShouldWork
✅ ReleaseLeadership_ShouldAllowNewLeader
✅ TryAcquireLeadership_WhenAlreadyAcquired_ShouldReturnFalse
✅ TryAcquireLeadership_WithRedis_ShouldSucceed
✅ UpdateHeartbeat_AsLeader_ShouldSucceed
✅ UpdateHeartbeat_AsNonLeader_ShouldReturnFalse

✅ MultiLock.IntegrationTests.SqlServerIntegrationTests

✅ GetCurrentLeader_ShouldReturnLeaderInfo
✅ HealthCheck_WithSqlServer_ShouldReturnTrue
✅ IsLeader_ShouldReturnCorrectStatus
✅ ReleaseLeadership_ShouldAllowNewLeader
✅ SqlServer_LeaderElection_ShouldWork
✅ TryAcquireLeadership_WhenAlreadyAcquired_ShouldReturnFalse
✅ TryAcquireLeadership_WithSqlServer_ShouldSucceed
✅ UpdateHeartbeat_AsLeader_ShouldSucceed
✅ UpdateHeartbeat_AsNonLeader_ShouldReturnFalse

✅ MultiLock.IntegrationTests.ZooKeeperIntegrationTests

✅ GetCurrentLeader_ShouldReturnLeaderInfo
✅ HealthCheck_WithZooKeeper_ShouldReturnTrue
✅ IsLeader_ShouldReturnCorrectStatus
✅ ReleaseLeadership_ShouldAllowNewLeader
✅ TryAcquireLeadership_WhenAlreadyAcquired_ShouldReturnFalse
✅ TryAcquireLeadership_WithZooKeeper_ShouldSucceed
✅ UpdateHeartbeat_AsLeader_ShouldSucceed
✅ UpdateHeartbeat_AsNonLeader_ShouldReturnFalse
✅ ZooKeeper_HealthCheck_ShouldWork
✅ ZooKeeper_LeaderElection_ShouldWork
✅ ZooKeeper_SingleParticipant_ShouldBecomeLeader

✅ tests/MultiLock.Tests/TestResults/test-results.trx

229 tests were completed in 6s with 229 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
MultiLock.Tests.AsyncEnumerableApiTests 8✅ 716ms
MultiLock.Tests.AzureBlobStorageProviderTests 9✅ 203ms
MultiLock.Tests.ConcurrentScenarioTests 12✅ 1s
MultiLock.Tests.ConsulProviderTests 11✅ 202ms
MultiLock.Tests.DisposalRaceConditionTests 8✅ 2s
MultiLock.Tests.InMemoryProviderTests 14✅ 252ms
MultiLock.Tests.LeadershipExtensionMethodsTests 16✅ 2s
MultiLock.Tests.MultiInstanceLeaderElectionTests 3✅ 732ms
MultiLock.Tests.ParameterValidationTests 70✅ 32ms
MultiLock.Tests.PostgreSqlProviderTests 9✅ 64ms
MultiLock.Tests.ProviderInputValidationTests 26✅ 433ms
MultiLock.Tests.RedisProviderTests 8✅ 20ms
MultiLock.Tests.ServiceExtensionsValidationTests 12✅ 30ms
MultiLock.Tests.SqlServerProviderTests 9✅ 46ms
MultiLock.Tests.ZooKeeperProviderTests 14✅ 55ms

✅ MultiLock.Tests.AsyncEnumerableApiTests

✅ GetLeadershipChangesAsync_CancellationToken_ShouldStopEnumeration
✅ GetLeadershipChangesAsync_EventOrder_ShouldBeCorrect
✅ GetLeadershipChangesAsync_MultipleSubscribers_ShouldAllReceiveEvents
✅ GetLeadershipChangesAsync_ShouldEmitAcquiredEvent_WhenBecomingLeader
✅ GetLeadershipChangesAsync_ShouldEmitLostEvent_WhenLosingLeadership
✅ GetLeadershipChangesAsync_WithChangedFilter_ShouldEmitAllStatusChanges
✅ GetLeadershipChangesAsync_WithFilter_ShouldOnlyEmitAcquiredEvents
✅ GetLeadershipChangesAsync_WithFilter_ShouldOnlyEmitLostEvents

✅ MultiLock.Tests.AzureBlobStorageProviderTests

✅ Constructor_WithValidOptions_ShouldSucceed
✅ Dispose_MultipleTimes_ShouldNotThrow
✅ Dispose_ShouldNotThrow
✅ MethodsAfterDispose_ShouldThrow
✅ Options_WithEmptyConnectionString_ShouldThrow
✅ Options_WithEmptyContainerName_ShouldThrow
✅ Options_WithInfiniteLeaseDuration_ShouldSucceed
✅ Options_WithInvalidLeaseDuration_ShouldThrow
✅ Options_WithValidLeaseDuration_ShouldSucceed

✅ MultiLock.Tests.ConcurrentScenarioTests

✅ ConcurrentAcquireAndRelease_ShouldMaintainConsistency
✅ ConcurrentAcquireAttempts_20Participants_OnlyOneSucceeds
✅ ConcurrentGetCurrentLeader_ShouldReturnConsistentResults
✅ ConcurrentHeartbeatUpdates_ShouldBeThreadSafe
✅ ConcurrentIsLeaderChecks_ShouldBeThreadSafe
✅ ConcurrentMetadataUpdates_ShouldNotCorruptData
✅ HighConcurrency_10Participants_ShouldElectExactlyOneLeader
✅ LeaderFailover_ConcurrentFailoverAttempts_ShouldBeThreadSafe
✅ LeaderFailover_MultipleWaitingParticipants_ShouldElectExactlyOneNewLeader
✅ LeaderFailover_RapidLeaderChanges_ShouldMaintainConsistency
✅ LeaderFailover_SimultaneousFailureAndAcquire_ShouldNotCauseSplitBrain
✅ RapidAcquireReleaseCycles_100Iterations_ShouldNotCauseRaceConditions

✅ MultiLock.Tests.ConsulProviderTests

✅ Constructor_WithValidOptions_ShouldSucceed
✅ Dispose_MultipleTimes_ShouldNotThrow
✅ Dispose_ShouldNotThrow
✅ DisposeAsync_MultipleTimes_ShouldNotThrow
✅ DisposeAsync_ShouldNotThrow
✅ MethodsAfterDispose_ShouldThrow
✅ Options_WithEmptyAddress_ShouldThrow
✅ Options_WithEmptyKeyPrefix_ShouldThrow
✅ Options_WithInvalidSessionLockDelay_ShouldThrow
✅ Options_WithInvalidSessionTtl_ShouldThrow
✅ Options_WithValidConfiguration_ShouldSucceed

✅ MultiLock.Tests.DisposalRaceConditionTests

✅ ConcurrentDispose_ShouldBeIdempotent
✅ Dispose_ShouldStopTimerCallbacksFromExecuting
✅ Dispose_ShouldWaitForActiveCallbacksToComplete
✅ Dispose_WhileElectionCallbackRunning_ShouldNotThrowObjectDisposedException
✅ Dispose_WhileHeartbeatCallbackRunning_ShouldNotThrowObjectDisposedException
✅ DisposeAsync_ThenDispose_ShouldBeIdempotent
✅ MultipleServices_DisposedConcurrently_ShouldNotInterfere
✅ RapidStartStopCycles_ShouldNotCauseRaceConditions

✅ MultiLock.Tests.InMemoryProviderTests

✅ Dispose_MultipleTimes_ShouldNotThrow
✅ Dispose_ShouldNotThrow
✅ GetCurrentLeaderAsync_WhenLeaderExists_ShouldReturnLeaderInfo
✅ GetCurrentLeaderAsync_WhenNoLeader_ShouldReturnNull
✅ HealthCheckAsync_ShouldReturnTrue
✅ IsLeaderAsync_WhenIsLeader_ShouldReturnTrue
✅ IsLeaderAsync_WhenNotLeader_ShouldReturnFalse
✅ MethodsAfterDispose_ShouldThrow
✅ ReleaseLeadershipAsync_WhenIsLeader_ShouldReleaseLeadership
✅ TryAcquireLeadershipAsync_WhenLeaderExists_ShouldFail
✅ TryAcquireLeadershipAsync_WhenLeaderExpired_ShouldSucceed
✅ TryAcquireLeadershipAsync_WhenNoExistingLeader_ShouldSucceed
✅ UpdateHeartbeatAsync_WhenIsLeader_ShouldSucceed
✅ UpdateHeartbeatAsync_WhenNotLeader_ShouldFail

✅ MultiLock.Tests.LeadershipExtensionMethodsTests

✅ BufferByCount_ShouldGroupEventsByCount
✅ BufferByTime_ShouldGroupEventsByTimeWindow
✅ CombinedExtensions_ShouldWorkTogether
✅ Debounce_ShouldDelayEvents
✅ DistinctUntilChanged_ShouldFilterConsecutiveDuplicates
✅ ForEachAsync_ShouldExecuteActionForEachEvent
✅ ForEachAsync_WithAsyncAction_ShouldExecuteAsyncActionForEachEvent
✅ OnLeadershipTransition_ShouldExecuteCallbacks
✅ OnLeadershipTransition_WithAsyncCallbacks_ShouldExecuteAsyncCallbacks
✅ Select_ShouldTransformEvents
✅ Skip_ShouldSkipEvents
✅ Take_ShouldLimitNumberOfEvents
✅ TakeUntilLeader_ShouldStopWhenBecomingLeader
✅ Throttle_ShouldLimitEventRate
✅ Where_ShouldFilterEvents
✅ WhileLeader_ShouldContinueWhileLeader

✅ MultiLock.Tests.MultiInstanceLeaderElectionTests

✅ ConcurrentElectionAttempts_ShouldResultInSingleLeader
✅ LeaderFailover_ShouldElectNewLeader
✅ MultipleInstances_WithInMemoryProvider_ShouldElectOneLeader

✅ MultiLock.Tests.ParameterValidationTests

✅ ValidateElectionGroup_WithCustomParamName_ShouldUseCustomName
✅ ValidateElectionGroup_WithEmptyString_ShouldThrowArgumentException
✅ ValidateElectionGroup_WithExactlyMaxLength_ShouldNotThrow
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group with spaces")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group,invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group;invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group:invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group!invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group?invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group'invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group(invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group)invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group[invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group]invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group{invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group}invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group@invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group*invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group/invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group\"invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group\\invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group&invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group#invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group%invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group`invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group+invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group<invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group=invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group>invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group|invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group~invalid")
✅ ValidateElectionGroup_WithInvalidCharacters_ShouldThrowArgumentException(invalidGroup: "group$invalid")
✅ ValidateElectionGroup_WithNull_ShouldThrowArgumentException
✅ ValidateElectionGroup_WithTooLongValue_ShouldThrowArgumentException
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "1")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "123valid")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "a")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "group-name_with.multiple-separators123")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "lowercase")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "MixedCase")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "UPPERCASE")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "valid_group")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "valid-group")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "valid.group")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "valid")
✅ ValidateElectionGroup_WithValidCharacters_ShouldNotThrow(validGroup: "valid123")
✅ ValidateElectionGroup_WithValidValue_ShouldNotThrow
✅ ValidateElectionGroup_WithWhitespace_ShouldThrowArgumentException
✅ ValidateLockTimeout_WithExactlyOneDay_ShouldNotThrow
✅ ValidateLockTimeout_WithMoreThanOneDay_ShouldThrowArgumentException
✅ ValidateLockTimeout_WithNegative_ShouldThrowArgumentException
✅ ValidateLockTimeout_WithOneMillisecond_ShouldNotThrow
✅ ValidateLockTimeout_WithValidTimeout_ShouldNotThrow
✅ ValidateLockTimeout_WithZero_ShouldThrowArgumentException
✅ ValidateMetadata_WithEmptyKey_ShouldThrowArgumentException
✅ ValidateMetadata_WithEmptyMetadata_ShouldNotThrow
✅ ValidateMetadata_WithExactlyMaxEntries_ShouldNotThrow
✅ ValidateMetadata_WithMaxLengthValue_ShouldNotThrow
✅ ValidateMetadata_WithNull_ShouldThrowArgumentNullException
✅ ValidateMetadata_WithNullValue_ShouldNotThrow
✅ ValidateMetadata_WithTooLongKey_ShouldThrowArgumentException
✅ ValidateMetadata_WithTooLongValue_ShouldThrowArgumentException
✅ ValidateMetadata_WithTooManyEntries_ShouldThrowArgumentException
✅ ValidateMetadata_WithValidMetadata_ShouldNotThrow
✅ ValidateMetadata_WithWhitespaceKey_ShouldThrowArgumentException
✅ ValidateParticipantId_WithEmptyString_ShouldThrowArgumentException
✅ ValidateParticipantId_WithInvalidCharacters_ShouldThrowArgumentException
✅ ValidateParticipantId_WithNull_ShouldThrowArgumentException
✅ ValidateParticipantId_WithTooLongValue_ShouldThrowArgumentException
✅ ValidateParticipantId_WithValidValue_ShouldNotThrow

✅ MultiLock.Tests.PostgreSqlProviderTests

✅ Constructor_WithValidOptions_ShouldSucceed
✅ Dispose_CalledMultipleTimes_ShouldNotThrow
✅ Dispose_ShouldNotThrow
✅ MethodsAfterDispose_ShouldThrow
✅ Options_WithEmptyConnectionString_ShouldThrow
✅ Options_WithEmptySchemaName_ShouldThrow
✅ Options_WithEmptyTableName_ShouldThrow
✅ Options_WithInvalidCommandTimeout_ShouldThrow
✅ Options_WithValidConfiguration_ShouldSucceed

✅ MultiLock.Tests.ProviderInputValidationTests

✅ GetCurrentLeaderAsync_WithEmptyElectionGroup_ShouldThrowArgumentException
✅ GetCurrentLeaderAsync_WithInvalidElectionGroup_ShouldThrowArgumentException
✅ GetCurrentLeaderAsync_WithNullElectionGroup_ShouldThrowArgumentException
✅ IsLeaderAsync_WithNullElectionGroup_ShouldThrowArgumentException
✅ IsLeaderAsync_WithNullParticipantId_ShouldThrowArgumentException
✅ IsLeaderAsync_WithValidParameters_ShouldSucceed
✅ ReleaseLeadershipAsync_WithEmptyElectionGroup_ShouldThrowArgumentException
✅ ReleaseLeadershipAsync_WithEmptyParticipantId_ShouldThrowArgumentException
✅ ReleaseLeadershipAsync_WithNullElectionGroup_ShouldThrowArgumentException
✅ ReleaseLeadershipAsync_WithNullParticipantId_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithEmptyElectionGroup_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithEmptyParticipantId_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithInvalidElectionGroup_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithInvalidParticipantId_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithNegativeLockTimeout_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithNullElectionGroup_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithNullMetadata_ShouldThrowArgumentNullException
✅ TryAcquireLeadershipAsync_WithNullParticipantId_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithTooLongElectionGroup_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithTooLongLockTimeout_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithTooManyMetadataEntries_ShouldThrowArgumentException
✅ TryAcquireLeadershipAsync_WithValidParameters_ShouldSucceed
✅ TryAcquireLeadershipAsync_WithZeroLockTimeout_ShouldThrowArgumentException
✅ UpdateHeartbeatAsync_WithNullElectionGroup_ShouldThrowArgumentException
✅ UpdateHeartbeatAsync_WithNullMetadata_ShouldThrowArgumentNullException
✅ UpdateHeartbeatAsync_WithNullParticipantId_ShouldThrowArgumentException

✅ MultiLock.Tests.RedisProviderTests

✅ Constructor_WithValidOptions_ShouldSucceed
✅ Dispose_MultipleTimes_ShouldNotThrow
✅ Dispose_ShouldNotThrow
✅ MethodsAfterDispose_ShouldThrow
✅ Options_WithEmptyConnectionString_ShouldThrow
✅ Options_WithEmptyKeyPrefix_ShouldThrow
✅ Options_WithNegativeDatabase_ShouldThrow
✅ Options_WithValidConfiguration_ShouldSucceed

✅ MultiLock.Tests.ServiceExtensionsValidationTests

✅ AddLeaderElection_WithConfigureOptions_ShouldSucceed
✅ AddLeaderElection_WithNullConfigureOptions_ShouldSucceed
✅ AddLeaderElection_WithNullServices_ShouldThrowArgumentNullException
✅ AddLeaderElection_WithValidServices_ShouldSucceed
✅ AddLeaderElectionGeneric_WithConfigureOptions_ShouldSucceed
✅ AddLeaderElectionGeneric_WithNullServices_ShouldThrowArgumentNullException
✅ AddLeaderElectionGeneric_WithValidServices_ShouldSucceed
✅ AddLeaderElectionWithFactory_WithConfigureOptions_ShouldSucceed
✅ AddLeaderElectionWithFactory_WithNullConfigureOptions_ShouldSucceed
✅ AddLeaderElectionWithFactory_WithNullFactory_ShouldThrowArgumentNullException
✅ AddLeaderElectionWithFactory_WithNullServices_ShouldThrowArgumentNullException
✅ AddLeaderElectionWithFactory_WithValidParameters_ShouldSucceed

✅ MultiLock.Tests.SqlServerProviderTests

✅ Constructor_WithValidOptions_ShouldSucceed
✅ Dispose_CalledMultipleTimes_ShouldNotThrow
✅ Dispose_ShouldNotThrow
✅ MethodsAfterDispose_ShouldThrow
✅ Options_WithEmptyConnectionString_ShouldThrow
✅ Options_WithEmptySchemaName_ShouldThrow
✅ Options_WithEmptyTableName_ShouldThrow
✅ Options_WithInvalidCommandTimeout_ShouldThrow
✅ Options_WithValidConfiguration_ShouldSucceed

✅ MultiLock.Tests.ZooKeeperProviderTests

✅ Constructor_WithValidOptions_ShouldSucceed
✅ Dispose_CalledMultipleTimes_ShouldNotThrow
✅ Dispose_ShouldNotThrow
✅ DisposeAsync_MultipleTimes_ShouldNotThrow
✅ DisposeAsync_ShouldNotThrow
✅ MethodsAfterDispose_ShouldThrow
✅ Options_WithEmptyConnectionString_ShouldThrow
✅ Options_WithEmptyRootPath_ShouldThrow
✅ Options_WithInvalidConnectionTimeout_ShouldThrow
✅ Options_WithInvalidMaxRetries_ShouldThrow
✅ Options_WithInvalidRetryDelay_ShouldThrow
✅ Options_WithInvalidRootPath_ShouldThrow
✅ Options_WithInvalidSessionTimeout_ShouldThrow
✅ Options_WithValidConfiguration_ShouldSucceed