我试图测试活动超时,但我不明白 RegisterDelayedCallback 是如何工作的:
我的工作流程
func ExamWorkflow(ctx workflow.Context, examID string) (string, error) {
logger := workflow.GetLogger(ctx)
logger.Info("Starting workflow for exam ", examID)
// pass exam to AWAITING_EXAM status
ao := workflow.ActivityOptions{
ScheduleToStartTimeout: 1 * time.Minute,
StartToCloseTimeout: 1 * time.Minute,
HeartbeatTimeout: 1 * time.Minute,
ScheduleToCloseTimeout: 1 * time.Minute,
}
ctxAe := workflow.WithActivityOptions(ctx, ao)
var res string
err := workflow.ExecuteActivity(ctxAe, AwaitingExamActivity, examID).Get(ctxAe, &res)
if err != nil {
logger.Error("failed awaiting exam %s : %s", examID, err)
return "", err
}
err = workflow.ExecuteActivity(ctxAe, ExamInProgressActivity, examID).Get(ctxAe, &res)
if err != nil {
logger.Error("failed inprogress exam %s : %s", examID, err)
return "", err
}
logger.Info("Finishing workflow for exam %s", examID)
return "", nil
}
我的活动
func AwaitingExamActivity(ctx context.Context, examID string) (string, error) {
log := activity.GetLogger(ctx)
activityInfo := activity.GetInfo(ctx)
taskToken := activityInfo.TaskToken
ioutil.WriteFile("./token.txt", taskToken, 0644)
log.Info("Estado espera", "Valor token", string(taskToken))
log.Info("Puts exam " + examID + " in AWAITING_EXAM status and takes a number for attention")
return "", activity.ErrResultPending
}
// ExamInProgressActivity - Puts exam in EXAM_IN_PROGRESS status.
func ExamInProgressActivity(ctx context.Context, examID string) error {
log := activity.GetLogger(ctx)
log.Info("Puts exam ", examID, " in EXAM_IN_PROGRESS status and takes a number for attention")
activityInfo := activity.GetInfo(ctx)
taskToken := activityInfo.TaskToken
ioutil.WriteFile("./token_eip.txt", taskToken, 0644)
return activity.ErrResultPending
}
测试
func (s *UnitTestSuite) Test_Workflow() {
env := s.NewTestWorkflowEnvironment()
env.RegisterDelayedCallback(func() {
token, err := ioutil.ReadFile("./token.txt")
if err != nil {
log.Fatal(err)
}
log.Println("en espera")
env.CompleteActivity(token, "", nil)
}, 10*time.Minute)
env.RegisterActivity(AwaitingExamActivity)
env.RegisterDelayedCallback(func() {
token, err := ioutil.ReadFile("./token_eip.txt")
if err != nil {
log.Fatal(err)
}
log.Println("en espera")
env.CompleteActivity(token, "", nil)
}, 10*time.Minute)
env.RegisterActivity(ExamInProgressActivity)
env.ExecuteWorkflow(ExamWorkflow, "45")
s.True(env.IsWorkflowCompleted())
err := env.GetWorkflowResult(nil)
s.NoError(err)
}
ActivityOptions 的所有属性超时一分钟,回调有十分钟,但测试完成正常。
谁能解释我为什么会有这种行为?
谢谢。