using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using SyncEngine.Sync; namespace SyncEngine.Tests { [TestClass] public class SyncInstanceLockTests { [TestMethod] public void TryAcquire_FirstCall_ReturnsLock() { var mutexName = UniqueMutexName(); using (var instanceLock = SyncInstanceLock.TryAcquire(mutexName)) { Assert.IsNotNull(instanceLock); } } [TestMethod] public void TryAcquire_SecondCallWhileHeld_ReturnsNull() { var mutexName = UniqueMutexName(); using (var first = SyncInstanceLock.TryAcquire(mutexName)) { Assert.IsNotNull(first); using (var second = SyncInstanceLock.TryAcquire(mutexName)) { Assert.IsNull(second); } } } [TestMethod] public void TryAcquire_AfterDispose_SucceedsAgain() { var mutexName = UniqueMutexName(); using (var first = SyncInstanceLock.TryAcquire(mutexName)) { Assert.IsNotNull(first); } using (var second = SyncInstanceLock.TryAcquire(mutexName)) { Assert.IsNotNull(second); } } private static string UniqueMutexName() { return @"Global\SyncCoordinator.SyncEngine.Test." + Guid.NewGuid().ToString("N"); } } }