예제 #1
0
        public async Task MultiGrainAbortTransactionOnExceptions(string grainStates)
        {
            const int grainCount = TransactionTestConstants.MaxCoordinatedTransactions - 1;
            const int expected   = 5;

            ITransactionTestGrain        throwGrain = RandomTestGrain(grainStates);
            List <ITransactionTestGrain> grains     =
                Enumerable.Range(0, grainCount)
                .Select(i => RandomTestGrain(grainStates))
                .ToList();
            ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid());

            await throwGrain.Set(expected);

            await coordinator.MultiGrainSet(grains, expected);

            await Assert.ThrowsAsync <OrleansTransactionAbortedException>(() => coordinator.MultiGrainAddAndThrow(throwGrain, grains, expected));

            grains.Add(throwGrain);

            await TestAfterDustSettles(async() =>
            {
                foreach (var grain in grains)
                {
                    int[] actualValues = await grain.Get();
                    foreach (var actual in actualValues)
                    {
                        Assert.Equal(expected, actual);
                    }
                }
            });
        }
 public virtual void TransactionGrainsThrowWhenTransactions(string transactionTestGrainClassName)
 {
     const int             delta = 5;
     ITransactionTestGrain grain = RandomTestGrain(transactionTestGrainClassName);
     Func <Task>           task  = () => grain.Set(delta);
     var response = task.ShouldThrow <OrleansTransactionsDisabledException>();
 }
예제 #3
0
        public async Task AbortTransactionOnOrphanCalls(string transactionTestGrainClassName)
        {
            const int expected = 5;

            ITransactionTestGrain        grain       = RandomTestGrain(transactionTestGrainClassName);
            ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid());

            await grain.Set(expected);

            await Assert.ThrowsAsync <OrleansOrphanCallException>(() => coordinator.OrphanCallTransaction(grain));

            //await Task.Delay(20000); // give time for GC

            await TestAfterDustSettles(async() =>
            {
                int actual = await grain.Get();
                Assert.Equal(expected, actual);
            });
        }
        public async Task AbortTransactionOnOrphanCalls(TransactionTestConstants.TransactionGrainStates grainStates)
        {
            const int expected = 5;

            ITransactionTestGrain        grain       = RandomTestGrain(grainStates);
            ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid());

            await grain.Set(expected);

            await Assert.ThrowsAsync <OrleansOrphanCallException>(() => coordinator.OrphanCallTransaction(grain));

            //await Task.Delay(20000); // give time for GC

            await TestAfterDustSettles(async() =>
            {
                int[] actualValues = await grain.Get();
                foreach (var actual in actualValues)
                {
                    Assert.Equal(expected, actual);
                }
            });
        }
        public virtual async Task AbortTransactionOnOrphanCalls(string grainStates)
        {
            const int expected = 5;

            ITransactionTestGrain        grain       = RandomTestGrain(grainStates);
            ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid());

            await grain.Set(expected);

            Func <Task> task = () => coordinator.OrphanCallTransaction(grain);
            await task.Should().ThrowAsync <OrleansOrphanCallException>();

            //await Task.Delay(20000); // give time for GC

            await TestAfterDustSettles(async() =>
            {
                int[] actualValues = await grain.Get();
                foreach (var actual in actualValues)
                {
                    actual.Should().Be(expected);
                }
            });
        }
예제 #6
0
        public virtual async Task MultiGrainAbortTransactionOnExceptions(string grainStates)
        {
            const int grainCount = TransactionTestConstants.MaxCoordinatedTransactions - 1;
            const int expected   = 5;

            ITransactionTestGrain        throwGrain = RandomTestGrain(grainStates);
            List <ITransactionTestGrain> grains     =
                Enumerable.Range(0, grainCount)
                .Select(i => RandomTestGrain(grainStates))
                .ToList();
            ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid());

            await throwGrain.Set(expected);

            await coordinator.MultiGrainSet(grains, expected);

            Func <Task> task = () => coordinator.MultiGrainAddAndThrow(new List <ITransactionTestGrain>()
            {
                throwGrain
            }, grains, expected);

            task.ShouldThrow <OrleansTransactionAbortedException>();
            grains.Add(throwGrain);

            await TestAfterDustSettles(async() =>
            {
                foreach (var grain in grains)
                {
                    int[] actualValues = await grain.Get();
                    foreach (var actual in actualValues)
                    {
                        actual.ShouldBeEquivalentTo(expected);
                    }
                }
            });
        }
        public virtual async Task TransactionGrainsThrowWhenTransactions(string transactionTestGrainClassName)
        {
            const int             delta = 5;
            ITransactionTestGrain grain = RandomTestGrain(transactionTestGrainClassName);
            OrleansStartTransactionFailedException exception = await Assert.ThrowsAsync <OrleansStartTransactionFailedException>(() => grain.Set(delta));

            Assert.IsAssignableFrom <OrleansTransactionsDisabledException>(exception.InnerException);
        }