public void ControlRefusesToCancelTransactionThatIsNotRegistered() { var control = new AggregatingTransactionControl(); var transaction = new DeferredPipelineTransaction(new AggregatingTransactionControl()); Assert.Throws <ArgumentException>(() => control.Cancel(transaction)); }
public void ControlRefusesToCommitTransactionThatIsNotRegistered() { var control = new AggregatingTransactionControl(); var transaction = new DeferredPipelineTransaction(new AggregatingTransactionControl()); Assert.Throws <ArgumentException>(() => control.Commit(transaction, Enumerable.Empty <DeferredTransactionPart>())); }
public void ConcurrentTransactionsWhichCollideCausesTheLastOneToRollback(int[] totalOrder, int[] transaction1, int[] transaction2) { var stages = Enumerable.Repeat(1, totalOrder.Length).Select(_ => PipelineTestHelper.Assignable(1)).ToList(); var tests = stages.Select(stage => stage.AttachTestStage()).ToList(); var control = new AggregatingTransactionControl(); var t1 = control.CreateTransaction(); var t2 = control.CreateTransaction(); foreach (var i in totalOrder) { if (transaction1.Contains(i)) { t1.Update(stages[i], 2); } if (transaction2.Contains(i)) { t2.Update(stages[i], 2); } } AssertExpectedTransactionOutcome(t1, t2, stages, tests, transaction1, PipelineTransactionResult.PendingSuccess, PipelineTransactionResult.Failed); }
public void TransactionDoesNothingBeforeCommit() { var value = PipelineTestHelper.Assignable(1); var test = value.AttachTestStage(); var control = PipelineTestHelper.TransactionControlMock(); control.Setup(mock => mock.Commit(It.IsAny <DeferredPipelineTransaction>(), It.IsAny <IEnumerable <DeferredTransactionPart> >())) .Callback(new Action <DeferredPipelineTransaction, IEnumerable <DeferredTransactionPart> >((a, b) => { var c = new AggregatingTransactionControl(); c.Register(a); c.Commit(a, b); })); var sut = new DeferredPipelineTransaction(control.Object) .Update(value, 2); control.Verify(mock => mock.Commit(It.IsAny <DeferredPipelineTransaction>(), It.IsAny <IEnumerable <DeferredTransactionPart> >()), Times.Never); PipelineAssert.Value(value, 1); test.AssertNotInvalidatedNorRetrieved(); sut.Commit(); control.Verify(mock => mock.Commit(It.IsAny <DeferredPipelineTransaction>(), It.IsAny <IEnumerable <DeferredTransactionPart> >()), Times.Once); PipelineAssert.Value(value, 2); test.AssertInvalidations(1); }