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); }
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); }
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)); }
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)); }