diff --git a/DistributedLock.Redis/Primitives/RedisScript.cs b/DistributedLock.Redis/Primitives/RedisScript.cs index 0f2916a4..20e98ee6 100644 --- a/DistributedLock.Redis/Primitives/RedisScript.cs +++ b/DistributedLock.Redis/Primitives/RedisScript.cs @@ -20,11 +20,13 @@ public RedisScript(string script, Func parameters) this._parameters = parameters; } - public RedisResult Execute(IDatabase database, TArgument argument, bool fireAndForget = false) => - this._script.Evaluate(database, this._parameters(argument), flags: RedLockHelper.GetCommandFlags(fireAndForget)); + public RedisResult Execute(IDatabase database, TArgument argument, bool fireAndForget = false) => + // database.ScriptEvaluate must be called instead of _script.Evaluate in order to respect the database's key prefix + database.ScriptEvaluate(this._script, this._parameters(argument), flags: RedLockHelper.GetCommandFlags(fireAndForget)); - public Task ExecuteAsync(IDatabaseAsync database, TArgument argument, bool fireAndForget = false) => - this._script.EvaluateAsync(database, this._parameters(argument), flags: RedLockHelper.GetCommandFlags(fireAndForget)); + public Task ExecuteAsync(IDatabaseAsync database, TArgument argument, bool fireAndForget = false) => + // database.ScriptEvaluate must be called instead of _script.Evaluate in order to respect the database's key prefix + database.ScriptEvaluateAsync(this._script, this._parameters(argument), flags: RedLockHelper.GetCommandFlags(fireAndForget)); // send the smallest possible script to the server private static string RemoveExtraneousWhitespace(string script) => Regex.Replace(script.Trim(), @"\s+", " "); diff --git a/DistributedLock.Tests/AbstractTestCases/DistributedLockCoreTestCases.cs b/DistributedLock.Tests/AbstractTestCases/DistributedLockCoreTestCases.cs index 70b5d139..9f9a8e30 100644 --- a/DistributedLock.Tests/AbstractTestCases/DistributedLockCoreTestCases.cs +++ b/DistributedLock.Tests/AbstractTestCases/DistributedLockCoreTestCases.cs @@ -443,7 +443,7 @@ private void CrossProcessAbandonmentHelper(bool asyncWait, bool kill) } } - private Command RunLockTaker(TLockProvider engine, params string[] args) + private Command RunLockTaker(TLockProvider engine, string lockType, string lockName) { const string Configuration = #if DEBUG @@ -454,6 +454,8 @@ private Command RunLockTaker(TLockProvider engine, params string[] args) var exeExtension = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : string.Empty; var exePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "..", "..", "..", "DistributedLockTaker", "bin", Configuration, TargetFramework.Current, "DistributedLockTaker" + exeExtension); + var args = new object[] { lockType, $"{engine.GetLockPrefix()}{lockName}" }; + var command = Command.Run(exePath, args, o => o.WorkingDirectory(TestContext.CurrentContext.TestDirectory).ThrowOnError(true)) .RedirectStandardErrorTo(Console.Error); this._cleanupActions.Add(() => diff --git a/DistributedLock.Tests/AbstractTestCases/Redis/RedisSynchronizationCoreTestCases.cs b/DistributedLock.Tests/AbstractTestCases/Redis/RedisSynchronizationCoreTestCases.cs index 4d53ea37..9963b838 100644 --- a/DistributedLock.Tests/AbstractTestCases/Redis/RedisSynchronizationCoreTestCases.cs +++ b/DistributedLock.Tests/AbstractTestCases/Redis/RedisSynchronizationCoreTestCases.cs @@ -3,6 +3,8 @@ using Moq; using NUnit.Framework; using StackExchange.Redis; +using StackExchange.Redis.KeyspaceIsolation; + using System; using System.Collections.Generic; using System.Linq; @@ -124,6 +126,27 @@ public async Task TestFailedAcquireReleasesWhatHasAlreadyBeenAcquired() Assert.IsNotNull(handle); } + [Test] + public void TestAcquireWithLockPrefix() + { + this._provider.Strategy.DatabaseProvider.Databases = new[] { CreateDatabase(keyPrefix: "P") }; + var lock1 = this._provider.CreateLock("N"); + + this._provider.Strategy.DatabaseProvider.Databases = new[] { CreateDatabase() }; + var lock2 = this._provider.CreateLock("N"); + var lock3 = this._provider.CreateLock("PN"); + + Assert.NotNull(lock1.TryAcquire()); + Assert.NotNull(lock2.TryAcquire()); + Assert.Null(lock3.TryAcquire()); + + IDatabase CreateDatabase(string? keyPrefix = null) + { + var database = RedisServer.GetDefaultServer(0).Multiplexer.GetDatabase(); + return keyPrefix is null ? database : database.WithKeyPrefix(keyPrefix); + } + } + private static Mock CreateDatabaseMock() { var mock = new Mock(MockBehavior.Strict); @@ -141,6 +164,10 @@ private static void MockDatabase(Mock mockDatabase, Func return .Returns(() => RedisResult.Create(returns())); mockDatabase.Setup(d => d.ScriptEvaluateAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(() => Task.Run(() => RedisResult.Create(returns()))); + mockDatabase.Setup(d => d.ScriptEvaluate(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(() => RedisResult.Create(returns())); + mockDatabase.Setup(d => d.ScriptEvaluateAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(() => Task.Run(() => RedisResult.Create(returns()))); mockDatabase.Setup(d => d.SortedSetRemove(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(() => (bool)RedisResult.Create(returns())); mockDatabase.Setup(d => d.SortedSetRemoveAsync(It.IsAny(), It.IsAny(), It.IsAny())) diff --git a/DistributedLock.Tests/Infrastructure/Redis/TestingRedisDatabaseProvider.cs b/DistributedLock.Tests/Infrastructure/Redis/TestingRedisDatabaseProvider.cs index 183bd106..7ab9c086 100644 --- a/DistributedLock.Tests/Infrastructure/Redis/TestingRedisDatabaseProvider.cs +++ b/DistributedLock.Tests/Infrastructure/Redis/TestingRedisDatabaseProvider.cs @@ -1,6 +1,8 @@ using Medallion.Threading.Tests.Redis; using NUnit.Framework; using StackExchange.Redis; +using StackExchange.Redis.KeyspaceIsolation; + using System; using System.Collections.Generic; using System.Diagnostics; @@ -22,17 +24,35 @@ protected TestingRedisDatabaseProvider(int count) { } + protected TestingRedisDatabaseProvider(int count, string keyPrefix) + : this(Enumerable.Range(0, count).Select(i => RedisServer.GetDefaultServer(i).Multiplexer.GetDatabase().WithKeyPrefix(keyPrefix))) + { + } + // publicly settable so that callers can alter the dbs in use public IReadOnlyList Databases { get; set; } public virtual string CrossProcessLockTypeSuffix => this.Databases.Count.ToString(); } + public interface ITestingRedisWithKeyPrefixDatabaseProvider + { + string KeyPrefix { get; } + } + public sealed class TestingRedisSingleDatabaseProvider : TestingRedisDatabaseProvider { public TestingRedisSingleDatabaseProvider() : base(count: 1) { } } + public sealed class TestingRedisWithKeyPrefixSingleDatabaseProvider : TestingRedisDatabaseProvider, ITestingRedisWithKeyPrefixDatabaseProvider + { + const string Prefix = "distributed_locks:"; + + public TestingRedisWithKeyPrefixSingleDatabaseProvider() : base(count: 1, keyPrefix: Prefix) { } + public string KeyPrefix => Prefix; + } + public sealed class TestingRedis3DatabaseProvider : TestingRedisDatabaseProvider { public TestingRedis3DatabaseProvider() : base(count: 3) { } diff --git a/DistributedLock.Tests/Infrastructure/Redis/TestingRedisSynchronizationStrategy.cs b/DistributedLock.Tests/Infrastructure/Redis/TestingRedisSynchronizationStrategy.cs index 2e346df9..cb9017f7 100644 --- a/DistributedLock.Tests/Infrastructure/Redis/TestingRedisSynchronizationStrategy.cs +++ b/DistributedLock.Tests/Infrastructure/Redis/TestingRedisSynchronizationStrategy.cs @@ -22,6 +22,15 @@ public void SetOptions(Action? op this._options = options; } + public override string? GetLockPrefix() + { + return DatabaseProvider switch + { + ITestingRedisWithKeyPrefixDatabaseProvider p => p.KeyPrefix, + _ => base.GetLockPrefix(), + }; + } + public void Options(RedisDistributedSynchronizationOptionsBuilder options) { if (this._preparedForHandleLost) diff --git a/DistributedLock.Tests/Infrastructure/TestingLockProvider.cs b/DistributedLock.Tests/Infrastructure/TestingLockProvider.cs index 6d21c7bf..8b14c1b6 100644 --- a/DistributedLock.Tests/Infrastructure/TestingLockProvider.cs +++ b/DistributedLock.Tests/Infrastructure/TestingLockProvider.cs @@ -19,6 +19,8 @@ public abstract class TestingLockProvider : ITestingNameProvider, IDi public virtual string GetCrossProcessLockType() => this.CreateLock(string.Empty).GetType().Name; public virtual void Dispose() => this.Strategy.Dispose(); + public string? GetLockPrefix() => Strategy.GetLockPrefix(); + /// /// Returns a lock whose name is based on /// diff --git a/DistributedLock.Tests/Infrastructure/TestingSynchronizationStrategy.cs b/DistributedLock.Tests/Infrastructure/TestingSynchronizationStrategy.cs index 8ac80695..81a2b819 100644 --- a/DistributedLock.Tests/Infrastructure/TestingSynchronizationStrategy.cs +++ b/DistributedLock.Tests/Infrastructure/TestingSynchronizationStrategy.cs @@ -21,5 +21,6 @@ public virtual void PerformAdditionalCleanupForHandleAbandonment() { } public virtual IDisposable? PrepareForHandleLost() => null; public virtual void PrepareForHighContention() { } public virtual void Dispose() { } + public virtual string? GetLockPrefix() => null; } } diff --git a/DistributedLock.Tests/Tests/CombinatorialTests.cs b/DistributedLock.Tests/Tests/CombinatorialTests.cs index ccfb40d6..55f25261 100644 --- a/DistributedLock.Tests/Tests/CombinatorialTests.cs +++ b/DistributedLock.Tests/Tests/CombinatorialTests.cs @@ -9,198 +9,203 @@ namespace Medallion.Threading.Tests.Azure { public class Core_AzureBlobLease_AzureBlobLeaseSynchronizationStrategyTest : DistributedLockCoreTestCases { } -} - +} + namespace Medallion.Threading.Tests.FileSystem { [Category("CI")] public class Core_File_FileSynchronizationStrategyTest : DistributedLockCoreTestCases { } -} - +} + namespace Medallion.Threading.Tests.Postgres { - public class ConnectionStringStrategy_Postgres_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingConnectionMultiplexingSynchronizationStrategy, TestingPostgresDb> { } - public class ConnectionStringStrategy_Postgres_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingOwnedConnectionSynchronizationStrategy, TestingPostgresDb> { } - public class ConnectionStringStrategy_Postgres_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingOwnedTransactionSynchronizationStrategy, TestingPostgresDb> { } - public class ConnectionStringStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy, TestingPostgresDb> { } - public class ConnectionStringStrategy_ReaderWriterAsMutex_PostgresReaderWriter_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy, TestingPostgresDb> { } - public class ConnectionStringStrategy_ReaderWriterAsMutex_PostgresReaderWriter_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy, TestingPostgresDb> { } - public class Core_Postgres_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class Core_Postgres_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_Postgres_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_Postgres_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingOwnedConnectionSynchronizationStrategy> { } - public class Core_Postgres_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingOwnedTransactionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_PostgresReaderWriter_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_PostgresReaderWriter_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_PostgresReaderWriter_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_PostgresReaderWriter_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_PostgresReaderWriter_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy> { } - public class ExternalConnectionOrTransactionStrategy_Postgres_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionOrTransactionStrategyTestCases>, TestingExternalConnectionSynchronizationStrategy, TestingPostgresDb> { } - public class ExternalConnectionOrTransactionStrategy_Postgres_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionOrTransactionStrategyTestCases>, TestingExternalTransactionSynchronizationStrategy, TestingPostgresDb> { } - public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionOrTransactionStrategyTestCases>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingPostgresDb> { } - public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionOrTransactionStrategyTestCases>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingPostgresDb> { } - public class ExternalConnectionStrategy_Postgres_ExternalConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionStrategyTestCases>, TestingPostgresDb> { } - public class ExternalConnectionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionStrategyTestCases>, TestingExternalConnectionSynchronizationStrategy>, TestingPostgresDb> { } - public class ExternalTransactionStrategy_Postgres_ExternalTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalTransactionStrategyTestCases>, TestingPostgresDb> { } - public class ExternalTransactionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalTransactionStrategyTestCases>, TestingExternalTransactionSynchronizationStrategy>, TestingPostgresDb> { } - public class MultiplexingConnectionStrategy_Postgres_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_PostgresDbTest : MultiplexingConnectionStrategyTestCases>, TestingPostgresDb> { } - public class MultiplexingConnectionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_PostgresDbTest : MultiplexingConnectionStrategyTestCases>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingPostgresDb> { } - public class OwnedConnectionStrategy_Postgres_OwnedConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : OwnedConnectionStrategyTestCases>, TestingPostgresDb> { } - public class OwnedConnectionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : OwnedConnectionStrategyTestCases>, TestingOwnedConnectionSynchronizationStrategy>, TestingPostgresDb> { } - public class OwnedTransactionStrategy_Postgres_OwnedTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : OwnedTransactionStrategyTestCases>, TestingPostgresDb> { } - public class OwnedTransactionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : OwnedTransactionStrategyTestCases>, TestingOwnedTransactionSynchronizationStrategy>, TestingPostgresDb> { } - public class ReaderWriterCore_PostgresReaderWriter_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class ReaderWriterCore_PostgresReaderWriter_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingExternalConnectionSynchronizationStrategy> { } - public class ReaderWriterCore_PostgresReaderWriter_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingExternalTransactionSynchronizationStrategy> { } - public class ReaderWriterCore_PostgresReaderWriter_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingOwnedConnectionSynchronizationStrategy> { } + public class ConnectionStringStrategy_Postgres_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingConnectionMultiplexingSynchronizationStrategy, TestingPostgresDb> { } + public class ConnectionStringStrategy_Postgres_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingOwnedConnectionSynchronizationStrategy, TestingPostgresDb> { } + public class ConnectionStringStrategy_Postgres_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingOwnedTransactionSynchronizationStrategy, TestingPostgresDb> { } + public class ConnectionStringStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy, TestingPostgresDb> { } + public class ConnectionStringStrategy_ReaderWriterAsMutex_PostgresReaderWriter_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy, TestingPostgresDb> { } + public class ConnectionStringStrategy_ReaderWriterAsMutex_PostgresReaderWriter_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ConnectionStringStrategyTestCases>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy, TestingPostgresDb> { } + public class Core_Postgres_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class Core_Postgres_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_Postgres_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_Postgres_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingOwnedConnectionSynchronizationStrategy> { } + public class Core_Postgres_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingOwnedTransactionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_PostgresReaderWriter_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_PostgresReaderWriter_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_PostgresReaderWriter_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_PostgresReaderWriter_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_PostgresReaderWriter_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDbTest : DistributedLockCoreTestCases>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy> { } + public class ExternalConnectionOrTransactionStrategy_Postgres_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionOrTransactionStrategyTestCases>, TestingExternalConnectionSynchronizationStrategy, TestingPostgresDb> { } + public class ExternalConnectionOrTransactionStrategy_Postgres_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionOrTransactionStrategyTestCases>, TestingExternalTransactionSynchronizationStrategy, TestingPostgresDb> { } + public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionOrTransactionStrategyTestCases>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingPostgresDb> { } + public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionOrTransactionStrategyTestCases>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingPostgresDb> { } + public class ExternalConnectionStrategy_Postgres_ExternalConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionStrategyTestCases>, TestingPostgresDb> { } + public class ExternalConnectionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalConnectionStrategyTestCases>, TestingExternalConnectionSynchronizationStrategy>, TestingPostgresDb> { } + public class ExternalTransactionStrategy_Postgres_ExternalTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalTransactionStrategyTestCases>, TestingPostgresDb> { } + public class ExternalTransactionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : ExternalTransactionStrategyTestCases>, TestingExternalTransactionSynchronizationStrategy>, TestingPostgresDb> { } + public class MultiplexingConnectionStrategy_Postgres_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_PostgresDbTest : MultiplexingConnectionStrategyTestCases>, TestingPostgresDb> { } + public class MultiplexingConnectionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_PostgresDbTest : MultiplexingConnectionStrategyTestCases>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingPostgresDb> { } + public class OwnedConnectionStrategy_Postgres_OwnedConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : OwnedConnectionStrategyTestCases>, TestingPostgresDb> { } + public class OwnedConnectionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDb_PostgresDbTest : OwnedConnectionStrategyTestCases>, TestingOwnedConnectionSynchronizationStrategy>, TestingPostgresDb> { } + public class OwnedTransactionStrategy_Postgres_OwnedTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : OwnedTransactionStrategyTestCases>, TestingPostgresDb> { } + public class OwnedTransactionStrategy_ReaderWriterAsMutex_PostgresReaderWriter_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDb_PostgresDbTest : OwnedTransactionStrategyTestCases>, TestingOwnedTransactionSynchronizationStrategy>, TestingPostgresDb> { } + public class ReaderWriterCore_PostgresReaderWriter_ConnectionMultiplexingSynchronizationStrategy_PostgresDb_ConnectionMultiplexingSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class ReaderWriterCore_PostgresReaderWriter_ExternalConnectionSynchronizationStrategy_PostgresDb_ExternalConnectionSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingExternalConnectionSynchronizationStrategy> { } + public class ReaderWriterCore_PostgresReaderWriter_ExternalTransactionSynchronizationStrategy_PostgresDb_ExternalTransactionSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingExternalTransactionSynchronizationStrategy> { } + public class ReaderWriterCore_PostgresReaderWriter_OwnedConnectionSynchronizationStrategy_PostgresDb_OwnedConnectionSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingOwnedConnectionSynchronizationStrategy> { } public class ReaderWriterCore_PostgresReaderWriter_OwnedTransactionSynchronizationStrategy_PostgresDb_OwnedTransactionSynchronizationStrategy_PostgresDbTest : DistributedReaderWriterLockCoreTestCases>, TestingOwnedTransactionSynchronizationStrategy> { } -} - +} + namespace Medallion.Threading.Tests.Redis { - public class Core_ReaderWriterAsMutex_RedisReaderWriter_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1DatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_RedisReaderWriter_Redis3Database_RedisSynchronizationStrategy_Redis3Database_RedisSynchronizationStrategy_Redis3DatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_RedisReaderWriter_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSynchronizationStrategy> { } - public class Core_Redis_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1DatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy> { } - public class Core_Redis_Redis3Database_RedisSynchronizationStrategy_Redis3DatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy> { } - public class Core_Redis_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy> { } - public class Core_Semaphore1AsMutex_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedLockCoreTestCases>, TestingRedisSynchronizationStrategy> { } - public class Core_Semaphore5AsMutex_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedLockCoreTestCases>, TestingRedisSynchronizationStrategy> { } - public class ReaderWriterCore_RedisReaderWriter_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1DatabaseTest : DistributedReaderWriterLockCoreTestCases, TestingRedisSynchronizationStrategy> { } - public class ReaderWriterCore_RedisReaderWriter_Redis3Database_RedisSynchronizationStrategy_Redis3DatabaseTest : DistributedReaderWriterLockCoreTestCases, TestingRedisSynchronizationStrategy> { } - public class ReaderWriterCore_RedisReaderWriter_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedReaderWriterLockCoreTestCases, TestingRedisSynchronizationStrategy> { } - public class RedisExtension_ReaderWriterAsMutex_RedisReaderWriter_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1Database_Redis2x1DatabaseTest : RedisExtensionTestCases, TestingRedisSynchronizationStrategy>, TestingRedis2x1DatabaseProvider> { } - public class RedisExtension_ReaderWriterAsMutex_RedisReaderWriter_Redis3Database_RedisSynchronizationStrategy_Redis3Database_Redis3DatabaseTest : RedisExtensionTestCases, TestingRedisSynchronizationStrategy>, TestingRedis3DatabaseProvider> { } - public class RedisExtension_ReaderWriterAsMutex_RedisReaderWriter_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSingleDatabaseTest : RedisExtensionTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSingleDatabaseProvider> { } - public class RedisExtension_Redis_Redis2x1Database_Redis2x1DatabaseTest : RedisExtensionTestCases, TestingRedis2x1DatabaseProvider> { } - public class RedisExtension_Redis_Redis3Database_Redis3DatabaseTest : RedisExtensionTestCases, TestingRedis3DatabaseProvider> { } - public class RedisExtension_Redis_RedisSingleDatabase_RedisSingleDatabaseTest : RedisExtensionTestCases, TestingRedisSingleDatabaseProvider> { } - public class RedisExtension_Semaphore1AsMutex_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSingleDatabaseTest : RedisExtensionTestCases>, TestingRedisSingleDatabaseProvider> { } - public class RedisExtension_Semaphore5AsMutex_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSingleDatabaseTest : RedisExtensionTestCases>, TestingRedisSingleDatabaseProvider> { } - public class RedisSynchronizationCore_ReaderWriterAsMutex_RedisReaderWriter_Redis3Database_RedisSynchronizationStrategy_Redis3DatabaseTest : RedisSynchronizationCoreTestCases, TestingRedisSynchronizationStrategy>> { } - public class RedisSynchronizationCore_Redis_Redis3DatabaseTest : RedisSynchronizationCoreTestCases> { } + public class Core_ReaderWriterAsMutex_RedisReaderWriter_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1DatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_RedisReaderWriter_Redis3Database_RedisSynchronizationStrategy_Redis3Database_RedisSynchronizationStrategy_Redis3DatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_RedisReaderWriter_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_RedisReaderWriter_RedisWithKeyPrefixSingleDatabase_RedisSynchronizationStrategy_RedisWithKeyPrefixSingleDatabase_RedisSynchronizationStrategy_RedisWithKeyPrefixSingleDatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSynchronizationStrategy> { } + public class Core_Redis_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1DatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy> { } + public class Core_Redis_Redis3Database_RedisSynchronizationStrategy_Redis3DatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy> { } + public class Core_Redis_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy> { } + public class Core_Redis_RedisWithKeyPrefixSingleDatabase_RedisSynchronizationStrategy_RedisWithKeyPrefixSingleDatabaseTest : DistributedLockCoreTestCases, TestingRedisSynchronizationStrategy> { } + public class Core_Semaphore1AsMutex_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedLockCoreTestCases>, TestingRedisSynchronizationStrategy> { } + public class Core_Semaphore5AsMutex_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedLockCoreTestCases>, TestingRedisSynchronizationStrategy> { } + public class ReaderWriterCore_RedisReaderWriter_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1DatabaseTest : DistributedReaderWriterLockCoreTestCases, TestingRedisSynchronizationStrategy> { } + public class ReaderWriterCore_RedisReaderWriter_Redis3Database_RedisSynchronizationStrategy_Redis3DatabaseTest : DistributedReaderWriterLockCoreTestCases, TestingRedisSynchronizationStrategy> { } + public class ReaderWriterCore_RedisReaderWriter_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedReaderWriterLockCoreTestCases, TestingRedisSynchronizationStrategy> { } + public class ReaderWriterCore_RedisReaderWriter_RedisWithKeyPrefixSingleDatabase_RedisSynchronizationStrategy_RedisWithKeyPrefixSingleDatabaseTest : DistributedReaderWriterLockCoreTestCases, TestingRedisSynchronizationStrategy> { } + public class RedisExtension_ReaderWriterAsMutex_RedisReaderWriter_Redis2x1Database_RedisSynchronizationStrategy_Redis2x1Database_Redis2x1DatabaseTest : RedisExtensionTestCases, TestingRedisSynchronizationStrategy>, TestingRedis2x1DatabaseProvider> { } + public class RedisExtension_ReaderWriterAsMutex_RedisReaderWriter_Redis3Database_RedisSynchronizationStrategy_Redis3Database_Redis3DatabaseTest : RedisExtensionTestCases, TestingRedisSynchronizationStrategy>, TestingRedis3DatabaseProvider> { } + public class RedisExtension_ReaderWriterAsMutex_RedisReaderWriter_RedisSingleDatabase_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSingleDatabaseTest : RedisExtensionTestCases, TestingRedisSynchronizationStrategy>, TestingRedisSingleDatabaseProvider> { } + public class RedisExtension_ReaderWriterAsMutex_RedisReaderWriter_RedisWithKeyPrefixSingleDatabase_RedisSynchronizationStrategy_RedisWithKeyPrefixSingleDatabase_RedisWithKeyPrefixSingleDatabaseTest : RedisExtensionTestCases, TestingRedisSynchronizationStrategy>, TestingRedisWithKeyPrefixSingleDatabaseProvider> { } + public class RedisExtension_Redis_Redis2x1Database_Redis2x1DatabaseTest : RedisExtensionTestCases, TestingRedis2x1DatabaseProvider> { } + public class RedisExtension_Redis_Redis3Database_Redis3DatabaseTest : RedisExtensionTestCases, TestingRedis3DatabaseProvider> { } + public class RedisExtension_Redis_RedisSingleDatabase_RedisSingleDatabaseTest : RedisExtensionTestCases, TestingRedisSingleDatabaseProvider> { } + public class RedisExtension_Redis_RedisWithKeyPrefixSingleDatabase_RedisWithKeyPrefixSingleDatabaseTest : RedisExtensionTestCases, TestingRedisWithKeyPrefixSingleDatabaseProvider> { } + public class RedisExtension_Semaphore1AsMutex_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSingleDatabaseTest : RedisExtensionTestCases>, TestingRedisSingleDatabaseProvider> { } + public class RedisExtension_Semaphore5AsMutex_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabase_RedisSingleDatabaseTest : RedisExtensionTestCases>, TestingRedisSingleDatabaseProvider> { } + public class RedisSynchronizationCore_ReaderWriterAsMutex_RedisReaderWriter_Redis3Database_RedisSynchronizationStrategy_Redis3DatabaseTest : RedisSynchronizationCoreTestCases, TestingRedisSynchronizationStrategy>> { } + public class RedisSynchronizationCore_Redis_Redis3DatabaseTest : RedisSynchronizationCoreTestCases> { } public class SemaphoreCore_RedisSemaphore_RedisSynchronizationStrategy_RedisSingleDatabaseTest : DistributedSemaphoreCoreTestCases> { } -} - +} + namespace Medallion.Threading.Tests.SqlServer { - public class ConnectionStringStrategy_ReaderWriterAsMutex_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_ReaderWriterAsMutex_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_ReaderWriterAsMutex_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Semaphore1AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Semaphore1AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Semaphore1AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Semaphore5AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Semaphore5AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Semaphore5AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Sql_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Sql_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class ConnectionStringStrategy_Sql_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class Core_ReaderWriterAsMutex_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy> { } - public class Core_ReaderWriterAsMutex_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy> { } - public class Core_Semaphore1AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class Core_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_Semaphore1AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy> { } - public class Core_Semaphore1AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy> { } - public class Core_Semaphore5AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class Core_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_Semaphore5AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy> { } - public class Core_Semaphore5AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy> { } - public class Core_Sql_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class Core_Sql_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_Sql_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } - public class Core_Sql_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_Sql_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } - public class Core_Sql_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy> { } - public class Core_Sql_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy> { } - public class DbSemaphore_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : DbSemaphoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class DbSemaphore_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : DbSemaphoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class DbSemaphore_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : DbSemaphoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class DbSemaphore_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : DbSemaphoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Sql_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Sql_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Sql_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class ExternalConnectionOrTransactionStrategy_Sql_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSqlServerDb> { } - public class ExternalConnectionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSqlServerDb> { } - public class ExternalConnectionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSqlServerDb> { } - public class ExternalConnectionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } - public class ExternalConnectionStrategy_Sql_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } - public class ExternalConnectionStrategy_Sql_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingSystemDataSqlServerDb> { } - public class ExternalTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSqlServerDb> { } - public class ExternalTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } - public class ExternalTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSqlServerDb> { } - public class ExternalTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } - public class ExternalTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSqlServerDb> { } - public class ExternalTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } - public class ExternalTransactionStrategy_Sql_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } - public class ExternalTransactionStrategy_Sql_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingSystemDataSqlServerDb> { } - public class MultiplexingConnectionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : MultiplexingConnectionStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingSqlServerDb> { } - public class MultiplexingConnectionStrategy_Semaphore1AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : MultiplexingConnectionStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingSqlServerDb> { } - public class MultiplexingConnectionStrategy_Semaphore5AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : MultiplexingConnectionStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingSqlServerDb> { } - public class MultiplexingConnectionStrategy_Sql_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : MultiplexingConnectionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } - public class OwnedConnectionStrategy_ReaderWriterAsMutex_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedConnectionStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingSqlServerDb> { } - public class OwnedConnectionStrategy_Semaphore1AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedConnectionStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingSqlServerDb> { } - public class OwnedConnectionStrategy_Semaphore5AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedConnectionStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingSqlServerDb> { } - public class OwnedConnectionStrategy_Sql_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : OwnedConnectionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } - public class OwnedTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedTransactionStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingSqlServerDb> { } - public class OwnedTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedTransactionStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingSqlServerDb> { } - public class OwnedTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedTransactionStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingSqlServerDb> { } - public class OwnedTransactionStrategy_Sql_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : OwnedTransactionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } - public class ReaderWriterCore_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class ReaderWriterCore_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } - public class ReaderWriterCore_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } - public class ReaderWriterCore_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } - public class ReaderWriterCore_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } - public class ReaderWriterCore_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy> { } - public class ReaderWriterCore_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy> { } - public class SemaphoreCore_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class SemaphoreCore_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } - public class SemaphoreCore_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } - public class SemaphoreCore_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } - public class SemaphoreCore_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } - public class SemaphoreCore_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy> { } - public class SemaphoreCore_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy> { } - public class UpgradeableReaderWriterConnectionStringStrategy_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : UpgradeableReaderWriterLockConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } - public class UpgradeableReaderWriterConnectionStringStrategy_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : UpgradeableReaderWriterLockConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } - public class UpgradeableReaderWriterConnectionStringStrategy_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : UpgradeableReaderWriterLockConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } - public class UpgradeableReaderWriterCore_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy> { } - public class UpgradeableReaderWriterCore_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } - public class UpgradeableReaderWriterCore_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } - public class UpgradeableReaderWriterCore_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } - public class UpgradeableReaderWriterCore_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } - public class UpgradeableReaderWriterCore_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy> { } + public class ConnectionStringStrategy_ReaderWriterAsMutex_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_ReaderWriterAsMutex_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_ReaderWriterAsMutex_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Semaphore1AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Semaphore1AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Semaphore1AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Semaphore5AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Semaphore5AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Semaphore5AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Sql_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Sql_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class ConnectionStringStrategy_Sql_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class Core_ReaderWriterAsMutex_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy> { } + public class Core_ReaderWriterAsMutex_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy> { } + public class Core_Semaphore1AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class Core_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_Semaphore1AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy> { } + public class Core_Semaphore1AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy> { } + public class Core_Semaphore5AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class Core_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_Semaphore5AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingOwnedConnectionSynchronizationStrategy> { } + public class Core_Semaphore5AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingOwnedTransactionSynchronizationStrategy> { } + public class Core_Sql_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class Core_Sql_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_Sql_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } + public class Core_Sql_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_Sql_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } + public class Core_Sql_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy> { } + public class Core_Sql_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy> { } + public class DbSemaphore_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : DbSemaphoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class DbSemaphore_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : DbSemaphoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class DbSemaphore_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : DbSemaphoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class DbSemaphore_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : DbSemaphoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Sql_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Sql_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Sql_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class ExternalConnectionOrTransactionStrategy_Sql_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionOrTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSqlServerDb> { } + public class ExternalConnectionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSqlServerDb> { } + public class ExternalConnectionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSqlServerDb> { } + public class ExternalConnectionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } + public class ExternalConnectionStrategy_Sql_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } + public class ExternalConnectionStrategy_Sql_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalConnectionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingSystemDataSqlServerDb> { } + public class ExternalTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSqlServerDb> { } + public class ExternalTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } + public class ExternalTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSqlServerDb> { } + public class ExternalTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } + public class ExternalTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSqlServerDb> { } + public class ExternalTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy>, TestingSystemDataSqlServerDb> { } + public class ExternalTransactionStrategy_Sql_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } + public class ExternalTransactionStrategy_Sql_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_SystemDataSqlServerDbTest : ExternalTransactionStrategyTestCases, TestingSystemDataSqlServerDb>, TestingSystemDataSqlServerDb> { } + public class MultiplexingConnectionStrategy_ReaderWriterAsMutex_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : MultiplexingConnectionStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingSqlServerDb> { } + public class MultiplexingConnectionStrategy_Semaphore1AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : MultiplexingConnectionStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingSqlServerDb> { } + public class MultiplexingConnectionStrategy_Semaphore5AsMutex_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : MultiplexingConnectionStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy>, TestingSqlServerDb> { } + public class MultiplexingConnectionStrategy_Sql_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : MultiplexingConnectionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } + public class OwnedConnectionStrategy_ReaderWriterAsMutex_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedConnectionStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingSqlServerDb> { } + public class OwnedConnectionStrategy_Semaphore1AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedConnectionStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingSqlServerDb> { } + public class OwnedConnectionStrategy_Semaphore5AsMutex_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedConnectionStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy>, TestingSqlServerDb> { } + public class OwnedConnectionStrategy_Sql_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : OwnedConnectionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } + public class OwnedTransactionStrategy_ReaderWriterAsMutex_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedTransactionStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingSqlServerDb> { } + public class OwnedTransactionStrategy_Semaphore1AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedTransactionStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingSqlServerDb> { } + public class OwnedTransactionStrategy_Semaphore5AsMutex_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : OwnedTransactionStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy>, TestingSqlServerDb> { } + public class OwnedTransactionStrategy_Sql_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_SqlServerDbTest : OwnedTransactionStrategyTestCases, TestingSqlServerDb>, TestingSqlServerDb> { } + public class ReaderWriterCore_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class ReaderWriterCore_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } + public class ReaderWriterCore_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } + public class ReaderWriterCore_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } + public class ReaderWriterCore_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } + public class ReaderWriterCore_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy> { } + public class ReaderWriterCore_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy> { } + public class SemaphoreCore_SqlSemaphore_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class SemaphoreCore_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } + public class SemaphoreCore_SqlSemaphore_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } + public class SemaphoreCore_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } + public class SemaphoreCore_SqlSemaphore_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } + public class SemaphoreCore_SqlSemaphore_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy> { } + public class SemaphoreCore_SqlSemaphore_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedSemaphoreCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy> { } + public class UpgradeableReaderWriterConnectionStringStrategy_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDbTest : UpgradeableReaderWriterLockConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy, TestingSqlServerDb> { } + public class UpgradeableReaderWriterConnectionStringStrategy_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : UpgradeableReaderWriterLockConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy, TestingSqlServerDb> { } + public class UpgradeableReaderWriterConnectionStringStrategy_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDbTest : UpgradeableReaderWriterLockConnectionStringStrategyTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy, TestingSqlServerDb> { } + public class UpgradeableReaderWriterCore_SqlReaderWriter_ConnectionMultiplexingSynchronizationStrategy_SqlServerDb_SqlServerDb_ConnectionMultiplexingSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingConnectionMultiplexingSynchronizationStrategy> { } + public class UpgradeableReaderWriterCore_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalConnectionSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } + public class UpgradeableReaderWriterCore_SqlReaderWriter_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalConnectionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalConnectionSynchronizationStrategy> { } + public class UpgradeableReaderWriterCore_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_ExternalTransactionSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } + public class UpgradeableReaderWriterCore_SqlReaderWriter_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDb_SystemDataSqlServerDb_ExternalTransactionSynchronizationStrategy_SystemDataSqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSystemDataSqlServerDb>, TestingExternalTransactionSynchronizationStrategy> { } + public class UpgradeableReaderWriterCore_SqlReaderWriter_OwnedConnectionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedConnectionSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingOwnedConnectionSynchronizationStrategy> { } public class UpgradeableReaderWriterCore_SqlReaderWriter_OwnedTransactionSynchronizationStrategy_SqlServerDb_SqlServerDb_OwnedTransactionSynchronizationStrategy_SqlServerDbTest : DistributedUpgradeableReaderWriterLockCoreTestCases, TestingSqlServerDb>, TestingOwnedTransactionSynchronizationStrategy> { } -} - +} + namespace Medallion.Threading.Tests.WaitHandles { - [Category("CIWindows")] public class Core_EventWaitHandle_WaitHandleSynchronizationStrategyTest : DistributedLockCoreTestCases { } - [Category("CIWindows")] public class Core_Semaphore1AsMutex_WaitHandleSemaphore_WaitHandleSynchronizationStrategy_WaitHandleSynchronizationStrategyTest : DistributedLockCoreTestCases, TestingWaitHandleSynchronizationStrategy> { } - [Category("CIWindows")] public class Core_Semaphore5AsMutex_WaitHandleSemaphore_WaitHandleSynchronizationStrategy_WaitHandleSynchronizationStrategyTest : DistributedLockCoreTestCases, TestingWaitHandleSynchronizationStrategy> { } + [Category("CIWindows")] public class Core_EventWaitHandle_WaitHandleSynchronizationStrategyTest : DistributedLockCoreTestCases { } + [Category("CIWindows")] public class Core_Semaphore1AsMutex_WaitHandleSemaphore_WaitHandleSynchronizationStrategy_WaitHandleSynchronizationStrategyTest : DistributedLockCoreTestCases, TestingWaitHandleSynchronizationStrategy> { } + [Category("CIWindows")] public class Core_Semaphore5AsMutex_WaitHandleSemaphore_WaitHandleSynchronizationStrategy_WaitHandleSynchronizationStrategyTest : DistributedLockCoreTestCases, TestingWaitHandleSynchronizationStrategy> { } [Category("CIWindows")] public class SemaphoreCore_WaitHandleSemaphore_WaitHandleSynchronizationStrategyTest : DistributedSemaphoreCoreTestCases { } } \ No newline at end of file diff --git a/README.md b/README.md index 9daef072..47a3d71a 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,7 @@ public class SomeService Contributions are welcome! If you are interested in contributing towards a new or existing issue, please let me know via comments on the issue so that I can help you get started and avoid wasted effort on your part. ## Release notes -- 2.0.0 (see [Migrating from 1.x to 2.x](docs/Other+topics.md#migrating-from-1x-to-2x)) +- 2.0.0 (see also [Migrating from 1.x to 2.x](docs/Migrating%20from%201.x%20to%202.x.md#migrating-from-1x-to-2x)) - Revamped package structure so that DistributedLock is now an umbrella package and each implementation technology has its own package (BREAKING CHANGE) - Added Postgresql-based locking (#56, DistributedLock.Postgres 1.0.0) - Added Redis-based locking (#24, DistributedLock.Redis 1.0.0) diff --git a/docs/Migrating from 1.x to 2.x.md b/docs/Migrating from 1.x to 2.x.md index e69de29b..acd1eb5a 100644 --- a/docs/Migrating from 1.x to 2.x.md +++ b/docs/Migrating from 1.x to 2.x.md @@ -0,0 +1,52 @@ +# Migrating from 1.x to 2.x + +The 2.0 release of DistributedLock is a significant departure from the 1.x series in several ways. While a large percentage of source code written for 1.x should still compile against 2.x, you will almost certainly encounter some issues and this section is intended to help navigate them. + +### Package structure +First off, with the addition of many new locking technologies the package has been broken up into sub-packages which can be installed independently. This allows users to avoid bloating their dependency trees by just installing the providers they actually use. If you've been using SQL Server-based locks, for example, you may want to remove the DistributedLock package and instead install just the DistributedLock.SqlServer package when you upgrade. + +### Safe naming +In 1.x, it was often necessary to call an API like `SqlDistributedLock.GetSafeName()` before constructing a lock instance to ensure that the name you passed in was compatible with the underlying technology. In 2.0, safe naming is enabled by default; instead using the exact name (which is occasionally helpful if you have non-C# code trying to take the same lock) is a constructor option: + +```C# +// 1.x +new SqlDistributedLock(SqlDistributedLock.GetSafeName(name), connectionString); // safe name +new SqlDistributedLock(name, connectionString); // exact name (rare) + +// 2.0 +new SqlDistributedLock(name, connectionString) // safe name +new SqlDistributedLock(name, connectionString, exactName: true) // exact name (rare) +``` + +### SystemDistributedLock renamed +1.x's `SystemDistributedLock` has been renamed to `EventWaitHandleDistributedLock` to emphasize its reliance on that Windows-only technology. Furthermore, 2.0 contains `FileDistributedLock` which offers an alternative system-scoped locking mechanism. + +### SQL Server connection options +1.x offered an [enum-based approach to configuring how the lock connected to the database](https://github.com/madelson/DistributedLock/tree/release-1.5#connection-management). In 2.0, this has been replaced with a more flexible options argument. Note that Azure-focused "keepalive" behavior and connection multiplexing have been enabled by default in 2.0. + +### ValueTask return values +The 1.x `AcquireAsync` methods return `Task`. The problem with this API is that it made it easy to write incorrect code that looked correct because `Task` implements `IDisposable`. 2.0 switches to `ValueTask` (which wasn't available when the 1.x APIs were created) to avoid this problem. + +```C# +// 1.x +// Forgetting 'await' means that the using block is disposing the Task and not the lock handle. +// We will likely enter the block before the handle is acquired and will never release the handle! +using (myLock.AcquireAsync()) { } + +// 2.0 +// this code will not compile (since ValueTask is not IDisposable) +using (myLock.AcquireAsync()) { } +``` + +If you need a `Task`, you can simply call `.AsTask()` on the returned `ValueTask`. If you are doing anything other than immediately awaiting the task, I recommend reading [Microsoft's documentation on how ValueTasks can be used](https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1?view=net-5.0#remarks). + +### Async disposal +Since the release of 1.x, Microsoft added the `IAsyncDisposable` interface as an async-friendly alternative to `IDisposable`. If you were previously using async locking, you can now switch to async disposing for additional async goodness! + +```C# +// 1.x and 2.0 (acquires asynchronously, releases synchronously) +using (await myLock.AcquireAsync()) { } + +// 2.0 only (acquires and releases asynchronously) +await using (await myLock.AcquireAsync()) { } +``` diff --git a/docs/Other topics.md b/docs/Other topics.md index 5edd0235..2608d2f2 100644 --- a/docs/Other topics.md +++ b/docs/Other topics.md @@ -42,55 +42,3 @@ In other cases, this sort of unification isn't possible. If any violation of the As mentioned at the start, the distributed locking approaches offered by this library are, in my experience, good enough for a large number of real-life scenarios. Furthermore, they are easy to use correctly and easy to reason about. However, it is worth being aware of any technology's limitations! -## Migrating from 1.x to 2.x - -The 2.0 release of DistributedLock is a significant departure from the 1.x series in several ways. While a large percentage of source code written for 1.x should still compile against 2.x, you will almost certainly encounter some issues and this section is intended to help navigate them. - -### Package structure -First off, with the addition of many new locking technologies the package has been broken up into sub-packages which can be installed independently. This allows users to avoid bloating their dependency trees by just installing the providers they actually use. If you've been using SQL Server-based locks, for example, you may want to remove the DistributedLock package and instead install just the DistributedLock.SqlServer package when you upgrade. - -### Safe naming -In 1.x, it was often necessary to call an API like `SqlDistributedLock.GetSafeName()` before constructing a lock instance to ensure that the name you passed in was compatible with the underlying technology. In 2.0, safe naming is enabled by default; instead using the exact name (which is occasionally helpful if you have non-C# code trying to take the same lock) is a constructor option: - -```C# -// 1.x -new SqlDistributedLock(SqlDistributedLock.GetSafeName(name), connectionString); // safe name -new SqlDistributedLock(name, connectionString); // exact name (rare) - -// 2.0 -new SqlDistributedLock(name, connectionString) // safe name -new SqlDistributedLock(name, connectionString, exactName: true) // exact name (rare) -``` - -### SystemDistributedLock renamed -1.x's `SystemDistributedLock` has been renamed to `EventWaitHandleDistributedLock` to emphasize its reliance on that Windows-only technology. Furthermore, 2.0 contains `FileDistributedLock` which offers an alternative system-scoped locking mechanism. - -### SQL Server connection options -1.x offered an [enum-based approach to configuring how the lock connected to the database](https://github.com/madelson/DistributedLock/tree/release-1.5#connection-management). In 2.0, this has been replaced with a more flexible options argument. Note that Azure-focused "keepalive" behavior and connection multiplexing have been enabled by default in 2.0. - -### ValueTask return values -The 1.x `AcquireAsync` methods return `Task`. The problem with this API is that it made it easy to write incorrect code that looked correct because `Task` implements `IDisposable`. 2.0 switches to `ValueTask` (which wasn't available when the 1.x APIs were created) to avoid this problem. - -```C# -// 1.x -// Forgetting 'await' means that the using block is disposing the Task and not the lock handle. -// We will likely enter the block before the handle is acquired and will never release the handle! -using (myLock.AcquireAsync()) { } - -// 2.0 -// this code will not compile (since ValueTask is not IDisposable) -using (myLock.AcquireAsync()) { } -``` - -If you need a `Task`, you can simply call `.AsTask()` on the returned `ValueTask`. If you are doing anything other than immediately awaiting the task, I recommend reading [Microsoft's documentation on how ValueTasks can be used](https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1?view=net-5.0#remarks). - -### Async disposal -Since the release of 1.x, Microsoft added the `IAsyncDisposable` interface as an async-friendly alternative to `IDisposable`. If you were previously using async locking, you can now switch to async disposing for additional async goodness! - -```C# -// 1.x and 2.0 (acquires asynchronously, releases synchronously) -using (await myLock.AcquireAsync()) { } - -// 2.0 only (acquires and releases asynchronously) -await using (await myLock.AcquireAsync()) { } -```