Skip to content

Commit

Permalink
move test
Browse files Browse the repository at this point in the history
Signed-off-by: lhy1024 <admin@liudos.us>
  • Loading branch information
lhy1024 committed Nov 21, 2023
1 parent d2d30bc commit 0dfc784
Show file tree
Hide file tree
Showing 5 changed files with 297 additions and 229 deletions.
9 changes: 7 additions & 2 deletions pkg/mcs/scheduling/server/apis/v1/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -1318,8 +1318,13 @@ func splitRegions(c *gin.Context) {
// @Router /regions/replicated [get]
func checkRegionsReplicated(c *gin.Context) {
handler := c.MustGet(handlerKey).(*handler.Handler)
rawStartKey, _ := c.GetQuery("start_key")
rawEndKey, _ := c.GetQuery("end_key")
rawStartKey, ok1 := c.GetQuery("startKey")
rawEndKey, ok2 := c.GetQuery("endKey")
if !ok1 || !ok2 {
c.String(http.StatusBadRequest, "there is no start_key or end_key")
return
}

state, err := handler.CheckRegionsReplicated(rawStartKey, rawEndKey)
if err != nil {
c.String(http.StatusBadRequest, err.Error())
Expand Down
4 changes: 2 additions & 2 deletions pkg/utils/apiutil/serverapi/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,8 @@ func (h *redirector) matchMicroServiceRedirectRules(r *http.Request) (bool, stri
} else {
r.URL.Path = rule.targetPath
}
log.Debug("redirect to micro service", zap.String("path", r.URL.Path), zap.String("origin-path", origin),
zap.String("target", addr), zap.String("method", r.Method))
log.Info("redirect to micro service", zap.String("path", r.URL.Path), zap.String("origin-path", origin),
zap.String("target", addr), zap.String("method", r.Method), zap.Any("query", r.URL.Query()))
return true, addr
}
}
Expand Down
222 changes: 0 additions & 222 deletions server/api/region_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,11 @@ import (
"time"

"github.com/docker/go-units"
"github.com/pingcap/failpoint"
"github.com/pingcap/kvproto/pkg/metapb"
"github.com/pingcap/kvproto/pkg/pdpb"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"github.com/tikv/pd/pkg/core"
"github.com/tikv/pd/pkg/schedule/placement"
"github.com/tikv/pd/pkg/utils/apiutil"
tu "github.com/tikv/pd/pkg/utils/testutil"
"github.com/tikv/pd/server"
Expand Down Expand Up @@ -337,99 +335,6 @@ func (suite *regionTestSuite) TestTop() {
suite.checkTopRegions(fmt.Sprintf("%s/regions/cpu", suite.urlPrefix), []uint64{3, 2, 1})
}

func (suite *regionTestSuite) TestAccelerateRegionsScheduleInRange() {
re := suite.Require()
r1 := core.NewTestRegionInfo(557, 13, []byte("a1"), []byte("a2"))
r2 := core.NewTestRegionInfo(558, 14, []byte("a2"), []byte("a3"))
r3 := core.NewTestRegionInfo(559, 15, []byte("a3"), []byte("a4"))
mustRegionHeartbeat(re, suite.svr, r1)
mustRegionHeartbeat(re, suite.svr, r2)
mustRegionHeartbeat(re, suite.svr, r3)
body := fmt.Sprintf(`{"start_key":"%s", "end_key": "%s"}`, hex.EncodeToString([]byte("a1")), hex.EncodeToString([]byte("a3")))

err := tu.CheckPostJSON(testDialClient, fmt.Sprintf("%s/regions/accelerate-schedule", suite.urlPrefix), []byte(body), tu.StatusOK(re))
suite.NoError(err)
idList := suite.svr.GetRaftCluster().GetSuspectRegions()
suite.Len(idList, 2)
}

func (suite *regionTestSuite) TestAccelerateRegionsScheduleInRanges() {
re := suite.Require()
r1 := core.NewTestRegionInfo(557, 13, []byte("a1"), []byte("a2"))
r2 := core.NewTestRegionInfo(558, 14, []byte("a2"), []byte("a3"))
r3 := core.NewTestRegionInfo(559, 15, []byte("a3"), []byte("a4"))
r4 := core.NewTestRegionInfo(560, 16, []byte("a4"), []byte("a5"))
r5 := core.NewTestRegionInfo(561, 17, []byte("a5"), []byte("a6"))
mustRegionHeartbeat(re, suite.svr, r1)
mustRegionHeartbeat(re, suite.svr, r2)
mustRegionHeartbeat(re, suite.svr, r3)
mustRegionHeartbeat(re, suite.svr, r4)
mustRegionHeartbeat(re, suite.svr, r5)
body := fmt.Sprintf(`[{"start_key":"%s", "end_key": "%s"}, {"start_key":"%s", "end_key": "%s"}]`, hex.EncodeToString([]byte("a1")), hex.EncodeToString([]byte("a3")), hex.EncodeToString([]byte("a4")), hex.EncodeToString([]byte("a6")))

err := tu.CheckPostJSON(testDialClient, fmt.Sprintf("%s/regions/accelerate-schedule/batch", suite.urlPrefix), []byte(body), tu.StatusOK(re))
suite.NoError(err)
idList := suite.svr.GetRaftCluster().GetSuspectRegions()
suite.Len(idList, 4)
}

func (suite *regionTestSuite) TestScatterRegions() {
re := suite.Require()
r1 := core.NewTestRegionInfo(601, 13, []byte("b1"), []byte("b2"))
r1.GetMeta().Peers = append(r1.GetMeta().Peers, &metapb.Peer{Id: 5, StoreId: 14}, &metapb.Peer{Id: 6, StoreId: 15})
r2 := core.NewTestRegionInfo(602, 13, []byte("b2"), []byte("b3"))
r2.GetMeta().Peers = append(r2.GetMeta().Peers, &metapb.Peer{Id: 7, StoreId: 14}, &metapb.Peer{Id: 8, StoreId: 15})
r3 := core.NewTestRegionInfo(603, 13, []byte("b4"), []byte("b4"))
r3.GetMeta().Peers = append(r3.GetMeta().Peers, &metapb.Peer{Id: 9, StoreId: 14}, &metapb.Peer{Id: 10, StoreId: 15})
mustRegionHeartbeat(re, suite.svr, r1)
mustRegionHeartbeat(re, suite.svr, r2)
mustRegionHeartbeat(re, suite.svr, r3)
mustPutStore(re, suite.svr, 13, metapb.StoreState_Up, metapb.NodeState_Serving, []*metapb.StoreLabel{})
mustPutStore(re, suite.svr, 14, metapb.StoreState_Up, metapb.NodeState_Serving, []*metapb.StoreLabel{})
mustPutStore(re, suite.svr, 15, metapb.StoreState_Up, metapb.NodeState_Serving, []*metapb.StoreLabel{})
mustPutStore(re, suite.svr, 16, metapb.StoreState_Up, metapb.NodeState_Serving, []*metapb.StoreLabel{})
body := fmt.Sprintf(`{"start_key":"%s", "end_key": "%s"}`, hex.EncodeToString([]byte("b1")), hex.EncodeToString([]byte("b3")))

err := tu.CheckPostJSON(testDialClient, fmt.Sprintf("%s/regions/scatter", suite.urlPrefix), []byte(body), tu.StatusOK(re))
suite.NoError(err)
op1 := suite.svr.GetRaftCluster().GetOperatorController().GetOperator(601)
op2 := suite.svr.GetRaftCluster().GetOperatorController().GetOperator(602)
op3 := suite.svr.GetRaftCluster().GetOperatorController().GetOperator(603)
// At least one operator used to scatter region
suite.True(op1 != nil || op2 != nil || op3 != nil)

body = `{"regions_id": [601, 602, 603]}`
err = tu.CheckPostJSON(testDialClient, fmt.Sprintf("%s/regions/scatter", suite.urlPrefix), []byte(body), tu.StatusOK(re))
suite.NoError(err)
}

func (suite *regionTestSuite) TestSplitRegions() {
re := suite.Require()
r1 := core.NewTestRegionInfo(601, 13, []byte("aaa"), []byte("ggg"))
r1.GetMeta().Peers = append(r1.GetMeta().Peers, &metapb.Peer{Id: 5, StoreId: 14}, &metapb.Peer{Id: 6, StoreId: 15})
mustRegionHeartbeat(re, suite.svr, r1)
mustPutStore(re, suite.svr, 13, metapb.StoreState_Up, metapb.NodeState_Serving, []*metapb.StoreLabel{})
newRegionID := uint64(11)
body := fmt.Sprintf(`{"retry_limit":%v, "split_keys": ["%s","%s","%s"]}`, 3,
hex.EncodeToString([]byte("bbb")),
hex.EncodeToString([]byte("ccc")),
hex.EncodeToString([]byte("ddd")))
checkOpt := func(res []byte, code int, _ http.Header) {
s := &struct {
ProcessedPercentage int `json:"processed-percentage"`
NewRegionsID []uint64 `json:"regions-id"`
}{}
err := json.Unmarshal(res, s)
suite.NoError(err)
suite.Equal(100, s.ProcessedPercentage)
suite.Equal([]uint64{newRegionID}, s.NewRegionsID)
}
suite.NoError(failpoint.Enable("github.com/tikv/pd/pkg/schedule/handler/splitResponses", fmt.Sprintf("return(%v)", newRegionID)))
err := tu.CheckPostJSON(testDialClient, fmt.Sprintf("%s/regions/split", suite.urlPrefix), []byte(body), checkOpt)
suite.NoError(failpoint.Disable("github.com/tikv/pd/pkg/schedule/handler/splitResponses"))
suite.NoError(err)
}

func (suite *regionTestSuite) checkTopRegions(url string, regionIDs []uint64) {
regions := &RegionsInfo{}
err := tu.ReadGetJSON(suite.Require(), testDialClient, url, regions)
Expand Down Expand Up @@ -652,133 +557,6 @@ func (suite *getRegionRangeHolesTestSuite) TestRegionRangeHoles() {
}, *rangeHoles)
}

type regionsReplicatedTestSuite struct {
suite.Suite
svr *server.Server
cleanup tu.CleanupFunc
urlPrefix string
}

func TestRegionsReplicatedTestSuite(t *testing.T) {
suite.Run(t, new(regionsReplicatedTestSuite))
}

func (suite *regionsReplicatedTestSuite) SetupSuite() {
re := suite.Require()
suite.svr, suite.cleanup = mustNewServer(re)
server.MustWaitLeader(re, []*server.Server{suite.svr})

addr := suite.svr.GetAddr()
suite.urlPrefix = fmt.Sprintf("%s%s/api/v1", addr, apiPrefix)

mustBootstrapCluster(re, suite.svr)
}

func (suite *regionsReplicatedTestSuite) TearDownSuite() {
suite.cleanup()
}

func (suite *regionsReplicatedTestSuite) TestCheckRegionsReplicated() {
re := suite.Require()
// enable placement rule
suite.NoError(tu.CheckPostJSON(testDialClient, suite.urlPrefix+"/config", []byte(`{"enable-placement-rules":"true"}`), tu.StatusOK(re)))
defer func() {
suite.NoError(tu.CheckPostJSON(testDialClient, suite.urlPrefix+"/config", []byte(`{"enable-placement-rules":"false"}`), tu.StatusOK(re)))
}()

// add test region
r1 := core.NewTestRegionInfo(2, 1, []byte("a"), []byte("b"))
mustRegionHeartbeat(re, suite.svr, r1)

// set the bundle
bundle := []placement.GroupBundle{
{
ID: "5",
Index: 5,
Rules: []*placement.Rule{
{
ID: "foo", Index: 1, Role: placement.Voter, Count: 1,
},
},
},
}

status := ""

// invalid url
url := fmt.Sprintf(`%s/regions/replicated?startKey=%s&endKey=%s`, suite.urlPrefix, "_", "t")
err := tu.CheckGetJSON(testDialClient, url, nil, tu.Status(re, http.StatusBadRequest))
suite.NoError(err)

url = fmt.Sprintf(`%s/regions/replicated?startKey=%s&endKey=%s`, suite.urlPrefix, hex.EncodeToString(r1.GetStartKey()), "_")
err = tu.CheckGetJSON(testDialClient, url, nil, tu.Status(re, http.StatusBadRequest))
suite.NoError(err)

// correct test
url = fmt.Sprintf(`%s/regions/replicated?startKey=%s&endKey=%s`, suite.urlPrefix, hex.EncodeToString(r1.GetStartKey()), hex.EncodeToString(r1.GetEndKey()))
err = tu.CheckGetJSON(testDialClient, url, nil, tu.StatusOK(re))
suite.NoError(err)

// test one rule
data, err := json.Marshal(bundle)
suite.NoError(err)
err = tu.CheckPostJSON(testDialClient, suite.urlPrefix+"/config/placement-rule", data, tu.StatusOK(re))
suite.NoError(err)

err = tu.ReadGetJSON(re, testDialClient, url, &status)
suite.NoError(err)
suite.Equal("REPLICATED", status)

suite.NoError(failpoint.Enable("github.com/tikv/pd/pkg/schedule/handler/mockPending", "return(true)"))
err = tu.ReadGetJSON(re, testDialClient, url, &status)
suite.NoError(err)
suite.Equal("PENDING", status)
suite.NoError(failpoint.Disable("github.com/tikv/pd/pkg/schedule/handler/mockPending"))
// test multiple rules
r1 = core.NewTestRegionInfo(2, 1, []byte("a"), []byte("b"))
r1.GetMeta().Peers = append(r1.GetMeta().Peers, &metapb.Peer{Id: 5, StoreId: 1})
mustRegionHeartbeat(re, suite.svr, r1)

bundle[0].Rules = append(bundle[0].Rules, &placement.Rule{
ID: "bar", Index: 1, Role: placement.Voter, Count: 1,
})
data, err = json.Marshal(bundle)
suite.NoError(err)
err = tu.CheckPostJSON(testDialClient, suite.urlPrefix+"/config/placement-rule", data, tu.StatusOK(re))
suite.NoError(err)

err = tu.ReadGetJSON(re, testDialClient, url, &status)
suite.NoError(err)
suite.Equal("REPLICATED", status)

// test multiple bundles
bundle = append(bundle, placement.GroupBundle{
ID: "6",
Index: 6,
Rules: []*placement.Rule{
{
ID: "foo", Index: 1, Role: placement.Voter, Count: 2,
},
},
})
data, err = json.Marshal(bundle)
suite.NoError(err)
err = tu.CheckPostJSON(testDialClient, suite.urlPrefix+"/config/placement-rule", data, tu.StatusOK(re))
suite.NoError(err)

err = tu.ReadGetJSON(re, testDialClient, url, &status)
suite.NoError(err)
suite.Equal("INPROGRESS", status)

r1 = core.NewTestRegionInfo(2, 1, []byte("a"), []byte("b"))
r1.GetMeta().Peers = append(r1.GetMeta().Peers, &metapb.Peer{Id: 5, StoreId: 1}, &metapb.Peer{Id: 6, StoreId: 1}, &metapb.Peer{Id: 7, StoreId: 1})
mustRegionHeartbeat(re, suite.svr, r1)

err = tu.ReadGetJSON(re, testDialClient, url, &status)
suite.NoError(err)
suite.Equal("REPLICATED", status)
}

func TestRegionsInfoMarshal(t *testing.T) {
re := require.New(t)
regionWithNilPeer := core.NewRegionInfo(&metapb.Region{Id: 1}, &metapb.Peer{Id: 1})
Expand Down
4 changes: 1 addition & 3 deletions tests/server/api/operator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -477,9 +477,7 @@ func (suite *operatorTestSuite) checkTransferRegionWithPlacementRule(cluster *te
suite.NoError(err)
err = tu.CheckDelete(testDialClient, regionURL, tu.StatusOK(re))
} else {
// FIXME: we should check the delete result, which should be failed,
// but the delete operator may be success because the cluster create a new operator to remove ophan peer.
err = tu.CheckDelete(testDialClient, regionURL)
err = tu.CheckDelete(testDialClient, regionURL, tu.StatusNotOK(re))
}
suite.NoError(err)
}
Expand Down
Loading

0 comments on commit 0dfc784

Please sign in to comment.