package testcases

import (
	"time"

	"github.com/pingcap/test-infra/caselib/pkg/model/workload"
	"github.com/pingcap/test-infra/caselib/pkg/steps"
	"github.com/pingcap/test-infra/caselib/pkg/utils"
	"github.com/pingcap/test-infra/common/model/resource"
	_ "github.com/pingcap/test-infra/sdk/resource/impl/k8s"
)

var _ = AddTestCase("binlog_basic", func() steps.Step {
	var (
		UpStream   = &resource.ResourceHandle{}
		DownStream = &resource.ResourceHandle{}
		WorkLoad   = &resource.ResourceHandle{}
		DBName     = "binlog_basic"
	)

	return steps.
		NewBuilder().
		LoadEnv().
		LoadResourceFromEnv(utils.ResourcePrefix+"upstream", UpStream).
		LoadResourceFromEnv(utils.ResourcePrefix+"downstream", DownStream).
		LoadResourceFromEnv(utils.ResourcePrefix+"workload", WorkLoad).
		CreateDatabase(UpStream, DBName).
		RunBinlogWorkload(UpStream, WorkLoad, Spec.GetWorkloadOption(workload.CommandTypePrepare)).
		RunBinlogWorkload(UpStream, WorkLoad, Spec.GetWorkloadOption(workload.CommandTypeRun)).
		SendBinlogFinishMark(UpStream, DBName).
		WaitBinlogFinishMark(DownStream, DBName, 10*time.Minute).
		CheckBinlogConsistency(UpStream, DownStream, DBName).
		Build()
})
