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 }