From 5b16024713dae6537a8c61b75f48c57380fe640c Mon Sep 17 00:00:00 2001 From: VahidN Date: Mon, 11 Nov 2024 00:03:28 +0330 Subject: [PATCH] Use the new locker methods --- .../EFCoreSecondLevelCacheInterceptor.csproj | 2 +- .../ILockProvider.cs | 7 +- .../LockProvider.cs | 15 +- .../LockProviderTests.cs | 16 +- .../MockDisposable.cs | 31 + .../SecondLevelCacheInterceptorTests.cs | 742 ++++-------------- .../_run_tests.cmd | 2 +- 7 files changed, 223 insertions(+), 592 deletions(-) create mode 100644 src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/MockDisposable.cs diff --git a/src/EFCoreSecondLevelCacheInterceptor/EFCoreSecondLevelCacheInterceptor.csproj b/src/EFCoreSecondLevelCacheInterceptor/EFCoreSecondLevelCacheInterceptor.csproj index 82fb89c..31d9208 100644 --- a/src/EFCoreSecondLevelCacheInterceptor/EFCoreSecondLevelCacheInterceptor.csproj +++ b/src/EFCoreSecondLevelCacheInterceptor/EFCoreSecondLevelCacheInterceptor.csproj @@ -1,7 +1,7 @@  Entity Framework Core Second Level Caching Library. - 4.8.6 + 4.8.7 Vahid Nasiri net8.0;net7.0;net6.0;net5.0;netstandard2.1;netstandard2.0;net462;netcoreapp3.1; true diff --git a/src/EFCoreSecondLevelCacheInterceptor/ILockProvider.cs b/src/EFCoreSecondLevelCacheInterceptor/ILockProvider.cs index e7cb97a..d344ba6 100644 --- a/src/EFCoreSecondLevelCacheInterceptor/ILockProvider.cs +++ b/src/EFCoreSecondLevelCacheInterceptor/ILockProvider.cs @@ -1,5 +1,4 @@ -using AsyncKeyedLock; -using System; +using System; using System.Threading; using System.Threading.Tasks; @@ -13,10 +12,10 @@ public interface ILockProvider : IDisposable /// /// Tries to enter the sync lock /// - AsyncNonKeyedLockReleaser Lock(CancellationToken cancellationToken = default); + IDisposable? Lock(CancellationToken cancellationToken = default); /// /// Tries to enter the async lock /// - ValueTask LockAsync(CancellationToken cancellationToken = default); + ValueTask LockAsync(CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/src/EFCoreSecondLevelCacheInterceptor/LockProvider.cs b/src/EFCoreSecondLevelCacheInterceptor/LockProvider.cs index 83d289f..6bbed7c 100644 --- a/src/EFCoreSecondLevelCacheInterceptor/LockProvider.cs +++ b/src/EFCoreSecondLevelCacheInterceptor/LockProvider.cs @@ -12,25 +12,24 @@ namespace EFCoreSecondLevelCacheInterceptor; public sealed class LockProvider : ILockProvider { private readonly AsyncNonKeyedLocker _lock = new(); + private readonly TimeSpan _timeout = TimeSpan.FromSeconds(value: 7); /// /// Tries to enter the sync lock /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public AsyncNonKeyedLockReleaser Lock(CancellationToken cancellationToken = default) => _lock.Lock(cancellationToken); + public IDisposable? Lock(CancellationToken cancellationToken = default) + => _lock.LockOrNull(_timeout, cancellationToken); /// /// Tries to enter the async lock /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public ValueTask LockAsync(CancellationToken cancellationToken = default) => - _lock.LockAsync(cancellationToken); + public ValueTask LockAsync(CancellationToken cancellationToken = default) + => _lock.LockOrNullAsync(_timeout, cancellationToken); /// /// Disposes the lock - /// - public void Dispose() - { - _lock.Dispose(); - } + /// + public void Dispose() => _lock.Dispose(); } \ No newline at end of file diff --git a/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/LockProviderTests.cs b/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/LockProviderTests.cs index 38f243f..9247585 100644 --- a/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/LockProviderTests.cs +++ b/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/LockProviderTests.cs @@ -1,5 +1,3 @@ -using AsyncKeyedLock; - namespace EFCoreSecondLevelCacheInterceptor.UnitTests; public class LockProviderTests @@ -14,7 +12,7 @@ public void Lock_ReturnsNonNullReleaser() var releaser = lockProvider.Lock(); // Assert - Assert.IsType(releaser); + Assert.IsAssignableFrom(releaser); } [Fact] @@ -27,7 +25,7 @@ public async Task LockAsync_ReturnsNonNullReleaser() var releaser = await lockProvider.LockAsync(); // Assert - Assert.IsType(releaser); + Assert.IsAssignableFrom(releaser); } [Fact] @@ -38,10 +36,10 @@ public void Lock_CanBeDisposed() var releaser = lockProvider.Lock(); // Act - releaser.Dispose(); + releaser?.Dispose(); // Assert - Assert.True(true); // If no exception is thrown, the test passes + Assert.True(condition: true); // If no exception is thrown, the test passes } [Fact] @@ -52,10 +50,10 @@ public async Task LockAsync_CanBeDisposed() var releaser = await lockProvider.LockAsync(); // Act - releaser.Dispose(); + releaser?.Dispose(); // Assert - Assert.True(true); // If no exception is thrown, the test passes + Assert.True(condition: true); // If no exception is thrown, the test passes } [Fact] @@ -68,6 +66,6 @@ public void Dispose_DisposesLockProvider() lockProvider.Dispose(); // Assert - Assert.True(true); // If no exception is thrown, the test passes + Assert.True(condition: true); // If no exception is thrown, the test passes } } \ No newline at end of file diff --git a/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/MockDisposable.cs b/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/MockDisposable.cs new file mode 100644 index 0000000..ae5ae4f --- /dev/null +++ b/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/MockDisposable.cs @@ -0,0 +1,31 @@ +namespace EFCoreSecondLevelCacheInterceptor.UnitTests; + +public class MockDisposable : IDisposable +{ + private bool _disposed; + + public void Dispose() + { + Dispose(disposing: true); + + // tell the GC not to finalize + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!_disposed) + { + if (disposing) + { + // Not in destructor, OK to reference other objects + } + + // perform cleanup for this object + } + + _disposed = true; + } + + ~MockDisposable() => Dispose(disposing: false); +} \ No newline at end of file diff --git a/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/SecondLevelCacheInterceptorTests.cs b/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/SecondLevelCacheInterceptorTests.cs index 4e2bf95..d706402 100644 --- a/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/SecondLevelCacheInterceptorTests.cs +++ b/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/SecondLevelCacheInterceptorTests.cs @@ -6,7 +6,7 @@ namespace EFCoreSecondLevelCacheInterceptor.UnitTests; -[SuppressMessage("ReSharper", "AssignNullToNotNullAttribute")] +[SuppressMessage(category: "ReSharper", checkId: "AssignNullToNotNullAttribute")] public class SecondLevelCacheInterceptorTests { [Fact] @@ -25,7 +25,8 @@ public void Constructor_ThrowsArgumentNullException_WhenProcessorIsNull() { var lockProviderMock = new Mock(); - Assert.Throws(() => new SecondLevelCacheInterceptor(null, lockProviderMock.Object)); + Assert.Throws(() + => new SecondLevelCacheInterceptor(processor: null, lockProviderMock.Object)); } [Fact] @@ -33,7 +34,8 @@ public void Constructor_ThrowsArgumentNullException_WhenLockProviderIsNull() { var processorMock = new Mock(); - Assert.Throws(() => new SecondLevelCacheInterceptor(processorMock.Object, null)); + Assert.Throws(() + => new SecondLevelCacheInterceptor(processorMock.Object, lockProvider: null)); } [Fact] @@ -44,21 +46,10 @@ public void NonQueryExecuted_ShouldLock() const int result = int.MinValue; var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -83,21 +74,10 @@ public void NonQueryExecuted_ReturnsProcessedResult() const int result = int.MinValue; var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -122,21 +102,10 @@ public void NonQueryExecuted_ShouldNotThrowArgumentNullException_WhenAnyParamete const int result = int.MinValue; var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -147,13 +116,12 @@ public void NonQueryExecuted_ShouldNotThrowArgumentNullException_WhenAnyParamete var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = Record.Exception(() => interceptor.NonQueryExecuted(null, null, result)); + var actual = Record.Exception(() => interceptor.NonQueryExecuted(command: null, eventData: null, result)); // Assert Assert.Null(actual); } - [Fact] public async Task NonQueryExecutedAsync_ShouldLock() { @@ -162,27 +130,16 @@ public async Task NonQueryExecutedAsync_ShouldLock() const int result = int.MinValue; var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); lockProvider.Setup(lp => lp.LockAsync(CancellationToken.None)) - .Returns(new ValueTask(new AsyncNonKeyedLockReleaser())); + .Returns(new ValueTask(new MockDisposable())); processor.Setup(p => p.ProcessExecutedCommands(command, eventData.Context, result)).Returns(expected); @@ -203,21 +160,10 @@ public async Task NonQueryExecutedAsync_ReturnsProcessedResult() const int result = int.MinValue; var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -242,21 +188,10 @@ public async Task NonQueryExecutedAsync_ShouldNotThrowArgumentNullException_When const int result = 1; var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -267,8 +202,8 @@ public async Task NonQueryExecutedAsync_ShouldNotThrowArgumentNullException_When var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = await Record - .ExceptionAsync(async () => await interceptor.NonQueryExecutedAsync(null, null, result)); + var actual = await Record.ExceptionAsync(async () + => await interceptor.NonQueryExecutedAsync(command: null, eventData: null, result)); // Assert Assert.Null(actual); @@ -282,21 +217,10 @@ public void NonQueryExecuting_ShouldLock() var result = InterceptionResult.SuppressWithResult(int.MinValue); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -321,21 +245,10 @@ public void NonQueryExecuting_ReturnsExpectedInterceptionResult() var result = InterceptionResult.SuppressWithResult(int.MinValue); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -360,21 +273,10 @@ public void NonQueryExecuting_ShouldNotThrowArgumentNullException_WhenAnyParamet var result = InterceptionResult.SuppressWithResult(int.MinValue); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -385,7 +287,7 @@ public void NonQueryExecuting_ShouldNotThrowArgumentNullException_WhenAnyParamet var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = Record.Exception(() => interceptor.NonQueryExecuting(null, null, result)); + var actual = Record.Exception(() => interceptor.NonQueryExecuting(command: null, eventData: null, result)); // Assert Assert.Null(actual); @@ -399,27 +301,16 @@ public async Task NonQueryExecutingAsync_ShouldLock() var result = InterceptionResult.SuppressWithResult(int.MinValue); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); lockProvider.Setup(lp => lp.LockAsync(CancellationToken.None)) - .Returns(new ValueTask(new AsyncNonKeyedLockReleaser())); + .Returns(new ValueTask(new MockDisposable())); processor.Setup(p => p.ProcessExecutingCommands(command, eventData.Context, result)).Returns(expected); @@ -440,21 +331,10 @@ public async Task NonQueryExecutingAsync_ReturnsExpectedInterceptionResult() var result = InterceptionResult.SuppressWithResult(int.MinValue); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -479,21 +359,10 @@ public async Task NonQueryExecutingAsync_ShouldNotThrowArgumentNullException_Whe var result = InterceptionResult.SuppressWithResult(int.MinValue); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -504,8 +373,8 @@ public async Task NonQueryExecutingAsync_ShouldNotThrowArgumentNullException_Whe var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = await Record - .ExceptionAsync(async () => await interceptor.NonQueryExecutingAsync(null, null, result)); + var actual = await Record.ExceptionAsync(async () + => await interceptor.NonQueryExecutingAsync(command: null, eventData: null, result)); // Assert Assert.Null(actual); @@ -517,21 +386,10 @@ public void ReaderExecuted_ShouldLock() // Arrange var expected = Mock.Of(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -554,21 +412,10 @@ public void ReaderExecuted_ReturnsExpectedDbDataReader() // Arrange var expected = Mock.Of(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -591,21 +438,10 @@ public void ReaderExecuted_ShouldNotThrowArgumentNullException_WhenAnyParameterI // Arrange var expected = Mock.Of(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -616,7 +452,7 @@ public void ReaderExecuted_ShouldNotThrowArgumentNullException_WhenAnyParameterI var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = Record.Exception(() => interceptor.ReaderExecuted(null, null, expected)); + var actual = Record.Exception(() => interceptor.ReaderExecuted(command: null, eventData: null, expected)); // Assert Assert.Null(actual); @@ -628,27 +464,16 @@ public async Task ReaderExecutedAsync_ShouldLock() // Arrange var expected = Mock.Of(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); lockProvider.Setup(lp => lp.LockAsync(CancellationToken.None)) - .Returns(new ValueTask(new AsyncNonKeyedLockReleaser())); + .Returns(new ValueTask(new MockDisposable())); processor.Setup(p => p.ProcessExecutedCommands(command, eventData.Context, expected)).Returns(expected); @@ -667,21 +492,10 @@ public async Task ReaderExecutedAsync_ReturnsExpectedDbDataReader() // Arrange var expected = Mock.Of(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -704,21 +518,10 @@ public async Task ReaderExecutedAsync_ShouldNotThrowArgumentNullException_WhenAn // Arrange var expected = Mock.Of(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -729,8 +532,8 @@ public async Task ReaderExecutedAsync_ShouldNotThrowArgumentNullException_WhenAn var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = await Record - .ExceptionAsync(async () => await interceptor.ReaderExecutedAsync(null, null, expected)); + var actual = await Record.ExceptionAsync(async () + => await interceptor.ReaderExecutedAsync(command: null, eventData: null, expected)); // Assert Assert.Null(actual); @@ -745,21 +548,10 @@ public void ReaderExecuting_ShouldLock() var result = InterceptionResult.SuppressWithResult(dataReader); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -785,21 +577,10 @@ public void ReaderExecuting_ReturnsExpectedInterceptionResult() var result = InterceptionResult.SuppressWithResult(dataReader); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -825,21 +606,10 @@ public void ReaderExecuting_ShouldNotThrowArgumentNullException_WhenAnyParameter var result = InterceptionResult.SuppressWithResult(dataReader); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -850,7 +620,7 @@ public void ReaderExecuting_ShouldNotThrowArgumentNullException_WhenAnyParameter var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = Record.Exception(() => interceptor.ReaderExecuting(null, null, result)); + var actual = Record.Exception(() => interceptor.ReaderExecuting(command: null, eventData: null, result)); // Assert Assert.Null(actual); @@ -865,27 +635,16 @@ public async Task ReaderExecutingAsync_ShouldLock() var result = InterceptionResult.SuppressWithResult(dataReader); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); lockProvider.Setup(lp => lp.LockAsync(CancellationToken.None)) - .Returns(new ValueTask(new AsyncNonKeyedLockReleaser())); + .Returns(new ValueTask(new MockDisposable())); processor.Setup(p => p.ProcessExecutingCommands(command, eventData.Context, result)).Returns(expected); @@ -907,21 +666,10 @@ public async Task ReaderExecutingAsync_ReturnsExpectedInterceptionResult() var result = InterceptionResult.SuppressWithResult(dataReader); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -947,21 +695,10 @@ public async Task ReaderExecutingAsync_ShouldNotThrowArgumentNullException_WhenA var result = InterceptionResult.SuppressWithResult(dataReader); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -972,8 +709,8 @@ public async Task ReaderExecutingAsync_ShouldNotThrowArgumentNullException_WhenA var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = await Record - .ExceptionAsync(async () => await interceptor.ReaderExecutingAsync(null, null, result)); + var actual = await Record.ExceptionAsync(async () + => await interceptor.ReaderExecutingAsync(command: null, eventData: null, result)); // Assert Assert.Null(actual); @@ -987,21 +724,10 @@ public void ScalarExecuted_ShouldLock() var result = new object(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1026,21 +752,10 @@ public void ScalarExecuted_ReturnsProcessedResult() var result = new object(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1065,21 +780,10 @@ public void ScalarExecuted_ShouldNotThrowArgumentNullException_WhenAnyParameterI var result = new object(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1090,13 +794,12 @@ public void ScalarExecuted_ShouldNotThrowArgumentNullException_WhenAnyParameterI var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = Record.Exception(() => interceptor.ScalarExecuted(null, null, result)); + var actual = Record.Exception(() => interceptor.ScalarExecuted(command: null, eventData: null, result)); // Assert Assert.Null(actual); } - [Fact] public async Task ScalarExecutedAsync_ShouldLock() { @@ -1105,27 +808,16 @@ public async Task ScalarExecutedAsync_ShouldLock() var result = new object(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); lockProvider.Setup(lp => lp.LockAsync(CancellationToken.None)) - .Returns(new ValueTask(new AsyncNonKeyedLockReleaser())); + .Returns(new ValueTask(new MockDisposable())); processor.Setup(p => p.ProcessExecutedCommands(command, eventData.Context, result)).Returns(expected); @@ -1146,21 +838,10 @@ public async Task ScalarExecutedAsync_ReturnsProcessedResult() var result = new object(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1185,21 +866,10 @@ public async Task ScalarExecutedAsync_ShouldNotThrowArgumentNullException_WhenAn var result = new object(); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1210,8 +880,8 @@ public async Task ScalarExecutedAsync_ShouldNotThrowArgumentNullException_WhenAn var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = await Record - .ExceptionAsync(async () => await interceptor.ScalarExecutedAsync(null, null, result)); + var actual = await Record.ExceptionAsync(async () + => await interceptor.ScalarExecutedAsync(command: null, eventData: null, result)); // Assert Assert.Null(actual); @@ -1225,21 +895,10 @@ public void ScalarExecuting_ShouldLock() var result = InterceptionResult.SuppressWithResult(new object()); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1264,21 +923,10 @@ public void ScalarExecuting_ReturnsExpectedInterceptionResult() var result = InterceptionResult.SuppressWithResult(new object()); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1303,21 +951,10 @@ public void ScalarExecuting_ShouldNotThrowArgumentNullException_WhenAnyParameter var result = InterceptionResult.SuppressWithResult(new object()); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1328,7 +965,7 @@ public void ScalarExecuting_ShouldNotThrowArgumentNullException_WhenAnyParameter var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = Record.Exception(() => interceptor.ScalarExecuting(null, null, result)); + var actual = Record.Exception(() => interceptor.ScalarExecuting(command: null, eventData: null, result)); // Assert Assert.Null(actual); @@ -1342,27 +979,16 @@ public async Task ScalarExecutingAsync_ShouldLock() var result = InterceptionResult.SuppressWithResult(new object()); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); lockProvider.Setup(lp => lp.LockAsync(CancellationToken.None)) - .Returns(new ValueTask(new AsyncNonKeyedLockReleaser())); + .Returns(new ValueTask(new MockDisposable())); processor.Setup(p => p.ProcessExecutingCommands(command, eventData.Context, result)).Returns(expected); @@ -1383,21 +1009,10 @@ public async Task ScalarExecutingAsync_ReturnsExpectedInterceptionResult() var result = InterceptionResult.SuppressWithResult(new object()); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1422,21 +1037,10 @@ public async Task ScalarExecutingAsync_ShouldNotThrowArgumentNullException_WhenA var result = InterceptionResult.SuppressWithResult(new object()); var command = Mock.Of(); - var eventData = new CommandExecutedEventData( - null, - null, - null, - command, - null, - DbCommandMethod.ExecuteNonQuery, - Guid.Empty, - Guid.Empty, - null, - false, - false, - DateTimeOffset.Now, - TimeSpan.Zero, - CommandSource.LinqQuery); + + var eventData = new CommandExecutedEventData(eventDefinition: null, messageGenerator: null, connection: null, + command, context: null, DbCommandMethod.ExecuteNonQuery, Guid.Empty, Guid.Empty, result: null, async: false, + logParameterValues: false, DateTimeOffset.Now, TimeSpan.Zero, CommandSource.LinqQuery); var lockProvider = new Mock(); var processor = new Mock(); @@ -1447,8 +1051,8 @@ public async Task ScalarExecutingAsync_ShouldNotThrowArgumentNullException_WhenA var interceptor = new SecondLevelCacheInterceptor(processor.Object, lockProvider.Object); // Act - var actual = await Record - .ExceptionAsync(async () => await interceptor.ScalarExecutingAsync(null, null, result)); + var actual = await Record.ExceptionAsync(async () + => await interceptor.ScalarExecutingAsync(command: null, eventData: null, result)); // Assert Assert.Null(actual); diff --git a/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/_run_tests.cmd b/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/_run_tests.cmd index 7695145..b4db73c 100644 --- a/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/_run_tests.cmd +++ b/src/Tests/EFCoreSecondLevelCacheInterceptor.UnitTests/_run_tests.cmd @@ -1,2 +1,2 @@ -dotnet test +dotnet test --logger "console;verbosity=detailed" pause \ No newline at end of file