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 的所有属性超时一分钟,回调有十分钟,但测试完成正常。

谁能解释我为什么会有这种行为?

谢谢。

4

1 回答 1

0

对时间不是很熟悉,但我认为你可以让活动在测试代码中返回超时错误,比如模拟。您可以检查样品。

于 2021-03-23T03:42:01.273 回答