コード例 #1
0
        public virtual async Task MultiGrainWriteTransactionWithCommitException(string grainStates, int grainCount)
        {
            const int expected = 5;

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

            ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid());

            await coordinator.MultiGrainAdd(committer, new PassOperation("pass"), grains, expected);

            Func <Task> task = () => coordinator.MultiGrainAdd(committer, new ThrowOperation("throw"), grains, expected);
            await task.Should().ThrowAsync <OrleansTransactionInDoubtException>();

            foreach (var grain in grains)
            {
                var actualValues = await grain.Get();

                foreach (var actual in actualValues)
                {
                    actual.Should().Be(expected);
                }
            }

            // TODO : Add verification that commit service receive call with proper args.
        }
コード例 #2
0
        public virtual async Task MultiGrainWriteTransaction(string grainStates, int grainCount)
        {
            const int expected = 5;

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

            ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid());

            await coordinator.MultiGrainAdd(committer, "arg", grains, expected);

            foreach (var grain in grains)
            {
                var actualValues = await grain.Get();

                foreach (var actual in actualValues)
                {
                    Assert.Equal(expected, actual);
                }
            }

            // TODO : Add verification that commit service recieve call with proper args.
        }
コード例 #3
0
        public Task MultiGrainAdd(ITransactionCommitterTestGrain committer, ITransactionCommitOperation <IRemoteCommitService> operation, List <ITransactionTestGrain> grains, int numberToAdd)
        {
            List <Task> tasks = new List <Task>();

            tasks.AddRange(grains.Select(g => g.Add(numberToAdd)));
            tasks.Add(committer.Commit(operation));
            return(Task.WhenAll(tasks));
        }
コード例 #4
0
        public Task MultiGrainAdd(ITransactionCommitterTestGrain committer, string commitArg, List <ITransactionTestGrain> grains, int numberToAdd)
        {
            List <Task> tasks = new List <Task>();

            tasks.AddRange(grains.Select(g => g.Add(numberToAdd)));
            tasks.Add(committer.Commit(commitArg));
            return(Task.WhenAll(tasks));
        }