@@ -25,48 +25,72 @@ import (
2525
2626 "github.com/pingcap/failpoint"
2727
28- tu "github.com/tikv/pd/pkg/utils/testutil "
28+ "github.com/tikv/pd/pkg/utils/apiutil "
2929 "github.com/tikv/pd/server/apiv2/handlers"
3030 "github.com/tikv/pd/tests"
3131)
3232
33- func TestReady (t * testing.T ) {
33+ func TestReadyAPI (t * testing.T ) {
3434 re := require .New (t )
3535 ctx , cancel := context .WithCancel (context .Background ())
3636 defer cancel ()
37- cluster , err := tests .NewTestCluster (ctx , 1 )
37+ cluster , err := tests .NewTestCluster (ctx , 3 )
3838 re .NoError (err )
3939 defer cluster .Destroy ()
4040 re .NoError (cluster .RunInitialServers ())
4141 re .NotEmpty (cluster .WaitLeader ())
42- server := cluster .GetLeaderServer ()
43- re .NoError (server .BootstrapCluster ())
44- url := server .GetConfig ().ClientUrls + v2Prefix + "/ready"
45- failpoint .Enable ("github.com/tikv/pd/pkg/storage/loadRegionSlow" , `return()` )
46- checkReady (re , url , false )
47- failpoint .Disable ("github.com/tikv/pd/pkg/storage/loadRegionSlow" )
48- checkReady (re , url , true )
42+ leader := cluster .GetLeaderServer ()
43+ re .NoError (leader .BootstrapCluster ())
44+ url := leader .GetConfig ().ClientUrls + v2Prefix + "/ready"
45+ // check ready status when region is not loaded for leader
46+ failpoint .Enable ("github.com/tikv/pd/server/apiv2/handlers/loadRegionSlow" , `return("` + leader .GetAddr ()+ `")` )
47+ checkReadyAPI (re , url , false )
48+ // check ready status when region is loaded for leader
49+ failpoint .Disable ("github.com/tikv/pd/server/apiv2/handlers/loadRegionSlow" )
50+ checkReadyAPI (re , url , true )
51+ // check ready status when region is not loaded for follower
52+ followerServer := cluster .GetServer (cluster .GetFollower ())
53+ url = followerServer .GetConfig ().ClientUrls + v2Prefix + "/ready"
54+ failpoint .Enable ("github.com/tikv/pd/server/apiv2/handlers/loadRegionSlow" , `return("` + followerServer .GetAddr ()+ `")` )
55+ checkReadyAPI (re , url , true )
56+ checkReadyAPI (re , url , false , apiutil .PDAllowFollowerHandleHeader )
57+ // check ready status when region is loaded for follower
58+ failpoint .Disable ("github.com/tikv/pd/server/apiv2/handlers/loadRegionSlow" )
59+ checkReadyAPI (re , url , true )
60+ checkReadyAPI (re , url , true , apiutil .PDAllowFollowerHandleHeader )
4961}
5062
51- func checkReady (re * require.Assertions , url string , isReady bool ) {
63+ func checkReadyAPI (re * require.Assertions , url string , isReady bool , headers ... string ) {
5264 expectCode := http .StatusOK
5365 if ! isReady {
5466 expectCode = http .StatusInternalServerError
5567 }
56- resp , err := tests .TestDialClient .Get (url )
68+ // check ready status
69+ req , err := http .NewRequest (http .MethodGet , url , http .NoBody )
70+ re .NoError (err )
71+ if len (headers ) > 0 {
72+ req .Header .Add (headers [0 ], "true" )
73+ }
74+ resp , err := tests .TestDialClient .Do (req )
5775 re .NoError (err )
5876 defer resp .Body .Close ()
5977 buf , err := io .ReadAll (resp .Body )
6078 re .NoError (err )
6179 re .Empty (buf )
6280 re .Equal (expectCode , resp .StatusCode )
63- r := & handlers.ReadyStatus {}
64- if isReady {
65- r .RegionLoaded = true
81+ // check ready status with verbose
82+ req , err = http .NewRequest (http .MethodGet , url + "?verbose" , http .NoBody )
83+ re .NoError (err )
84+ if len (headers ) > 0 {
85+ req .Header .Add (headers [0 ], "true" )
6686 }
67- data , err := json . Marshal ( r )
87+ resp , err = tests . TestDialClient . Do ( req )
6888 re .NoError (err )
69- err = tu . CheckGetJSON ( tests . TestDialClient , url + "?verbose" , data ,
70- tu . Status ( re , expectCode ) )
89+ defer resp . Body . Close ()
90+ buf , err = io . ReadAll ( resp . Body )
7191 re .NoError (err )
92+ r := & handlers.ReadyStatus {}
93+ re .NoError (json .Unmarshal (buf , & r ))
94+ re .Equal (expectCode , resp .StatusCode )
95+ re .Equal (isReady , r .RegionLoaded )
7296}
0 commit comments