package pdrel

import (
	"github.com/pingcap/endless/pkg/util"
	"github.com/pingcap/endless/testcase/oltp/oltppkg"
	"github.com/pingcap/test-infra/sdk/resource"
)

func TestSuite(caseParams *oltppkg.CaseParams) {
	util.TestCase("should recover the QPS in 1 minutes and system keep normal when pd leader down", "oltp_pd_rel_leader_down", func() {
		OLTP_PD_REL_LEADER_DOWN(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should recover the QPS in 1 minutes and system keep normal when inject io delay to pd leader", "oltp_pd_rel_leader_io_delay", func() {
		OLTP_PD_REL_LEADER_IO_DELAY(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should recover the QPS in 1 minutes and system keep normal when inject network-loss to pd leader", "oltp_pd_rel_leader_network_loss", func() {
		OLTP_PD_REL_LEADER_NETWORK_LOSS(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should recover the QPS in 1 minutes and system keep normal when inject network-latency to pd leader", "oltp_pd_rel_leader_network_latency", func() {
		OLTP_PD_REL_LEADER_NETWORK_LATENCY(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should recover the QPS in 1 minutes and system keep normal when inject time chaos to pd leader ", "oltp_pd_rel_leader_time_offset", func() {
		OLTP_PD_REL_LEADER_TIME_OFFSET(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should recover the QPS in 1 minutes and system keep normal when inject failure chaos to pd follower ", "oltp_pd_rel_follower_down", func() {
		OLTP_PD_REL_FOLLOWER_DOWN(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should recover the QPS in 1 minutes and system keep normal when inject networkloss chaos to pd follower ", "oltp_pd_rel_follower_network_latency", func() {
		OLTP_PD_REL_FOLLOWER_NETWORK_LATENCY(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should recover the QPS in 1 minutes and system keep normal when inject network loss chaos to pd follower ", "oltp_pd_rel_follower_network_loss", func() {
		OLTP_PD_REL_FOLLOWER_NETWORK_LOSS(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should recover the QPS in 1 minutes and system keep normal after restart all pod ", "oltp_pd_rel_restart_all_pod", func() {
		OLTP_PD_REL_RESTART_ALL_PODS(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("Everything should works fine while transfer leader manually ", "oltp_pd_rel_transfer_leader", func() {
		OLTP_PD_REL_TRANSFER_LEADER(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.CaseCmdParms, caseParams.WorkloadRunParms)
	})
	util.TestCase("should run succeeded after inject pd leader down during run system table scan", "oltp_full_scan_system_tables_pd_rel", func() {
		OLTP_FULL_SCAN_SYSTEM_TALBES_REL_001(caseParams.Ctx, caseParams.Tc.(resource.TiDBCluster), caseParams.WorkloadRunParms.Cmdpr, caseParams.CaseCmdParms)
	})
}
