mirror of https://github.com/hashicorp/consul
143 lines
3.6 KiB
Go
143 lines
3.6 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package agent
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/consul/sdk/testutil/retry"
|
|
"github.com/hashicorp/consul/testrpc"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestStatusLeader(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("too slow for testing.Short")
|
|
}
|
|
|
|
t.Parallel()
|
|
a := NewTestAgent(t, "")
|
|
defer a.Shutdown()
|
|
testrpc.WaitForLeader(t, a.RPC, "dc1")
|
|
|
|
req, _ := http.NewRequest("GET", "/v1/status/leader", nil)
|
|
obj, err := a.srv.StatusLeader(nil, req)
|
|
if err != nil {
|
|
t.Fatalf("Err: %v", err)
|
|
}
|
|
val := obj.(string)
|
|
if val == "" {
|
|
t.Fatalf("bad addr: %v", obj)
|
|
}
|
|
}
|
|
|
|
func TestStatusLeaderSecondary(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("too slow for testing.Short")
|
|
}
|
|
|
|
t.Parallel()
|
|
a1 := NewTestAgent(t, "datacenter = \"primary\"")
|
|
defer a1.Shutdown()
|
|
a2 := NewTestAgent(t, "datacenter = \"secondary\"")
|
|
defer a2.Shutdown()
|
|
|
|
testrpc.WaitForTestAgent(t, a1.RPC, "primary")
|
|
testrpc.WaitForTestAgent(t, a2.RPC, "secondary")
|
|
|
|
a1SerfAddr := fmt.Sprintf("127.0.0.1:%d", a1.Config.SerfPortWAN)
|
|
a1Addr := fmt.Sprintf("127.0.0.1:%d", a1.Config.ServerPort)
|
|
a2Addr := fmt.Sprintf("127.0.0.1:%d", a2.Config.ServerPort)
|
|
_, err := a2.JoinWAN([]string{a1SerfAddr})
|
|
require.NoError(t, err)
|
|
|
|
retry.Run(t, func(r *retry.R) {
|
|
require.Len(r, a1.WANMembers(), 2)
|
|
require.Len(r, a2.WANMembers(), 2)
|
|
})
|
|
|
|
testrpc.WaitForLeader(t, a1.RPC, "secondary")
|
|
testrpc.WaitForLeader(t, a2.RPC, "primary")
|
|
|
|
req, _ := http.NewRequest("GET", "/v1/status/leader?dc=secondary", nil)
|
|
obj, err := a1.srv.StatusLeader(nil, req)
|
|
require.NoError(t, err)
|
|
leader, ok := obj.(string)
|
|
require.True(t, ok)
|
|
require.Equal(t, a2Addr, leader)
|
|
|
|
req, _ = http.NewRequest("GET", "/v1/status/leader?dc=primary", nil)
|
|
obj, err = a2.srv.StatusLeader(nil, req)
|
|
require.NoError(t, err)
|
|
leader, ok = obj.(string)
|
|
require.True(t, ok)
|
|
require.Equal(t, a1Addr, leader)
|
|
}
|
|
|
|
func TestStatusPeers(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("too slow for testing.Short")
|
|
}
|
|
|
|
t.Parallel()
|
|
a := NewTestAgent(t, "")
|
|
defer a.Shutdown()
|
|
|
|
req, _ := http.NewRequest("GET", "/v1/status/peers", nil)
|
|
obj, err := a.srv.StatusPeers(nil, req)
|
|
if err != nil {
|
|
t.Fatalf("Err: %v", err)
|
|
}
|
|
|
|
peers := obj.([]string)
|
|
if len(peers) != 1 {
|
|
t.Fatalf("bad peers: %v", peers)
|
|
}
|
|
}
|
|
|
|
func TestStatusPeersSecondary(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("too slow for testing.Short")
|
|
}
|
|
|
|
t.Parallel()
|
|
a1 := NewTestAgent(t, "datacenter = \"primary\"")
|
|
defer a1.Shutdown()
|
|
a2 := NewTestAgent(t, "datacenter = \"secondary\"")
|
|
defer a2.Shutdown()
|
|
|
|
testrpc.WaitForTestAgent(t, a1.RPC, "primary")
|
|
testrpc.WaitForTestAgent(t, a2.RPC, "secondary")
|
|
|
|
a1SerfAddr := fmt.Sprintf("127.0.0.1:%d", a1.Config.SerfPortWAN)
|
|
a1Addr := fmt.Sprintf("127.0.0.1:%d", a1.Config.ServerPort)
|
|
a2Addr := fmt.Sprintf("127.0.0.1:%d", a2.Config.ServerPort)
|
|
_, err := a2.JoinWAN([]string{a1SerfAddr})
|
|
require.NoError(t, err)
|
|
|
|
retry.Run(t, func(r *retry.R) {
|
|
require.Len(r, a1.WANMembers(), 2)
|
|
require.Len(r, a2.WANMembers(), 2)
|
|
})
|
|
|
|
testrpc.WaitForLeader(t, a1.RPC, "secondary")
|
|
testrpc.WaitForLeader(t, a2.RPC, "primary")
|
|
|
|
req, _ := http.NewRequest("GET", "/v1/status/peers?dc=secondary", nil)
|
|
obj, err := a1.srv.StatusPeers(nil, req)
|
|
require.NoError(t, err)
|
|
peers, ok := obj.([]string)
|
|
require.True(t, ok)
|
|
require.Equal(t, []string{a2Addr}, peers)
|
|
|
|
req, _ = http.NewRequest("GET", "/v1/status/peers?dc=primary", nil)
|
|
obj, err = a2.srv.StatusPeers(nil, req)
|
|
require.NoError(t, err)
|
|
peers, ok = obj.([]string)
|
|
require.True(t, ok)
|
|
require.Equal(t, []string{a1Addr}, peers)
|
|
}
|