github.com/hooklift/nomad@v0.5.7-0.20170407200202-db11e7dd7b55/nomad/rpc_test.go (about) 1 package nomad 2 3 import ( 4 "net" 5 "net/rpc" 6 "testing" 7 "time" 8 9 "github.com/hashicorp/nomad/testutil" 10 ) 11 12 // rpcClient is a test helper method to return a ClientCodec to use to make rpc 13 // calls to the passed server. 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 NewClientCodec(conn) 23 } 24 25 func TestRPC_forwardLeader(t *testing.T) { 26 s1 := testServer(t, nil) 27 defer s1.Shutdown() 28 s2 := testServer(t, func(c *Config) { 29 c.DevDisableBootstrap = true 30 }) 31 defer s2.Shutdown() 32 testJoin(t, s1, s2) 33 testutil.WaitForLeader(t, s1.RPC) 34 testutil.WaitForLeader(t, s2.RPC) 35 36 isLeader, remote := s1.getLeader() 37 if !isLeader && remote == nil { 38 t.Fatalf("missing leader") 39 } 40 41 if remote != nil { 42 var out struct{} 43 err := s1.forwardLeader(remote, "Status.Ping", struct{}{}, &out) 44 if err != nil { 45 t.Fatalf("err: %v", err) 46 } 47 } 48 49 isLeader, remote = s2.getLeader() 50 if !isLeader && remote == nil { 51 t.Fatalf("missing leader") 52 } 53 54 if remote != nil { 55 var out struct{} 56 err := s2.forwardLeader(remote, "Status.Ping", struct{}{}, &out) 57 if err != nil { 58 t.Fatalf("err: %v", err) 59 } 60 } 61 } 62 63 func TestRPC_forwardRegion(t *testing.T) { 64 s1 := testServer(t, nil) 65 defer s1.Shutdown() 66 s2 := testServer(t, func(c *Config) { 67 c.Region = "region2" 68 }) 69 defer s2.Shutdown() 70 testJoin(t, s1, s2) 71 testutil.WaitForLeader(t, s1.RPC) 72 testutil.WaitForLeader(t, s2.RPC) 73 74 var out struct{} 75 err := s1.forwardRegion("region2", "Status.Ping", struct{}{}, &out) 76 if err != nil { 77 t.Fatalf("err: %v", err) 78 } 79 80 err = s2.forwardRegion("global", "Status.Ping", struct{}{}, &out) 81 if err != nil { 82 t.Fatalf("err: %v", err) 83 } 84 }