public void Ctor_AcquiresExclusiveApplicationLock_WithoutUseNativeDatabaseTransactions_OnSession() { PostgreSqlStorageOptions options = new PostgreSqlStorageOptions() { SchemaName = GetSchemaName(), UseNativeDatabaseTransactions = false }; UseConnection(connection => { // ReSharper disable once UnusedVariable var distributedLock = new PostgreSqlDistributedLock("hello", _timeout, connection, options); var lockCount = connection.Query<long>( @"select count(*) from """ + GetSchemaName() + @""".""lock"" where ""resource"" = @resource", new { resource = "hello" }).Single(); Assert.Equal(lockCount, 1); //Assert.Equal("Exclusive", lockMode); }); }
public void Dispose_ReleasesExclusiveApplicationLock_WithoutUseNativeDatabaseTransactions() { PostgreSqlStorageOptions options = new PostgreSqlStorageOptions() { SchemaName = GetSchemaName(), UseNativeDatabaseTransactions = false }; UseConnection(connection => { var distributedLock = new PostgreSqlDistributedLock("hello", _timeout, connection, options); distributedLock.Dispose(); var lockCount = connection.Query <long>( @"select count(*) from """ + GetSchemaName() + @""".""lock"" where ""resource"" = @resource", new { resource = "hello" }).Single(); Assert.Equal(lockCount, 0); }); }
public void Ctor_AcquiresExclusiveApplicationLock_WithoutUseNativeDatabaseTransactions_OnSession() { PostgreSqlStorageOptions options = new PostgreSqlStorageOptions() { SchemaName = GetSchemaName(), UseNativeDatabaseTransactions = false }; UseConnection(connection => { // ReSharper disable once UnusedVariable var distributedLock = new PostgreSqlDistributedLock("hello", _timeout, connection, options); var lockCount = connection.Query <long>( @"select count(*) from """ + GetSchemaName() + @""".""lock"" where ""resource"" = @resource", new { resource = "hello" }).Single(); Assert.Equal(lockCount, 1); //Assert.Equal("Exclusive", lockMode); }); }
public void Ctor_AcquiresExclusiveApplicationLock_WithUseNativeDatabaseTransactions_OnSession_WhenDeadlockIsOccured() { PostgreSqlStorageOptions options = new PostgreSqlStorageOptions() { SchemaName = GetSchemaName(), UseNativeDatabaseTransactions = true, DistributedLockTimeout = TimeSpan.FromSeconds(10) }; UseConnection(connection => { // Arrange var timeout = TimeSpan.FromSeconds(15); var resourceName = "hello"; connection.Execute($@"INSERT INTO ""{GetSchemaName()}"".""lock"" VALUES ('{resourceName}', 0, '{DateTime.UtcNow}')"); // Act var distributedLock = new PostgreSqlDistributedLock(resourceName, timeout, connection, options); // Assert Assert.True(distributedLock != null); }); }
public void Dispose_ReleasesExclusiveApplicationLock_WithoutUseNativeDatabaseTransactions() { PostgreSqlStorageOptions options = new PostgreSqlStorageOptions() { SchemaName = GetSchemaName(), UseNativeDatabaseTransactions = false }; UseConnection(connection => { var distributedLock = new PostgreSqlDistributedLock("hello", _timeout, connection, options); distributedLock.Dispose(); var lockCount = connection.Query<long>( @"select count(*) from """ + GetSchemaName() + @""".""lock"" where ""resource"" = @resource", new { resource = "hello" }).Single(); Assert.Equal(lockCount, 0); }); }