mirror of
https://github.com/kemko/nomad.git
synced 2026-01-05 01:45:44 +03:00
nomad: testing RPC forwarding
This commit is contained in:
@@ -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
50
nomad/rpc_test.go
Normal 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user