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  }