nomad: testing RPC forwarding

This commit is contained in:
Armon Dadgar
2015-06-07 12:08:47 -07:00
parent a9824b0905
commit 64bdb1291f
2 changed files with 52 additions and 2 deletions

View File

@@ -171,7 +171,7 @@ func (s *Server) forward(method string, info structs.RPCInfo, args interface{},
// Handle region forwarding
region := info.RequestRegion()
if region != s.config.Region {
err := s.forwardRegion(method, region, args, reply)
err := s.forwardRegion(region, method, args, reply)
return true, err
}
@@ -209,7 +209,7 @@ func (s *Server) forwardLeader(method string, args interface{}, reply interface{
}
// forwardRegion is used to forward an RPC call to a remote region, or fail if no servers
func (s *Server) forwardRegion(method, region string, args interface{}, reply interface{}) error {
func (s *Server) forwardRegion(region, method string, args interface{}, reply interface{}) error {
// Bail if we can't find any servers
s.peerLock.RLock()
servers := s.peers[region]

50
nomad/rpc_test.go Normal file
View File

@@ -0,0 +1,50 @@
package nomad
import (
"testing"
"github.com/hashicorp/nomad/testutil"
)
func TestRPC_forwardLeader(t *testing.T) {
s1 := testServer(t, nil)
defer s1.Shutdown()
s2 := testServer(t, func(c *Config) {
c.DevDisableBootstrap = true
})
defer s2.Shutdown()
testJoin(t, s1, s2)
testutil.WaitForLeader(t, s1.RPC)
var out struct{}
err := s1.forwardLeader("Status.Ping", struct{}{}, &out)
if err != nil {
t.Fatalf("err: %v", err)
}
err = s2.forwardLeader("Status.Ping", struct{}{}, &out)
if err != nil {
t.Fatalf("err: %v", err)
}
}
func TestRPC_forwardRegion(t *testing.T) {
s1 := testServer(t, nil)
defer s1.Shutdown()
s2 := testServer(t, func(c *Config) {
c.Region = "region2"
})
defer s2.Shutdown()
testJoin(t, s1, s2)
var out struct{}
err := s1.forwardRegion("region2", "Status.Ping", struct{}{}, &out)
if err != nil {
t.Fatalf("err: %v", err)
}
err = s2.forwardRegion("region1", "Status.Ping", struct{}{}, &out)
if err != nil {
t.Fatalf("err: %v", err)
}
}