public void MultipleDispose_DoesntThrow() { var m = new MutexWrapper("test_00"); m.Dispose(); m.Dispose(); m.Dispose(); }
public void TestSynchronization_WithMutexWrapper() { // Arrange const string mutexName = "sonarsource.scannerformsbuild.test1"; var oneMinute = TimeSpan.FromMinutes(1); var steps = new List <int>(10); var t1 = new Thread(() => { steps.Add(101); using (var m = new MutexWrapper(mutexName, oneMinute)) { steps.Add(102); } steps.Add(103); }); var t2 = new Thread(() => { try { new MutexWrapper(mutexName, oneMinute); steps.Add(201); Thread.Sleep(oneMinute); steps.Add(202); } catch (ThreadAbortException) { Thread.Sleep(500); steps.Add(203); } }); var t3 = new Thread(() => { steps.Add(301); using (var m = new MutexWrapper(mutexName, oneMinute)) { Thread.Sleep(500); steps.Add(302); } steps.Add(303); }); // Act & Assert t1.Start(); WaitForStep(steps, 103); CollectionAssert.AreEqual(new[] { 101, 102, 103 }, steps); t2.Start(); WaitForStep(steps, 201); CollectionAssert.AreEqual(new[] { 101, 102, 103, 201 }, steps); t3.Start(); WaitForStep(steps, 301); CollectionAssert.AreEqual(new[] { 101, 102, 103, 201, 301 }, steps); t2.Abort(); WaitForStep(steps, 203); CollectionAssert.AreEqual(new[] { 101, 102, 103, 201, 301, 203 }, steps); WaitForStep(steps, 303); CollectionAssert.AreEqual(new[] { 101, 102, 103, 201, 301, 203, 302, 303 }, steps); }