Beispiel #1
0
        public SlowConcurrentSaga_Specs()
        {
            _sagaRepository = new Lazy <ISagaRepository <SlowConcurrentSaga> >(() =>
                                                                               AzureTableSagaRepository <SlowConcurrentSaga> .Create(() => TestCloudTable));

            _sagaTestHarness = BusTestHarness.StateMachineSaga(new SlowConcurrentSagaStateMachine(), _sagaRepository.Value);
        }
Beispiel #2
0
        public async Task Setup()
        {
            correlationId = Guid.NewGuid();
            stateMachine  = new GameStateMachine(new Mock <ILogger <GameStateMachine> >().Object,
                                                 Options.Create(new RabbitMQConfiguration
            {
                Endpoint = "rabbitmq://localhost"
            }));

            harness         = new InMemoryTestHarness();
            sagaTestHarness = harness.StateMachineSaga <GameSaga, GameStateMachine>(stateMachine);
            await harness.Start();
        }
        public SlowConcurrentSaga_Specs()
        {
            // rowlock statements that don't work to cause a deadlock.
            var notWorkingRowLockStatements = new SqlLockStatementProvider("dbo", "SELECT * FROM \"{1}\" WHERE \"CorrelationId\" = @p0");

            // add new migration by calling
            // dotnet ef migrations add --context "SagaDbContext``2" Init  -v
            _sagaRepository = new Lazy <ISagaRepository <SlowConcurrentSaga> >(() =>
                                                                               EntityFrameworkSagaRepository <SlowConcurrentSaga> .CreatePessimistic(
                                                                                   () => new SlowConcurrentSagaContextFactory().CreateDbContext(DbContextOptionsBuilder),
                                                                                   notWorkingRowLockStatements));

            _sagaTestHarness = BusTestHarness.StateMachineSaga(new SlowConcurrentSagaStateMachine(), _sagaRepository.Value);
        }
Beispiel #4
0
        public async Task A_saga_is_being_tested()
        {
            _sagaId     = Guid.NewGuid();
            _testValueA = "TestValueA";

            _harness = new InMemoryTestHarness();
            _saga    = _harness.Saga <TestSaga>();

            await _harness.Start();

            await _harness.InputQueueSendEndpoint.Send(new A
            {
                CorrelationId = _sagaId,
                Value         = _testValueA
            });
        }
Beispiel #5
0
        public async Task WhenGoodbyeReceivedFromAnotherUser_ShouldRemainUnchanged()
        {
            await SayManyHellos("aSender", 3);

            await InputQueueSendEndpoint.Send <ISayGoodbye>(new { Sender = "anotherSender" });

            var stateIds =
                await SagaTestHarness.Exists(state => state.Sender == "aSender", machine => machine.Greeted);

            var instance = SagaTestHarness.Sagas.Contains(stateIds.FirstOrDefault());

            Assert.That(instance, Is.Not.Null);
            Assert.That(instance.CorrelationId, Is.Not.EqualTo(Guid.Empty));
            Assert.That(instance.CurrentState, Is.EqualTo(nameof(GreetingsStateMachine.Greeted)));
            Assert.That(instance.Sender, Is.EqualTo("aSender"));
            Assert.That(instance.Occurrences, Is.EqualTo(3));
        }
Beispiel #6
0
        public async Task WhenGoodbyeReceivedFromSameUser_ShouldFinalize()
        {
            await SayManyHellos("aSender", 3);

            await InputQueueSendEndpoint.Send <ISayGoodbye>(new { Sender = "aSender" });

            Assert.That(await TestHarness.Consumed.Any <ISayGoodbye>(), Is.True);

            var stateIds =
                await SagaTestHarness.Exists(state => state.Sender == "aSender", machine => machine.Final);

            var instance = SagaTestHarness.Sagas.Contains(stateIds.FirstOrDefault());

            Assert.That(instance, Is.Not.Null);
            Assert.That(instance.CorrelationId, Is.Not.EqualTo(Guid.Empty));
            Assert.That(instance.Sender, Is.EqualTo("aSender"));
        }
Beispiel #7
0
        public async Task WhenHelloReceived_ShouldCreateState()
        {
            await InputQueueSendEndpoint.Send <ISayHello>(new { Sender = "aSender" });

            Assert.That(await TestHarness.Consumed.Any <ISayHello>(), Is.True);
            Assert.That(SagaTestHarness.Created.Count(), Is.EqualTo(1));

            var stateIds =
                await SagaTestHarness.Exists(state => state.Sender == "aSender", machine => machine.Greeted);

            var instance = SagaTestHarness.Sagas.Contains(stateIds.FirstOrDefault());

            Assert.That(instance, Is.Not.Null);
            Assert.That(instance.CorrelationId, Is.Not.EqualTo(Guid.Empty));
            Assert.That(instance.Sender, Is.EqualTo("aSender"));
            Assert.That(instance.Occurrences, Is.EqualTo(1));
            Assert.IsTrue(instance.Created == instance.Updated);
        }