0

アクティビティのタイムアウトをテストしようとしていますが、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 にはすべての属性のタイムアウトが 1 分あり、コールバックには 10 分ありますが、テストは正常に終了します。

なぜこのような振る舞いをするのか、誰でも説明できますか?

ありがとう。

4

1 に答える 1