public async Task Then_separate_process_startes_on_each_message()
        {
            var startMessageA = new GotTiredEvent(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            var resA = await Node.NewDebugWaiter()
                       .Expect <ProcessReceivedMessage <SoftwareProgrammingState> >()
                       .Create()
                       .SendToProcessManagers(startMessageA);

            var stateA = resA.Message <ProcessReceivedMessage <SoftwareProgrammingState> >().State;

            var secondStartMessageB = new SleptWellEvent(Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            var resB = await Node.NewDebugWaiter()
                       .Expect <ProcessReceivedMessage <SoftwareProgrammingState> >()
                       .Create()
                       .SendToProcessManagers(secondStartMessageB);

            var stateB = resB.Message <ProcessReceivedMessage <SoftwareProgrammingState> >().State;

            Assert.Equal(secondStartMessageB.SofaId, stateB.SofaId);
            //Process_has_correct_state()
            Assert.Equal(nameof(SoftwareProgrammingProcess.Coding), stateB.CurrentStateName);
            Assert.NotEqual(stateA.Id, stateB.Id);
        }
        public async Task When_publishing_start_message_A()
        {
            var startMessage = new SleptWellEvent(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
            var state        = await Node.GetTransitedState <SoftwareProgrammingState>(startMessage);

            // process_has_correct_data()
            Assert.Equal(startMessage.SofaId, state.SofaId);
            //process_has_correct_state()
            Assert.Equal(nameof(SoftwareProgrammingProcess.Coding), state.CurrentStateName);
        }
Пример #3
0
        public void Given_save_on_each_message_policy_and_keep_2_snapshots()
        {
            _sagaId = Guid.NewGuid();
            var sagaStartEvent = new GotTiredEvent(_sagaId, Guid.NewGuid(), Guid.NewGuid(), _sagaId);

            var wait = GridNode.NewWaiter()
                       .Expect <SagaCreatedEvent <SoftwareProgrammingSagaData> >()
                       .Create();

            Publisher.Publish(sagaStartEvent);

            wait.Wait();

            var sagaActorRef = LookupInstanceSagaActor <SoftwareProgrammingSaga, SoftwareProgrammingSagaData>(_sagaId);

            sagaActorRef.Tell(new NotifyOnPersistenceEvents(TestActor), TestActor);

            var sagaContinueEventA = new CoffeMakeFailedEvent(_sagaId,
                                                              sagaStartEvent.PersonId,
                                                              BusinessDateTime.UtcNow,
                                                              _sagaId);

            var sagaContinueEventB = new SleptWellEvent(_sagaId,
                                                        sagaStartEvent.LovelySofaId,
                                                        _sagaId);

            var waiter = GridNode.NewWaiter()
                         .Expect <SagaMessageReceivedEvent <SoftwareProgrammingSagaData> >(e => (e.Message as CoffeMakeFailedEvent)?.SourceId == _sagaId)
                         .And <SagaMessageReceivedEvent <SoftwareProgrammingSagaData> >(e => (e.Message as SleptWellEvent)?.SourceId == _sagaId)
                         .Create();

            Publisher.Publish(sagaContinueEventA);
            Publisher.Publish(sagaContinueEventB);

            waiter.Wait();

            Watch(sagaActorRef);
            sagaActorRef.Tell(GracefullShutdownRequest.Instance, TestActor);

            FishForMessage <Terminated>(m => true, TimeSpan.FromDays(1));
            Thread.Sleep(1000);
            _snapshots = new AggregateSnapshotRepository(AkkaConf.Persistence.JournalConnectionString,
                                                         GridNode.AggregateFromSnapshotsFactory)
                         .Load <SagaDataAggregate <SoftwareProgrammingSagaData> >(_sagaId);

            Console.WriteLine(_snapshotsPersistencePolicy.ToPropsString());
        }
        public void Given_save_on_each_message_policy_and_keep_2_snapshots()
        {
            _sagaId = Guid.NewGuid();
            var sagaStartEvent = new GotTiredEvent(_sagaId, Guid.NewGuid(), Guid.NewGuid(), _sagaId);

            var w = GridNode.NewWaiter()
                    .Expect <SagaCreatedEvent <SoftwareProgrammingSaga.States> >()
                    .Create();

            Publisher.Publish(sagaStartEvent);
            w.Wait();

            var sagaActorRef = LookupStateSagaActor <SoftwareProgrammingSaga, SoftwareProgrammingSagaState>(_sagaId);

            Watch(sagaActorRef);
            sagaActorRef.Tell(new NotifyOnPersistenceEvents(TestActor), TestActor);



            var sagaContinueEventA = new CoffeMakeFailedEvent(_sagaId,
                                                              sagaStartEvent.PersonId,
                                                              BusinessDateTime.UtcNow,
                                                              _sagaId);

            var sagaContinueEventB = new SleptWellEvent(_sagaId,
                                                        sagaStartEvent.LovelySofaId,
                                                        _sagaId);

            var waiter = GridNode.NewWaiter()
                         .Expect <SagaTransitionEvent <SoftwareProgrammingSaga.States, SoftwareProgrammingSaga.Triggers> >(e => e.State == SoftwareProgrammingSaga.States.Coding)
                         .And <SagaTransitionEvent <SoftwareProgrammingSaga.States, SoftwareProgrammingSaga.Triggers> >(e => e.State == SoftwareProgrammingSaga.States.Sleeping)
                         .Create();

            Publisher.Publish(sagaContinueEventA);
            Publisher.Publish(sagaContinueEventB);

            waiter.Wait();

            sagaActorRef.Tell(GracefullShutdownRequest.Instance, TestActor);

            FishForMessage <Terminated>(m => true);

            _snapshots = new AggregateSnapshotRepository(AkkaConf.Persistence.JournalConnectionString,
                                                         GridNode.AggregateFromSnapshotsFactory)
                         .Load <SoftwareProgrammingSagaState>(_sagaId);
        }
        public async Task When_publishing_start_message()
        {
            var evt      = new SleptWellEvent(Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
            var metadata = MessageMetadata.New(evt.Id, Guid.NewGuid().ToString(), null);
            var res      = await
                           Node.NewDebugWaiter()
                           .Expect <ProcessManagerCreated <SoftwareProgrammingState> >()
                           .Create()
                           .SendToProcessManagers(evt, metadata);

            var processCreatedEvent = res.Message <ProcessManagerCreated <SoftwareProgrammingState> >();

            var state = await this.LoadProcessByActor <SoftwareProgrammingState>(processCreatedEvent.State.Id);

            //Process_data_is_not_null()
            Assert.NotNull(state);
            //Process_has_correct_id()
            Assert.Equal(processCreatedEvent.SourceId, state.Id);
        }
Пример #6
0
        public void When_publishing_start_message()
        {
            var waiter = GridNode.NewDebugWaiter(Timeout);

            secondStartMessage = new SleptWellEvent(Guid.NewGuid(), Guid.NewGuid(), SagaId);


            waiter.Expect <SagaCreatedEvent <SoftwareProgrammingSagaData> >()
            .Create()
            .Publish(new GotTiredEvent(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), SagaId))
            .Wait();

            LookupInstanceSagaActor <SoftwareProgrammingSaga, SoftwareProgrammingSagaData>(SagaId)
            .Tell(NotifyOnPersistenceEvents.Instance);

            Publisher.Publish(secondStartMessage);
            FishForMessage <Persisted>(m => true);

            SagaData = LoadAggregate <SagaDataAggregate <SoftwareProgrammingSagaData> >(SagaId);
        }
        public ISagaInstance <SoftwareProgrammingSaga, SoftwareProgrammingSagaData> Create(SleptWellEvent message)
        {
            var data = new SagaDataAggregate <SoftwareProgrammingSagaData>(message.SagaId,
                                                                           new SoftwareProgrammingSagaData(
                                                                               nameof(SoftwareProgrammingSaga.Coding)));

            return(Create(data));
        }
Пример #8
0
 public void Handle(SleptWellEvent msg)
 {
     TransitState(msg);
 }
        public ISagaInstance <CustomRoutesSoftwareProgrammingSaga, SoftwareProgrammingSagaData> Create(SleptWellEvent message)
        {
            var saga = new CustomRoutesSoftwareProgrammingSaga();
            var data = new SagaDataAggregate <SoftwareProgrammingSagaData>(message.SofaId,
                                                                           new SoftwareProgrammingSagaData(saga.Sleeping.Name));

            return(SagaInstance.New(saga, data));
        }