public void VerifyReentrants() { var a = new DummyActor(); var guard = CreateAndInitializeReentrancyGuard(a, ActorReentrancyMode.LogicalCallContext); var tasks = new Task[1]; for (int i = 0; i < 1; ++i) { tasks[i] = Task.Run(() => { RunTest(guard); } ); } Task.WaitAll(tasks); }
public void ReentrancyDisallowedTest() { var actor = new DummyActor(); var guard = CreateAndInitializeReentrancyGuard(actor, ActorReentrancyMode.Disallowed); var context = Guid.NewGuid().ToString(); guard.Acquire(context, null, CancellationToken.None).Wait(); guard.Test_CurrentContext.Should().Be(context); guard.Test_CurrentCount.Should().Be(1); Action action = () => guard.Acquire(context, null, CancellationToken.None).Wait(); action.ShouldThrow <AggregateException>(); guard.ReleaseContext(context).Wait(); guard.Test_CurrentContext.Should().NotBe(context); guard.Test_CurrentCount.Should().Be(0); }
public void VerifyDirtyCallbacks() { var actor = new DummyActor(); var guard = CreateAndInitializeReentrancyGuard(actor, ActorReentrancyMode.LogicalCallContext); actor.IsDirty = true; string callContext = Guid.NewGuid().ToString(); var result = guard.Acquire(callContext, @base => ReplacementHandler(actor), CancellationToken.None); try { result.Wait(); actor.IsDirty.Should().BeFalse("ReentrancyGuard IsDirty should be set to false"); } finally { guard.ReleaseContext(callContext).Wait(); } RunTest(guard); }