Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
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);
        }