github.com/ryanslade/nomad@v0.2.4-0.20160128061903-fc95782f2089/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 var out struct{} 37 err := s1.forwardLeader("Status.Ping", struct{}{}, &out) 38 if err != nil { 39 t.Fatalf("err: %v", err) 40 } 41 42 err = s2.forwardLeader("Status.Ping", struct{}{}, &out) 43 if err != nil { 44 t.Fatalf("err: %v", err) 45 } 46 } 47 48 func TestRPC_forwardRegion(t *testing.T) { 49 s1 := testServer(t, nil) 50 defer s1.Shutdown() 51 s2 := testServer(t, func(c *Config) { 52 c.Region = "region2" 53 }) 54 defer s2.Shutdown() 55 testJoin(t, s1, s2) 56 testutil.WaitForLeader(t, s1.RPC) 57 testutil.WaitForLeader(t, s2.RPC) 58 59 var out struct{} 60 err := s1.forwardRegion("region2", "Status.Ping", struct{}{}, &out) 61 if err != nil { 62 t.Fatalf("err: %v", err) 63 } 64 65 err = s2.forwardRegion("global", "Status.Ping", struct{}{}, &out) 66 if err != nil { 67 t.Fatalf("err: %v", err) 68 } 69 }