System.Transactions.Tests.NonMsdtcPromoterTests.TestCase_OutcomeRegistration C# (CSharp) Method

TestCase_OutcomeRegistration() public static method

public static TestCase_OutcomeRegistration ( bool promote ) : void
promote bool
return void
        public static void TestCase_OutcomeRegistration(bool promote)
        {
            string testCaseDescription = string.Format(
                "TestCase_OutcomeRegistration promote={0}",
                promote
                );

            Trace("**** " + testCaseDescription + " ****");

            AutoResetEvent pspeCompleted = new AutoResetEvent(false);
            NonMSDTCPromoterEnlistment pspe = null;
            int numberOfCompletions = 0;
            CommittableTransaction tx = null;

            try
            {
                tx = new CommittableTransaction(TimeSpan.FromSeconds(5));

                tx.TransactionCompleted += delegate (object sender, TransactionEventArgs completedArgs)
                {
                    Trace("Completed event registered before PSPE");
                    numberOfCompletions++;
                    Assert.Equal(TransactionStatus.Committed, completedArgs.Transaction.TransactionInformation.Status);
                };

                pspe = (NonMSDTCPromoterEnlistment)CreatePSPEEnlistment(NonMsdtcPromoterTests.PromoterType1,
                    NonMsdtcPromoterTests.PromotedToken1,
                    pspeCompleted,
                    /*nonMSDTC = */ true,
                    tx,
                    /*spcResponse=*/ TransactionStatus.Committed,
                    /*expectRejection=*/ false
                    );

                tx.TransactionCompleted += delegate (object sender, TransactionEventArgs completedArgs)
                {
                    Trace("Completed event registered after PSPE");
                    numberOfCompletions++;
                    Assert.Equal(TransactionStatus.Committed, completedArgs.Transaction.TransactionInformation.Status);
                };

                if (promote)
                {
                    Promote(testCaseDescription, NonMsdtcPromoterTests.PromotedToken1, tx);

                    tx.TransactionCompleted += delegate (object sender, TransactionEventArgs completedArgs)
                    {
                        Trace("Completed event registered after promote");
                        numberOfCompletions++;
                        Assert.Equal(TransactionStatus.Committed, completedArgs.Transaction.TransactionInformation.Status);
                    };
                }

                tx.Commit();
            }
            catch (Exception ex)
            {
                Assert.Null(ex);
            }

            tx.TransactionCompleted += delegate (object sender, TransactionEventArgs completedArgs)
            {
                Trace("Completed event registered after commit");
                numberOfCompletions++;
                Assert.Equal(TransactionStatus.Committed, completedArgs.Transaction.TransactionInformation.Status);
            };

            Assert.True(pspeCompleted.WaitOne(TimeSpan.FromSeconds(5)));

            if (promote)
            {
                Assert.True(pspe.Promoted);
            }
            else
            {
                Assert.False(pspe.Promoted);
            }

            Assert.Equal((promote ? 4 : 3), numberOfCompletions);

            TestPassed();
        }
NonMsdtcPromoterTests