// public constructors
 /// <summary>
 /// Initializes a new instance of the <see cref="CoreTransaction" /> class.
 /// </summary>
 /// <param name="transactionNumber">The transaction number.</param>
 /// <param name="transactionOptions">The transaction options.</param>
 public CoreTransaction(long transactionNumber, TransactionOptions transactionOptions)
 {
     _transactionNumber  = transactionNumber;
     _transactionOptions = transactionOptions;
     _state   = CoreTransactionState.Starting;
     _isEmpty = true;
 }
示例#2
0
 public UnifiedAssertSessionTransactionStateOperation(
     IClientSessionHandle session,
     CoreTransactionState coreTransactionState)
 {
     _session = session;
     _coreTransactionState = coreTransactionState;
 }
示例#3
0
 // internal methods
 internal void SetState(CoreTransactionState state)
 {
     _state = state;
     if (state == CoreTransactionState.InProgress)
     {
         _isEmpty = false;
     }
 }
示例#4
0
        public void SetState_should_have_expected_result(CoreTransactionState value, bool expectedIsEmpty)
        {
            var subject = CreateSubject();

            subject.SetState(value);

            subject.State.Should().Be(value);
            subject.IsEmpty.Should().Be(expectedIsEmpty);
        }
示例#5
0
        public void State_should_return_expected_result(CoreTransactionState value)
        {
            var subject = CreateSubject();

            subject.SetState(value);

            var result = subject.State;

            result.Should().Be(value);
        }
        // protected methods
        protected override void SetArgument(string name, BsonValue value)
        {
            switch (name)
            {
            case "state":
                _state = MapTransactionState(value.ToString());
                break;

            default:
                base.SetArgument(name, value);
                break;
            }
        }
示例#7
0
        public void IsEmpty_should_return_expected_result(CoreTransactionState transactionState1, CoreTransactionState transactionState2, bool expectedResult)
        {
            var subject = CreateSubject();

            if (transactionState1 != (CoreTransactionState)(-1))
            {
                subject.SetState(transactionState1);
            }
            if (transactionState2 != (CoreTransactionState)(-1))
            {
                subject.SetState(transactionState2);
            }

            var result = subject.IsEmpty;

            result.Should().Be(expectedResult);
        }
示例#8
0
        public void AboutToSendCommand_should_have_expected_result(bool hasCurrentTransaction, CoreTransactionState transactionState, bool isCommitTransactionInProgress, bool expectedHasCurrentTransaction)
        {
            var subject = CreateSubject();

            if (hasCurrentTransaction)
            {
                subject.StartTransaction();
                subject.CurrentTransaction.SetState(transactionState);
                subject._isCommitTransactionInProgress(isCommitTransactionInProgress);
            }

            subject.AboutToSendCommand();

            if (expectedHasCurrentTransaction)
            {
                subject.CurrentTransaction.Should().NotBeNull();
            }
            else
            {
                subject.CurrentTransaction.Should().BeNull();
            }
        }
示例#9
0
        public void IsInTransaction_should_return_expected_result(bool hasCurrentTransaction, CoreTransactionState transactionState, bool isCommitTransactionInProgress, bool expectedResult)
        {
            var subject = CreateSubject();

            if (hasCurrentTransaction)
            {
                subject.StartTransaction();
                subject.CurrentTransaction.SetState(transactionState);
                subject._isCommitTransactionInProgress(isCommitTransactionInProgress);
            }

            var result = subject.IsInTransaction;

            result.Should().Be(expectedResult);
        }
示例#10
0
        public void WithTransaction_with_error_in_callback_should_call_AbortTransaction_according_to_transaction_state(CoreTransactionState transactionState, bool shouldAbortTransactionBeCalled)
        {
            var mockCoreSession = CreateCoreSessionMock();

            mockCoreSession.Setup(c => c.StartTransaction(It.IsAny <TransactionOptions>()));
            mockCoreSession.Setup(c => c.AbortTransaction(It.IsAny <CancellationToken>())); // abort ignores exceptions
            mockCoreSession.Setup(c => c.CommitTransaction(It.IsAny <CancellationToken>()));
            var subject = CreateSubject(coreSession: mockCoreSession.Object);

            subject.WrappedCoreSession.CurrentTransaction.SetState(transactionState);

            Assert.Throws <Exception>(() => subject.WithTransaction <object>((handle, cancellationToken) => throw new Exception("test")));

            mockCoreSession.Verify(handle => handle.StartTransaction(It.IsAny <TransactionOptions>()), Times.Once);
            mockCoreSession.Verify(handle => handle.AbortTransaction(It.IsAny <CancellationToken>()), shouldAbortTransactionBeCalled ? Times.Once() : Times.Never());
            mockCoreSession.Verify(handle => handle.CommitTransaction(It.IsAny <CancellationToken>()), Times.Never);
        }