package reliability

import (
	"time"

	. "github.com/onsi/ginkgo"
	. "github.com/pingcap/endless/pkg/matcher"
	. "github.com/pingcap/endless/pkg/workload"
	. "github.com/pingcap/endless/testcase/geopartition/utils"
)

func TestPDLeader(ctx *SuiteContext) {
	It("PD leader switch", func() {
		defer func() {
			MustExec(ctx.DB, "DROP TABLE IF EXISTS t1")
			MustExec(ctx.DB, "DROP PLACEMENT POLICY IF EXISTS p1")
			MustExec(ctx.DB, "DROP PLACEMENT POLICY IF EXISTS p2")
		}()
		MustExec(ctx.DB, "DROP TABLE IF EXISTS t1")
		MustExec(ctx.DB, "DROP PLACEMENT POLICY IF EXISTS p1")
		MustExec(ctx.DB, "DROP PLACEMENT POLICY IF EXISTS p2")
		MustExec(ctx.DB, "CREATE PLACEMENT POLICY p1 FOLLOWERS=2")
		MustExec(ctx.DB, "CREATE PLACEMENT POLICY p2 FOLLOWERS=1")
		MustExec(ctx.DB, "CREATE TABLE t1 (id int primary key, v int) PLACEMENT POLICY p1")

		Try(WaitScheduled(ctx.DB, "t1", time.Minute))

		// alter policy trigger scheduling
		MustExec(ctx.DB, "ALTER TABLE t1 PLACEMENT POLICY p2")

		// transter PD leader
		Try(SwitchPDLeader(ctx.TC))

		Try(WaitScheduled(ctx.DB, "t1", time.Minute))
	})
}

func Test(ctx *SuiteContext) {
	TestPDLeader(ctx)
}
