package testcases

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

func init() {
	var (
		taskName       = "test-infra"
		sourceName0    = "source-0"
		sourceNameList = []string{sourceName0}
		name           = "dm_transfer_source_after_start_relay"
		env            = newCommonEnv()
	)
	var _ = AddTestCase(spec.CaseName(name), func() steps.Step {
		env.init().b.
			DropDatabasesIfExists(env.UpStreams[0], &name).
			DropDatabasesIfExists(env.DownStream, &name).
			CreateDatabase(env.UpStreams[0], name).
			DmCreateSources(env.Dm, env.DmHost, Path.SourcePaths).
			DmRunWorkload(env.UpStreams[0], env.Dm, env.Workload, Spec.GetWorkloadOption(workload.CommandTypePrepare)).
			DmStartTask(env.Dm, env.DmHost, Path.TaskPaths[0]).
			DmWaitTaskSynced(env.DmHost, taskName, sourceNameList).
			DmCheckSyncDiff(env.Dm, env.SyncDiff, env.DmHost, Path.DiffPaths[0]).
			DmStartRelay(env.Dm, env.DmHost, &sourceName0).
			DmPauseTask(env.Dm, env.DmHost, Path.TaskPaths[0]).
			DmTransferSource(env.DmHost, sourceName0).
			DmResumeTask(env.Dm, env.DmHost, Path.TaskPaths[0]).
			DmRunWorkload(env.UpStreams[0], env.Dm, env.Workload, Spec.GetWorkloadOption(workload.CommandTypeRun)).
			DmWaitTaskSynced(env.DmHost, taskName, sourceNameList).
			DmCheckSyncDiff(env.Dm, env.SyncDiff, env.DmHost, Path.DiffPaths[0]).
			DmDeleteAllWorkerRelayDir(env.DmHost)
		return env.b.Build()
	})
}
