Exemplo n.º 1
0
        private static bool TryUpdateStateCache(TransactionTrace trace, TieredStateCache groupStateCache)
        {
            if (trace == null)
            {
                return(false);
            }

            if (!trace.IsSuccessful())
            {
                var transactionExecutingStateSets = new List <TransactionExecutingStateSet>();

                AddToTransactionStateSets(transactionExecutingStateSets, trace.PreTraces);
                AddToTransactionStateSets(transactionExecutingStateSets, trace.PostTraces);

                groupStateCache.Update(transactionExecutingStateSets);
                trace.SurfaceUpError();
            }
            else
            {
                groupStateCache.Update(trace.GetStateSets());
            }

            return(true);
        }
        public void SurfaceUpError_Test()
        {
            var transactionTrace = new TransactionTrace
            {
                ExecutionStatus = ExecutionStatus.Executed,
                InlineTraces    =
                {
                    new TransactionTrace
                    {
                        ExecutionStatus = ExecutionStatus.Executed
                    }
                }
            };

            transactionTrace.SurfaceUpError();
            transactionTrace.Error.ShouldBeEmpty();
            transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Executed);

            transactionTrace.ExecutionStatus = ExecutionStatus.Canceled;
            transactionTrace.SurfaceUpError();
            transactionTrace.Error.ShouldBeEmpty();
            transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Canceled);

            transactionTrace = new TransactionTrace
            {
                ExecutionStatus = ExecutionStatus.Executed,
                InlineTraces    =
                {
                    new TransactionTrace
                    {
                        ExecutionStatus = ExecutionStatus.ExceededMaxCallDepth,
                        Error           = "ExceededMaxCallDepth"
                    }
                }
            };
            transactionTrace.SurfaceUpError();
            transactionTrace.Error.ShouldContain("ExceededMaxCallDepth");
            transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.ExceededMaxCallDepth);

            transactionTrace = new TransactionTrace
            {
                ExecutionStatus = ExecutionStatus.Prefailed,
                PreTraces       =
                {
                    new TransactionTrace
                    {
                        ExecutionStatus = ExecutionStatus.Executed
                    }
                }
            };
            transactionTrace.SurfaceUpError();
            transactionTrace.Error.ShouldBeEmpty();
            transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Prefailed);

            transactionTrace.PreTraces.Add(new TransactionTrace
            {
                ExecutionStatus = ExecutionStatus.Canceled,
                Error           = "Canceled"
            });
            transactionTrace.SurfaceUpError();
            transactionTrace.Error.ShouldContain("Canceled");
            transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Prefailed);

            transactionTrace = new TransactionTrace
            {
                ExecutionStatus = ExecutionStatus.Postfailed,
                PostTraces      =
                {
                    new TransactionTrace
                    {
                        ExecutionStatus = ExecutionStatus.Executed
                    }
                }
            };
            transactionTrace.SurfaceUpError();
            transactionTrace.Error.ShouldBeEmpty();
            transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Postfailed);

            transactionTrace.PostTraces.Add(new TransactionTrace
            {
                ExecutionStatus = ExecutionStatus.Canceled,
                Error           = "Canceled"
            });
            transactionTrace.SurfaceUpError();
            transactionTrace.Error.ShouldContain("Canceled");
            transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Postfailed);
        }