@@ -15,6 +15,7 @@ package server
1515
1616import (
1717 "context"
18+ "strings"
1819 "sync"
1920 "time"
2021
@@ -193,3 +194,68 @@ func mustGetLeader(c *C, client *clientv3.Client, leaderPath string) *pdpb.Membe
193194 c .Fatal ("get leader error" )
194195 return nil
195196}
197+
198+ var _ = Suite (& testFollowerTsoSuite {})
199+
200+ type testFollowerTsoSuite struct {
201+ ctx context.Context
202+ cancel context.CancelFunc
203+ svrs []* Server
204+ }
205+
206+ func (s * testFollowerTsoSuite ) SetUpSuite (c * C ) {
207+ s .svrs = make ([]* Server , 0 , 2 )
208+
209+ cfgs := NewTestMultiConfig (c , 2 )
210+ ch := make (chan * Server , 2 )
211+ for i := 0 ; i < 2 ; i ++ {
212+ cfg := cfgs [i ]
213+ go func () {
214+ svr , err := CreateServer (cfg , nil )
215+ c .Assert (err , IsNil )
216+ c .Assert (svr , NotNil )
217+ err = svr .Run (context .TODO ())
218+ c .Assert (err , IsNil )
219+ ch <- svr
220+ }()
221+ }
222+
223+ for i := 0 ; i < 2 ; i ++ {
224+ svr := <- ch
225+ s .svrs = append (s .svrs , svr )
226+ }
227+ mustWaitLeader (c , s .svrs )
228+ }
229+
230+ func (s * testFollowerTsoSuite ) TearDownSuite (c * C ) {
231+ for _ , svr := range s .svrs {
232+ svr .Close ()
233+ cleanServer (svr .cfg )
234+ }
235+ }
236+
237+ func (s * testFollowerTsoSuite ) TestRequest (c * C ) {
238+ var err error
239+
240+ var followerServer * Server
241+ for _ , s := range s .svrs {
242+ if ! s .IsLeader () {
243+ followerServer = s
244+ }
245+ }
246+ c .Assert (followerServer , NotNil )
247+ grpcPDClient := mustNewGrpcClient (c , followerServer .GetAddr ())
248+ clusterID := followerServer .ClusterID ()
249+
250+ req := & pdpb.TsoRequest {Header : newRequestHeader (clusterID ), Count : 1 }
251+ ctx , cancel := context .WithCancel (context .Background ())
252+ defer cancel ()
253+ tsoClient , err := grpcPDClient .Tso (ctx )
254+ c .Assert (err , IsNil )
255+ defer tsoClient .CloseSend ()
256+ err = tsoClient .Send (req )
257+ c .Assert (err , IsNil )
258+ _ , err = tsoClient .Recv ()
259+ c .Assert (err , NotNil )
260+ c .Assert (strings .Contains (err .Error (), "not leader" ), IsTrue )
261+ }
0 commit comments