From 61b0908e3a2d54274d724364bfafee28969f0f60 Mon Sep 17 00:00:00 2001 From: Ryan Uber Date: Tue, 30 Sep 2014 14:19:25 -0700 Subject: [PATCH] consul: test rpc errors returned from remote datacenters --- consul/serf.go | 6 +++++- consul/serf_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/consul/serf.go b/consul/serf.go index bfdf5668e8..02d0683741 100644 --- a/consul/serf.go +++ b/consul/serf.go @@ -325,6 +325,11 @@ func (s *Server) keyringRPC( args *structs.KeyringRequest, replies *structs.KeyringResponses) error { + rlen := len(s.remoteConsuls) - 1 + if rlen == 0 { + return nil + } + errorCh := make(chan error) respCh := make(chan *structs.KeyringResponses) @@ -335,7 +340,6 @@ func (s *Server) keyringRPC( go s.forwardKeyringRPC(method, dc, args, errorCh, respCh) } - rlen := len(s.remoteConsuls) - 1 done := 0 for { select { diff --git a/consul/serf_test.go b/consul/serf_test.go index 07225a7293..b30b4fe821 100644 --- a/consul/serf_test.go +++ b/consul/serf_test.go @@ -1,6 +1,8 @@ package consul import ( + "fmt" + "os" "testing" ) @@ -19,3 +21,25 @@ func TestUserEventNames(t *testing.T) { t.Fatalf("bad: %v", raw) } } + +func TestKeyringRPCError(t *testing.T) { + dir1, s1 := testServerDC(t, "dc1") + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + dir2, s2 := testServerDC(t, "dc2") + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + // Try to join + addr := fmt.Sprintf("127.0.0.1:%d", + s1.config.SerfWANConfig.MemberlistConfig.BindPort) + if _, err := s2.JoinWAN([]string{addr}); err != nil { + t.Fatalf("err: %v", err) + } + + // RPC error from remote datacenter is returned + if err := s1.keyringRPC("Bad.Method", nil, nil); err == nil { + t.Fatalf("bad") + } +}