diff --git a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj index 49d0f16e5..3fe8e2bff 100644 --- a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj +++ b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj @@ -182,6 +182,7 @@ + @@ -281,6 +282,10 @@ {5D0F00F0-26C9-4785-AD61-B85710C60EB0} Orchard.Tags + + {3f72a4e9-7b72-4260-b010-c16ec54f9baf} + Orchard.TaskLease + {CDE24A24-01D3-403C-84B9-37722E18DFB7} Orchard.Themes diff --git a/src/Orchard.Tests.Modules/TaskLease/DatabaseLockTests.cs b/src/Orchard.Tests.Modules/TaskLease/DatabaseLockTests.cs new file mode 100644 index 000000000..5cf9611b8 --- /dev/null +++ b/src/Orchard.Tests.Modules/TaskLease/DatabaseLockTests.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Autofac; +using NUnit.Framework; +using Orchard.Data; +using Orchard.TaskLease.Models; +using Orchard.TaskLease.Services; + +namespace Orchard.Tests.Modules.TaskLease { + [TestFixture] + public class DatabaseLockTests : DatabaseEnabledTestsBase { + private IRepository _databaseLockRepository; + private DatabaseLock _lock; + + protected override IEnumerable DatabaseTypes { + get { + yield return typeof(DatabaseLockRecord); + } + } + + public override void Register(ContainerBuilder builder) { + builder.RegisterType().AsSelf(); + } + + public override void Init() { + base.Init(); + + _databaseLockRepository = _container.Resolve>(); + _lock = _container.Resolve(); + } + + [Test] + public void AcquiringLockSucceeds() { + var lockAcquired = _lock.TryAcquire("Test", TimeSpan.FromSeconds(60)); + + Assert.That(lockAcquired, Is.True); + Assert.That(_databaseLockRepository.Table.Count(), Is.EqualTo(1)); + } + + [Test] + public void DisposingRemovesLockRecord() { + _lock.TryAcquire("Test", TimeSpan.FromSeconds(60)); + _lock.Dispose(); + Assert.That(_databaseLockRepository.Table.Count(), Is.EqualTo(0)); + } + + [Test] + public void AcquiringLockTwiceFails() { + var attempt1 = _lock.TryAcquire("Test", TimeSpan.FromSeconds(60)); + var attempt2 = _lock.TryAcquire("Test", TimeSpan.FromSeconds(60)); + + Assert.That(attempt1, Is.True); + Assert.That(attempt2, Is.False); + } + + [Test] + public void AcquiringExpiredLockSucceeds() { + var attempt1 = _lock.TryAcquire("Test", TimeSpan.FromSeconds(60)); + var attempt2 = _lock.TryAcquire("Test", TimeSpan.FromSeconds(-1)); // Treat the previosuly stored lock as immediately expired. + + Assert.That(attempt1, Is.True); + Assert.That(attempt2, Is.True); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Tests/Orchard.Framework.Tests.csproj b/src/Orchard.Tests/Orchard.Framework.Tests.csproj index c26fc9d28..2ab1f8f73 100644 --- a/src/Orchard.Tests/Orchard.Framework.Tests.csproj +++ b/src/Orchard.Tests/Orchard.Framework.Tests.csproj @@ -269,6 +269,7 @@ + diff --git a/src/Orchard.Tests/Stubs/StubMachineNameProvider.cs b/src/Orchard.Tests/Stubs/StubMachineNameProvider.cs new file mode 100644 index 000000000..5d4b49638 --- /dev/null +++ b/src/Orchard.Tests/Stubs/StubMachineNameProvider.cs @@ -0,0 +1,9 @@ +using Orchard.Environment; + +namespace Orchard.Tests.Stubs { + public class StubMachineNameProvider : IMachineNameProvider { + public string GetMachineName() { + return "Orchard Machine"; + } + } +}