github.com/jrxfive/nomad@v0.6.1-0.20170802162750-1fef470e89bf/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 t.Parallel() 27 s1 := testServer(t, nil) 28 defer s1.Shutdown() 29 s2 := testServer(t, func(c *Config) { 30 c.DevDisableBootstrap = true 31 }) 32 defer s2.Shutdown() 33 testJoin(t, s1, s2) 34 testutil.WaitForLeader(t, s1.RPC) 35 testutil.WaitForLeader(t, s2.RPC) 36 37 isLeader, remote := s1.getLeader() 38 if !isLeader && remote == nil { 39 t.Fatalf("missing leader") 40 } 41 42 if remote != nil { 43 var out struct{} 44 err := s1.forwardLeader(remote, "Status.Ping", struct{}{}, &out) 45 if err != nil { 46 t.Fatalf("err: %v", err) 47 } 48 } 49 50 isLeader, remote = s2.getLeader() 51 if !isLeader && remote == nil { 52 t.Fatalf("missing leader") 53 } 54 55 if remote != nil { 56 var out struct{} 57 err := s2.forwardLeader(remote, "Status.Ping", struct{}{}, &out) 58 if err != nil { 59 t.Fatalf("err: %v", err) 60 } 61 } 62 } 63 64 func TestRPC_forwardRegion(t *testing.T) { 65 t.Parallel() 66 s1 := testServer(t, nil) 67 defer s1.Shutdown() 68 s2 := testServer(t, func(c *Config) { 69 c.Region = "region2" 70 }) 71 defer s2.Shutdown() 72 testJoin(t, s1, s2) 73 testutil.WaitForLeader(t, s1.RPC) 74 testutil.WaitForLeader(t, s2.RPC) 75 76 var out struct{} 77 err := s1.forwardRegion("region2", "Status.Ping", struct{}{}, &out) 78 if err != nil { 79 t.Fatalf("err: %v", err) 80 } 81 82 err = s2.forwardRegion("global", "Status.Ping", struct{}{}, &out) 83 if err != nil { 84 t.Fatalf("err: %v", err) 85 } 86 }