From d43fb0565a4df57d97026b7a207b3aeef59d8daa Mon Sep 17 00:00:00 2001 From: nolouch Date: Tue, 28 Mar 2017 18:53:12 +0800 Subject: [PATCH] server/api: add test --- server/api/region_test.go | 81 +++++++++++++++++++++++++++++++++++++++ server/api/server_test.go | 12 ++++++ 2 files changed, 93 insertions(+) create mode 100644 server/api/region_test.go diff --git a/server/api/region_test.go b/server/api/region_test.go new file mode 100644 index 00000000000..bf21958ee47 --- /dev/null +++ b/server/api/region_test.go @@ -0,0 +1,81 @@ +// Copyright 2017 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package api + +import ( + "fmt" + + . "github.com/pingcap/check" + "github.com/pingcap/kvproto/pkg/metapb" + "github.com/pingcap/kvproto/pkg/pdpb" + "github.com/pingcap/pd/server" +) + +var _ = Suite(&testRegionSuite{}) + +type testRegionSuite struct { + svr *server.Server + cleanup cleanUpFunc + urlPrefix string +} + +func (s *testRegionSuite) SetUpSuite(c *C) { + s.svr, s.cleanup = mustNewServer(c) + mustWaitLeader(c, []*server.Server{s.svr}) + + addr := s.svr.GetAddr() + httpAddr := mustUnixAddrToHTTPAddr(c, addr) + s.urlPrefix = fmt.Sprintf("%s%s/api/v1", httpAddr, apiPrefix) + + mustBootstrapCluster(c, s.svr) + +} + +func (s *testRegionSuite) TearDownSuite(c *C) { + s.cleanup() +} + +func newTestRegionInfo(regionID, storeID uint64, start, end []byte) *server.RegionInfo { + leader := &metapb.Peer{ + Id: regionID, + StoreId: storeID, + } + + return &server.RegionInfo{ + Region: &metapb.Region{ + Id: regionID, + StartKey: start, + EndKey: end, + Peers: []*metapb.Peer{leader}, + }, + Leader: leader, + DownPeers: make([]*pdpb.PeerStats, 0), + PendingPeers: make([]*metapb.Peer, 0), + } +} +func (s *testRegionSuite) TestRegion(c *C) { + r := newTestRegionInfo(2, 1, []byte("a"), []byte("b")) + mustRegionHeartBeat(c, s.svr, r) + url := fmt.Sprintf("%s/region/id/%d", s.urlPrefix, r.GetId()) + r1 := &server.RegionInfo{} + err := readJSONWithURL(url, r1) + c.Assert(err, IsNil) + c.Assert(r1, DeepEquals, r) + + url = fmt.Sprintf("%s/region/key/%s", s.urlPrefix, "a") + r2 := &server.RegionInfo{} + err = readJSONWithURL(url, r2) + c.Assert(err, IsNil) + c.Assert(r2, DeepEquals, r) +} diff --git a/server/api/server_test.go b/server/api/server_test.go index 746fc46e339..1a153e83060 100644 --- a/server/api/server_test.go +++ b/server/api/server_test.go @@ -173,6 +173,18 @@ func mustPutStore(c *C, s *server.Server, store *metapb.Store) { testutil.MustRPCRequest(c, s.GetAddr(), req) } +func mustRegionHeartBeat(c *C, s *server.Server, region *server.RegionInfo) { + req := &pdpb.Request{ + Header: newRequestHeader(s.ClusterID()), + CmdType: pdpb.CommandType_RegionHeartbeat, + RegionHeartbeat: &pdpb.RegionHeartbeatRequest{ + Region: region.Region, + Leader: region.Leader, + }, + } + testutil.MustRPCRequest(c, s.GetAddr(), req) +} + func readJSONWithURL(url string, data interface{}) error { resp, err := unixClient.Get(url) defer resp.Body.Close()