public async Task CannotInsertSameSagaDataTwice() { var correlationProperties = new ISagaCorrelationProperty[] { new TestCorrelationProperty(nameof(JustSomeSagaData.CorrelationProperty1), typeof(JustSomeSagaData)), new TestCorrelationProperty(nameof(JustSomeSagaData.CorrelationProperty2), typeof(JustSomeSagaData)), }; var sagaDataId = Guid.NewGuid(); var sagaData = new JustSomeSagaData { Id = sagaDataId }; await _storage.Insert(sagaData, correlationProperties); var aggregateException = Assert.Throws <AggregateException>(() => { _storage.Insert(sagaData, correlationProperties).Wait(); }); var baseException = aggregateException.GetBaseException(); Console.WriteLine(baseException); Assert.That(baseException, Is.TypeOf <ConcurrencyException>()); }
public async Task CannotUpdateSagaDataInParallel() { var correlationProperties = new ISagaCorrelationProperty[] { new TestCorrelationProperty(nameof(JustSomeSagaData.CorrelationProperty1), typeof(JustSomeSagaData)), new TestCorrelationProperty(nameof(JustSomeSagaData.CorrelationProperty2), typeof(JustSomeSagaData)), }; var sagaData = new JustSomeSagaData { Id = Guid.NewGuid(), CorrelationProperty1 = "c1", CorrelationProperty2 = "c2" }; await _storage.Insert(sagaData, correlationProperties); var data1 = (JustSomeSagaData)await _storage.Find(typeof(JustSomeSagaData), nameof(JustSomeSagaData.CorrelationProperty1), "c1"); var data2 = (JustSomeSagaData)await _storage.Find(typeof(JustSomeSagaData), nameof(JustSomeSagaData.CorrelationProperty2), "c2"); data1.Counter++; data2.Counter++; await _storage.Update(data1, correlationProperties); var aggregateException = Assert.Throws <AggregateException>(() => { _storage.Update(data2, correlationProperties).Wait(); }); var baseException = aggregateException.GetBaseException(); Console.WriteLine(baseException); Assert.That(baseException, Is.TypeOf <ConcurrencyException>()); }