mirror of
https://github.com/kemko/nomad.git
synced 2026-01-01 16:05:42 +03:00
nomad: testing status endpoint
This commit is contained in:
69
nomad/status_endpoint_test.go
Normal file
69
nomad/status_endpoint_test.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package nomad
|
||||
|
||||
import (
|
||||
"net"
|
||||
"net/rpc"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/net-rpc-msgpackrpc"
|
||||
"github.com/hashicorp/nomad/testutil"
|
||||
)
|
||||
|
||||
func rpcClient(t *testing.T, s *Server) rpc.ClientCodec {
|
||||
addr := s.config.RPCAddr
|
||||
conn, err := net.DialTimeout("tcp", addr.String(), time.Second)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
// Write the Consul RPC byte to set the mode
|
||||
conn.Write([]byte{byte(rpcNomad)})
|
||||
return msgpackrpc.NewClientCodec(conn)
|
||||
}
|
||||
|
||||
func TestStatusPing(t *testing.T) {
|
||||
s1 := testServer(t, nil)
|
||||
defer s1.Shutdown()
|
||||
codec := rpcClient(t, s1)
|
||||
|
||||
arg := struct{}{}
|
||||
var out struct{}
|
||||
if err := msgpackrpc.CallWithCodec(codec, "Status.Ping", arg, &out); err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStatusLeader(t *testing.T) {
|
||||
s1 := testServer(t, nil)
|
||||
defer s1.Shutdown()
|
||||
codec := rpcClient(t, s1)
|
||||
|
||||
rpcFn := func(method string, arg, resp interface{}) error {
|
||||
return msgpackrpc.CallWithCodec(codec, method, arg, resp)
|
||||
}
|
||||
testutil.WaitForLeader(t, rpcFn)
|
||||
|
||||
arg := struct{}{}
|
||||
var leader string
|
||||
if err := msgpackrpc.CallWithCodec(codec, "Status.Leader", arg, &leader); err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
if leader == "" {
|
||||
t.Fatalf("unexpected leader: %v", leader)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStatusPeers(t *testing.T) {
|
||||
s1 := testServer(t, nil)
|
||||
defer s1.Shutdown()
|
||||
codec := rpcClient(t, s1)
|
||||
|
||||
arg := struct{}{}
|
||||
var peers []string
|
||||
if err := msgpackrpc.CallWithCodec(codec, "Status.Peers", arg, &peers); err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
if len(peers) != 1 {
|
||||
t.Fatalf("no peers: %v", peers)
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
package testutil
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
type testFn func() (bool, error)
|
||||
type errorFn func(error)
|
||||
@@ -22,3 +25,16 @@ func WaitForResult(test testFn, error errorFn) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type rpcFn func(string, interface{}, interface{}) error
|
||||
|
||||
func WaitForLeader(t *testing.T, rpc rpcFn) {
|
||||
WaitForResult(func() (bool, error) {
|
||||
args := struct{}{}
|
||||
var leader string
|
||||
err := rpc("Status.Leader", args, &leader)
|
||||
return leader != "", err
|
||||
}, func(err error) {
|
||||
t.Fatalf("failed to find leader: %v", err)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user