github.imxd.top/hashicorp/consul@v1.4.5/agent/consul/status_endpoint_test.go (about) 1 package consul 2 3 import ( 4 "net" 5 "net/rpc" 6 "os" 7 "testing" 8 "time" 9 10 "github.com/hashicorp/consul/agent/pool" 11 "github.com/hashicorp/consul/testrpc" 12 "github.com/hashicorp/net-rpc-msgpackrpc" 13 ) 14 15 func rpcClient(t *testing.T, s *Server) rpc.ClientCodec { 16 addr := s.config.RPCAdvertise 17 conn, err := net.DialTimeout("tcp", addr.String(), time.Second) 18 if err != nil { 19 t.Fatalf("err: %v", err) 20 } 21 22 // Write the Consul RPC byte to set the mode 23 conn.Write([]byte{byte(pool.RPCConsul)}) 24 return msgpackrpc.NewClientCodec(conn) 25 } 26 27 func TestStatusLeader(t *testing.T) { 28 t.Parallel() 29 dir1, s1 := testServer(t) 30 defer os.RemoveAll(dir1) 31 defer s1.Shutdown() 32 codec := rpcClient(t, s1) 33 defer codec.Close() 34 35 arg := struct{}{} 36 var leader string 37 if err := msgpackrpc.CallWithCodec(codec, "Status.Leader", arg, &leader); err != nil { 38 t.Fatalf("err: %v", err) 39 } 40 if leader != "" { 41 t.Fatalf("unexpected leader: %v", leader) 42 } 43 44 testrpc.WaitForTestAgent(t, s1.RPC, "dc1") 45 46 if err := msgpackrpc.CallWithCodec(codec, "Status.Leader", arg, &leader); err != nil { 47 t.Fatalf("err: %v", err) 48 } 49 if leader == "" { 50 t.Fatalf("no leader") 51 } 52 } 53 54 func TestStatusPeers(t *testing.T) { 55 t.Parallel() 56 dir1, s1 := testServer(t) 57 defer os.RemoveAll(dir1) 58 defer s1.Shutdown() 59 codec := rpcClient(t, s1) 60 defer codec.Close() 61 62 arg := struct{}{} 63 var peers []string 64 if err := msgpackrpc.CallWithCodec(codec, "Status.Peers", arg, &peers); err != nil { 65 t.Fatalf("err: %v", err) 66 } 67 if len(peers) != 1 { 68 t.Fatalf("no peers: %v", peers) 69 } 70 }