mirror of https://github.com/hashicorp/consul
A couple testing helper updates (#7694)
parent
58a597693b
commit
a1648c61ae
|
@ -13,6 +13,8 @@ import (
|
||||||
"github.com/hashicorp/consul/sdk/testutil"
|
"github.com/hashicorp/consul/sdk/testutil"
|
||||||
"github.com/hashicorp/consul/sdk/testutil/retry"
|
"github.com/hashicorp/consul/sdk/testutil/retry"
|
||||||
"github.com/hashicorp/consul/testrpc"
|
"github.com/hashicorp/consul/testrpc"
|
||||||
|
"github.com/hashicorp/consul/tlsutil"
|
||||||
|
"github.com/hashicorp/go-hclog"
|
||||||
msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc"
|
msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc"
|
||||||
"github.com/hashicorp/serf/serf"
|
"github.com/hashicorp/serf/serf"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
@ -46,6 +48,7 @@ func testClientConfig(t *testing.T) (string, *Config) {
|
||||||
config.SerfLANConfig.MemberlistConfig.ProbeTimeout = 200 * time.Millisecond
|
config.SerfLANConfig.MemberlistConfig.ProbeTimeout = 200 * time.Millisecond
|
||||||
config.SerfLANConfig.MemberlistConfig.ProbeInterval = time.Second
|
config.SerfLANConfig.MemberlistConfig.ProbeInterval = time.Second
|
||||||
config.SerfLANConfig.MemberlistConfig.GossipInterval = 100 * time.Millisecond
|
config.SerfLANConfig.MemberlistConfig.GossipInterval = 100 * time.Millisecond
|
||||||
|
config.LogOutput = testutil.TestWriter(t)
|
||||||
|
|
||||||
return dir, config
|
return dir, config
|
||||||
}
|
}
|
||||||
|
@ -69,7 +72,23 @@ func testClientWithConfig(t *testing.T, cb func(c *Config)) (string, *Client) {
|
||||||
if cb != nil {
|
if cb != nil {
|
||||||
cb(config)
|
cb(config)
|
||||||
}
|
}
|
||||||
client, err := NewClient(config)
|
w := config.LogOutput
|
||||||
|
if w == nil {
|
||||||
|
w = os.Stderr
|
||||||
|
}
|
||||||
|
|
||||||
|
logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{
|
||||||
|
Name: config.NodeName,
|
||||||
|
Level: hclog.Debug,
|
||||||
|
Output: w,
|
||||||
|
})
|
||||||
|
|
||||||
|
tlsConf, err := tlsutil.NewConfigurator(config.ToTLSUtilConfig(), logger)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
client, err := NewClientLogger(config, logger, tlsConf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
config.NotifyShutdown()
|
config.NotifyShutdown()
|
||||||
t.Fatalf("err: %v", err)
|
t.Fatalf("err: %v", err)
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
package consul
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/rpc"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/hashicorp/consul/testrpc"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
type testClusterConfig struct {
|
||||||
|
Datacenter string
|
||||||
|
Servers int
|
||||||
|
Clients int
|
||||||
|
ServerConf func(*Config)
|
||||||
|
ClientConf func(*Config)
|
||||||
|
|
||||||
|
ServerWait func(*testing.T, *Server)
|
||||||
|
ClientWait func(*testing.T, *Client)
|
||||||
|
}
|
||||||
|
|
||||||
|
type testCluster struct {
|
||||||
|
Servers []*Server
|
||||||
|
ServerCodecs []rpc.ClientCodec
|
||||||
|
Clients []*Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTestCluster(t *testing.T, conf *testClusterConfig) *testCluster {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
require.NotNil(t, conf)
|
||||||
|
cluster := testCluster{}
|
||||||
|
|
||||||
|
// create the servers
|
||||||
|
for i := 0; i < conf.Servers; i++ {
|
||||||
|
dir, srv := testServerWithConfig(t, func(c *Config) {
|
||||||
|
if conf.Datacenter != "" {
|
||||||
|
c.Datacenter = conf.Datacenter
|
||||||
|
}
|
||||||
|
c.Bootstrap = false
|
||||||
|
c.BootstrapExpect = conf.Servers
|
||||||
|
|
||||||
|
if conf.ServerConf != nil {
|
||||||
|
conf.ServerConf(c)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Cleanup(func() { os.RemoveAll(dir) })
|
||||||
|
t.Cleanup(func() { srv.Shutdown() })
|
||||||
|
|
||||||
|
cluster.Servers = append(cluster.Servers, srv)
|
||||||
|
|
||||||
|
codec := rpcClient(t, srv)
|
||||||
|
|
||||||
|
cluster.ServerCodecs = append(cluster.ServerCodecs, codec)
|
||||||
|
t.Cleanup(func() { codec.Close() })
|
||||||
|
|
||||||
|
if i > 0 {
|
||||||
|
joinLAN(t, srv, cluster.Servers[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
waitForLeaderEstablishment(t, cluster.Servers...)
|
||||||
|
if conf.ServerWait != nil {
|
||||||
|
for _, srv := range cluster.Servers {
|
||||||
|
conf.ServerWait(t, srv)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the clients
|
||||||
|
for i := 0; i < conf.Clients; i++ {
|
||||||
|
dir, client := testClientWithConfig(t, func(c *Config) {
|
||||||
|
if conf.Datacenter != "" {
|
||||||
|
c.Datacenter = conf.Datacenter
|
||||||
|
}
|
||||||
|
if conf.ClientConf != nil {
|
||||||
|
conf.ClientConf(c)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Cleanup(func() { os.RemoveAll(dir) })
|
||||||
|
t.Cleanup(func() { client.Shutdown() })
|
||||||
|
|
||||||
|
if len(cluster.Servers) > 0 {
|
||||||
|
joinLAN(t, client, cluster.Servers[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
cluster.Clients = append(cluster.Clients, client)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, client := range cluster.Clients {
|
||||||
|
if conf.ClientWait != nil {
|
||||||
|
conf.ClientWait(t, client)
|
||||||
|
} else {
|
||||||
|
testrpc.WaitForTestAgent(t, client.RPC, client.config.Datacenter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return &cluster
|
||||||
|
}
|
|
@ -115,6 +115,8 @@ type clientOrServer interface {
|
||||||
//
|
//
|
||||||
// member.JoinLAN("127.0.0.1:"+leader.config.SerfLANConfig.MemberlistConfig.BindPort)
|
// member.JoinLAN("127.0.0.1:"+leader.config.SerfLANConfig.MemberlistConfig.BindPort)
|
||||||
func joinLAN(t *testing.T, member clientOrServer, leader *Server) {
|
func joinLAN(t *testing.T, member clientOrServer, leader *Server) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
if member == nil || leader == nil {
|
if member == nil || leader == nil {
|
||||||
panic("no server")
|
panic("no server")
|
||||||
}
|
}
|
||||||
|
@ -143,6 +145,8 @@ func joinLAN(t *testing.T, member clientOrServer, leader *Server) {
|
||||||
//
|
//
|
||||||
// member.JoinWAN("127.0.0.1:"+leader.config.SerfWANConfig.MemberlistConfig.BindPort)
|
// member.JoinWAN("127.0.0.1:"+leader.config.SerfWANConfig.MemberlistConfig.BindPort)
|
||||||
func joinWAN(t *testing.T, member, leader *Server) {
|
func joinWAN(t *testing.T, member, leader *Server) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
if member == nil || leader == nil {
|
if member == nil || leader == nil {
|
||||||
panic("no server")
|
panic("no server")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue