github.com/kardianos/nomad@v0.1.3-0.20151022182107-b13df73ee850/nomad/status_endpoint_test.go (about)

     1  package nomad
     2  
     3  import (
     4  	"net"
     5  	"net/rpc"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/hashicorp/net-rpc-msgpackrpc"
    10  	"github.com/hashicorp/nomad/nomad/structs"
    11  	"github.com/hashicorp/nomad/testutil"
    12  )
    13  
    14  func rpcClient(t *testing.T, s *Server) rpc.ClientCodec {
    15  	addr := s.config.RPCAddr
    16  	conn, err := net.DialTimeout("tcp", addr.String(), time.Second)
    17  	if err != nil {
    18  		t.Fatalf("err: %v", err)
    19  	}
    20  	// Write the Consul RPC byte to set the mode
    21  	conn.Write([]byte{byte(rpcNomad)})
    22  	return msgpackrpc.NewClientCodec(conn)
    23  }
    24  
    25  func TestStatusVersion(t *testing.T) {
    26  	s1 := testServer(t, nil)
    27  	defer s1.Shutdown()
    28  	codec := rpcClient(t, s1)
    29  
    30  	arg := &structs.GenericRequest{
    31  		QueryOptions: structs.QueryOptions{
    32  			Region:     "global",
    33  			AllowStale: true,
    34  		},
    35  	}
    36  	var out structs.VersionResponse
    37  	if err := msgpackrpc.CallWithCodec(codec, "Status.Version", arg, &out); err != nil {
    38  		t.Fatalf("err: %v", err)
    39  	}
    40  
    41  	if out.Build == "" {
    42  		t.Fatalf("bad: %#v", out)
    43  	}
    44  	if out.Versions[structs.ProtocolVersion] != ProtocolVersionMax {
    45  		t.Fatalf("bad: %#v", out)
    46  	}
    47  	if out.Versions[structs.APIMajorVersion] != apiMajorVersion {
    48  		t.Fatalf("bad: %#v", out)
    49  	}
    50  	if out.Versions[structs.APIMinorVersion] != apiMinorVersion {
    51  		t.Fatalf("bad: %#v", out)
    52  	}
    53  }
    54  
    55  func TestStatusPing(t *testing.T) {
    56  	s1 := testServer(t, nil)
    57  	defer s1.Shutdown()
    58  	codec := rpcClient(t, s1)
    59  
    60  	arg := struct{}{}
    61  	var out struct{}
    62  	if err := msgpackrpc.CallWithCodec(codec, "Status.Ping", arg, &out); err != nil {
    63  		t.Fatalf("err: %v", err)
    64  	}
    65  }
    66  
    67  func TestStatusLeader(t *testing.T) {
    68  	s1 := testServer(t, nil)
    69  	defer s1.Shutdown()
    70  	codec := rpcClient(t, s1)
    71  	testutil.WaitForLeader(t, s1.RPC)
    72  
    73  	arg := &structs.GenericRequest{
    74  		QueryOptions: structs.QueryOptions{
    75  			Region:     "global",
    76  			AllowStale: true,
    77  		},
    78  	}
    79  	var leader string
    80  	if err := msgpackrpc.CallWithCodec(codec, "Status.Leader", arg, &leader); err != nil {
    81  		t.Fatalf("err: %v", err)
    82  	}
    83  	if leader == "" {
    84  		t.Fatalf("unexpected leader: %v", leader)
    85  	}
    86  }
    87  
    88  func TestStatusPeers(t *testing.T) {
    89  	s1 := testServer(t, nil)
    90  	defer s1.Shutdown()
    91  	codec := rpcClient(t, s1)
    92  
    93  	arg := &structs.GenericRequest{
    94  		QueryOptions: structs.QueryOptions{
    95  			Region:     "global",
    96  			AllowStale: true,
    97  		},
    98  	}
    99  	var peers []string
   100  	if err := msgpackrpc.CallWithCodec(codec, "Status.Peers", arg, &peers); err != nil {
   101  		t.Fatalf("err: %v", err)
   102  	}
   103  	if len(peers) != 1 {
   104  		t.Fatalf("no peers: %v", peers)
   105  	}
   106  }