public void RunsTakeSagaWaitingForAction() { //Arrange var runner = new Saga(); var enumerator = runner.Run(this.RootSaga()); //Act SagaAction returnData = null; runner.OnActionEvent += (data) => { returnData = data; }; for (var i = 0; i < 100; i++) { enumerator.MoveNext(); } //Assert Assert.IsNull(returnData); runner.OnAction(new SagaAction <int>("start", 11)); for (var i = 0; i < 100; i++) { enumerator.MoveNext(); } //Assert Assert.AreEqual("test", returnData.Type); Assert.AreEqual(11, returnData.GetPayload <int>()); }
private void OnAction(SagaAction action) { if (this.actionRef != null) { this.actionRef.Value = action; } resolved = true; }
public void WriteToDB(string path, EntityType type) { using (var ctx = new StatisticContext()) { var saga = new SagaAction() { SagaName = path, AddedDate = DateTime.Now, Type = type }; ctx.Sagas.Add(saga); ctx.SaveChanges(); } }
public void RunTryEffectWithNoFiredExceptionWithFinally() { //Arrange var runner = new Saga(); //Act SagaAction returnData = null; runner.OnActionEvent += (data) => { returnData = data; }; this.RunSaga(runner, this.SimpleSagaWithFinally(false)); //Assert Assert.AreEqual("finally", returnData.Type); }
public void RunThreadCallEffectFollowedByPutWithTheReturnValue() { //Arrange var runner = new Saga(); //Act SagaAction returnData = null; runner.OnActionEvent += (data) => { returnData = data; }; this.RunSaga(runner, this.SimpleSaga()); //Assert Assert.AreEqual(1, returnData.GetPayload <int>()); }
private async Task UpdateState( SagaState sagaState, State initialState, State newState, SagaAction sagaActions) { sagaState.ExtendedData = JsonConvert.SerializeObject(newState.Value); await stateDAO.Update(sagaState); var sagaLog = new SagaStateLog { InitialState = JsonConvert.SerializeObject(initialState.Value), FinshedState = JsonConvert.SerializeObject(newState.Value), SagaId = sagaState.SagaInfoId, ActionId = sagaActions.Id }; await actionLogStateDAO.Save(sagaLog); }
public void RunTryEffectWithFiredException() { //Arrange var runner = new Saga(); //Act SagaAction returnData = null; runner.OnActionEvent += (data) => { returnData = data; }; this.RunSaga(runner, this.SimpleSaga(true)); //Assert Assert.AreEqual("error", returnData.Type); Assert.IsNotNull(returnData.GetPayload <NotImplementedException>()); }
internal async Task UpdateToFail(SagaAction sagaAction) { using var context = _serviceProvider.GetRequiredService <SagaContext>(); var actions = await context.Actions.Where(x => x.IdSaga.Equals(sagaAction.IdSaga)).ToListAsync(); actions.ForEach(x => { if (x.Position == sagaAction.Position) { x.Status = StatusOperation.Fail; } else if (x.Position < sagaAction.Position) { x.Status = StatusOperation.WaitCancel; } else { x.Status = StatusOperation.NotExecuted; } }); context.Actions.UpdateRange(actions); await context.SaveChangesAsync(); }
public PutEffect(SagaAction data) { this.data = data; }
public static PutEffect Put(SagaAction data) { return(new PutEffect(data)); }
public void OnAction(SagaAction data) { this.OnActionEvent?.Invoke(data); }
internal async Task Update(SagaAction action) { using var context = _serviceProvider.GetRequiredService <SagaContext>(); context.Actions.Update(action); await context.SaveChangesAsync(); }
private void Saga_OnActionEvent(SagaAction data) { Debug.Log(data.Type + ": " + data.GetPayload <int>()); }