public void SinglePhaseDurable(int volatileCount, EnlistmentOptions volatileEnlistmentOption, Phase1Vote volatilePhase1Vote, SinglePhaseVote singlePhaseVote, bool commit, EnlistmentOutcome expectedVolatileOutcome, TransactionStatus expectedTxStatus) { Transaction tx = null; try { using (TransactionScope ts = new TransactionScope()) { tx = Transaction.Current.Clone(); if (volatileCount > 0) { TestSinglePhaseEnlistment[] volatiles = new TestSinglePhaseEnlistment[volatileCount]; for (int i = 0; i < volatileCount; i++) { // It doesn't matter what we specify for SinglePhaseVote. volatiles[i] = new TestSinglePhaseEnlistment(volatilePhase1Vote, SinglePhaseVote.InDoubt, expectedVolatileOutcome); tx.EnlistVolatile(volatiles[i], volatileEnlistmentOption); } } // Doesn't really matter what we specify for EnlistmentOutcome here. This is an SPC, so Phase2 won't happen for this enlistment. TestSinglePhaseEnlistment durable = new TestSinglePhaseEnlistment(Phase1Vote.Prepared, singlePhaseVote, EnlistmentOutcome.Committed); tx.EnlistDurable(Guid.NewGuid(), durable, EnlistmentOptions.None); if (commit) { ts.Complete(); } } } catch (TransactionInDoubtException) { Assert.Equal(TransactionStatus.InDoubt, expectedTxStatus); } catch (TransactionAbortedException) { Assert.Equal(TransactionStatus.Aborted, expectedTxStatus); } Assert.NotNull(tx); Assert.Equal(expectedTxStatus, tx.TransactionInformation.Status); }
public void SinglePhaseDurable(int volatileCount, EnlistmentOptions volatileEnlistmentOption, Phase1Vote volatilePhase1Vote, SinglePhaseVote singlePhaseVote, bool commit, EnlistmentOutcome expectedVolatileOutcome, TransactionStatus expectedTxStatus) { Transaction tx = null; try { using (TransactionScope ts = new TransactionScope()) { tx = Transaction.Current.Clone(); if (volatileCount > 0) { TestSinglePhaseEnlistment[] volatiles = new TestSinglePhaseEnlistment[volatileCount]; for (int i = 0; i < volatileCount; i++) { // It doesn't matter what we specify for SinglePhaseVote. volatiles[i] = new TestSinglePhaseEnlistment(volatilePhase1Vote, SinglePhaseVote.InDoubt, expectedVolatileOutcome); tx.EnlistVolatile(volatiles[i], volatileEnlistmentOption); } } // Doesn't really matter what we specify for EnlistmentOutcome here. This is an SPC, so Phase2 won't happen for this enlistment. TestSinglePhaseEnlistment durable = new TestSinglePhaseEnlistment(Phase1Vote.Prepared, singlePhaseVote, EnlistmentOutcome.Committed); tx.EnlistDurable(Guid.NewGuid(), durable, EnlistmentOptions.None); if (commit) { ts.Complete(); } } } catch (TransactionInDoubtException) { Assert.Equal(expectedTxStatus, TransactionStatus.InDoubt); } catch (TransactionAbortedException) { Assert.Equal(expectedTxStatus, TransactionStatus.Aborted); } Assert.NotNull(tx); Assert.Equal(expectedTxStatus, tx.TransactionInformation.Status); }