public void testLockingWritesImplyReads() { bladeDirectorWCF.bladeLockCollection uut = new bladeDirectorWCF.bladeLockCollection(bladeLockType.lockNone, bladeLockType.lockBIOS); uut.release(bladeLockType.lockNone, bladeLockType.lockBIOS); Assert.IsFalse(uut.assertLocks(bladeLockType.lockNone, bladeLockType.lockNone)); }
public void testWriterLockCanBeDowngradedAndThenReleased() { bladeDirectorWCF.bladeLockCollection uut = new bladeDirectorWCF.bladeLockCollection(bladeLockType.lockNone, bladeLockType.lockSnapshot); uut.release(bladeLockType.lockNone, bladeLockType.lockSnapshot); // Downgrade should've happened. Assert.IsTrue(uut.assertLocks(bladeLockType.lockSnapshot, bladeLockType.lockNone)); uut.release(bladeLockType.lockSnapshot, bladeLockType.lockNone); Assert.IsTrue(uut.isUnlocked()); }
public void testReaderLockCanBeUpgradedAndThenReleased() { bladeDirectorWCF.bladeLockCollection uut = new bladeDirectorWCF.bladeLockCollection(bladeLockType.lockBIOS, bladeLockType.lockNone); uut.acquire(bladeLockType.lockNone, bladeLockType.lockBIOS); uut.release(bladeLockType.lockNone, bladeLockType.lockBIOS); Assert.IsTrue(uut.assertLocks(bladeLockType.lockBIOS, bladeLockType.lockNone)); uut.release(bladeLockType.lockBIOS, bladeLockType.lockNone); Assert.IsTrue(uut.isUnlocked()); }
public void testWriterLockWontLeaveThingsLockedOnException() { bladeDirectorWCF.bladeLockCollection uut = new bladeDirectorWCF.bladeLockCollection(bladeLockType.lockNone, bladeLockType.lockSnapshot); // Attempt to lock for two things - NAS and BIOS. Inject an exception on the NAS exception, which happens _after_ the // BIOS lock. Verify that the BIOS lock is also released. bool didThrow = false; try { uut.faultInjectOnLockOfThis = bladeLockType.lockNASOperations; uut.acquire(bladeLockType.lockNASOperations | bladeLockType.lockBIOS, bladeLockType.lockNASOperations | bladeLockType.lockBIOS); } catch (ApplicationException) { didThrow = true; } Assert.IsTrue(didThrow, "Fault was not injected?"); uut.faultInjectOnLockOfThis = 0; uut.release(bladeLockType.lockNone, bladeLockType.lockSnapshot); Assert.IsTrue(uut.isUnlocked()); uut.assertLocks(bladeLockType.lockNone, bladeLockType.lockNone); }