public async Task When_a_two_messages_starting_a_saga_arrive_simultanously_one_of_them_fails() { var context1 = CreateMessageContext(); var context2 = CreateMessageContext(); var transaction1 = await outboxPersister.BeginTransaction(context1); var session1 = new OutboxEventStoreSynchronizedStorageSession(connection, (EventStoreOutboxTransaction)transaction1); var sagaData = CreateNewSagaData(); await persister.Save(sagaData, new SagaCorrelationProperty(CorrelationPropName, sagaData.StringProperty), session1, context1); var transaction2 = await outboxPersister.BeginTransaction(context2); var session2 = new OutboxEventStoreSynchronizedStorageSession(connection, (EventStoreOutboxTransaction)transaction2); try { await persister.Save(sagaData, new SagaCorrelationProperty(CorrelationPropName, sagaData.StringProperty), session2, context2); Assert.Fail("Expected exception"); } catch (Exception ex) { StringAssert.StartsWith("Append failed due to WrongExpectedVersion.", ex.Message); } }
async Task SimulateProcessingMessage(SagaData sagaData, Action <SagaData> action, bool commitOutboxTransaction, ContextBag context) { var outboxTransaction = await outboxPersister.BeginTransaction(context); var session = new OutboxEventStoreSynchronizedStorageSession(connection, (EventStoreOutboxTransaction)outboxTransaction); sagaData = await persister.Get <SagaData>(CorrelationPropName, sagaData.StringProperty, session, context); action(sagaData); await persister.Update(sagaData, session, context); if (commitOutboxTransaction) { await outboxTransaction.Commit(); } }
public async Task When_a_two_messages_starting_a_saga_arrive_sequentially_both_succeed() { var context1 = CreateMessageContext(); var context2 = CreateMessageContext(); var sagaData = CreateNewSagaData(); var transaction1 = await outboxPersister.BeginTransaction(context1); var session1 = new OutboxEventStoreSynchronizedStorageSession(connection, (EventStoreOutboxTransaction)transaction1); await persister.Save(sagaData, new SagaCorrelationProperty(CorrelationPropName, sagaData.StringProperty), session1, context1); await transaction1.Commit(); var transaction2 = await outboxPersister.BeginTransaction(context2); var session2 = new OutboxEventStoreSynchronizedStorageSession(connection, (EventStoreOutboxTransaction)transaction2); var loadedData = await persister.Get <SagaData>(CorrelationPropName, sagaData.StringProperty, session2, context2); await persister.Update(loadedData, session2, context2); await transaction2.Commit(); }