mirror of https://github.com/hashicorp/consul
Merge pull request #10253 from hashicorp/dnephin/fix-test-flake
redirecttraffic: fix a flaky testpull/10210/head
commit
dc73939861
|
@ -1,18 +1,18 @@
|
|||
package redirecttraffic
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"testing"
|
||||
|
||||
"github.com/mitchellh/cli"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/hashicorp/consul/api"
|
||||
"github.com/hashicorp/consul/sdk/iptables"
|
||||
"github.com/hashicorp/consul/sdk/testutil"
|
||||
"github.com/mitchellh/cli"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestRun_FlagValidation(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
args []string
|
||||
|
@ -59,8 +59,6 @@ func TestRun_FlagValidation(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGenerateConfigFromFlags(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
command func() cmd
|
||||
|
@ -69,15 +67,15 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
expError string
|
||||
}{
|
||||
{
|
||||
"proxyID with service port provided",
|
||||
func() cmd {
|
||||
name: "proxyID with service port provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -89,23 +87,22 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 20000,
|
||||
ProxyOutboundPort: iptables.DefaultTProxyOutboundPort,
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxyID with bind_port(int) provided",
|
||||
func() cmd {
|
||||
name: "proxyID with bind_port(int) provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -120,23 +117,22 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 21000,
|
||||
ProxyOutboundPort: iptables.DefaultTProxyOutboundPort,
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxyID with bind_port(string) provided",
|
||||
func() cmd {
|
||||
name: "proxyID with bind_port(string) provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -151,23 +147,22 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 21000,
|
||||
ProxyOutboundPort: iptables.DefaultTProxyOutboundPort,
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxyID with bind_port(invalid type) provided",
|
||||
func() cmd {
|
||||
name: "proxyID with bind_port(invalid type) provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -182,19 +177,18 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{},
|
||||
"failed parsing Proxy.Config: 1 error(s) decoding:\n\n* cannot parse 'bind_port' as int:",
|
||||
expError: "failed parsing Proxy.Config: 1 error(s) decoding:\n\n* cannot parse 'bind_port' as int:",
|
||||
},
|
||||
{
|
||||
"proxyID with proxy outbound port",
|
||||
func() cmd {
|
||||
name: "proxyID with proxy outbound port",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -209,36 +203,33 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 20000,
|
||||
ProxyOutboundPort: 21000,
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxyID provided, but Consul is not reachable",
|
||||
func() cmd {
|
||||
name: "proxyID provided, but Consul is not reachable",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
nil,
|
||||
iptables.Config{},
|
||||
"failed to fetch proxy service from Consul Agent: ",
|
||||
expError: "failed to fetch proxy service from Consul Agent: ",
|
||||
},
|
||||
{
|
||||
"proxyID of a non-proxy service",
|
||||
func() cmd {
|
||||
name: "proxyID of a non-proxy service",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
ID: "test-proxy-id",
|
||||
Name: "test-proxy",
|
||||
|
@ -246,29 +237,26 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
Address: "1.1.1.1",
|
||||
},
|
||||
},
|
||||
iptables.Config{},
|
||||
"service test-proxy-id is not a proxy service",
|
||||
expError: "service test-proxy-id is not a proxy service",
|
||||
},
|
||||
{
|
||||
"only proxy inbound port is provided",
|
||||
func() cmd {
|
||||
name: "only proxy inbound port is provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyInboundPort = 15000
|
||||
return c
|
||||
},
|
||||
nil,
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 15000,
|
||||
ProxyOutboundPort: iptables.DefaultTProxyOutboundPort,
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxy inbound and outbound ports are provided",
|
||||
func() cmd {
|
||||
name: "proxy inbound and outbound ports are provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
|
@ -276,17 +264,15 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
c.proxyOutboundPort = 16000
|
||||
return c
|
||||
},
|
||||
nil,
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 15000,
|
||||
ProxyOutboundPort: 16000,
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"exclude inbound ports are provided",
|
||||
func() cmd {
|
||||
name: "exclude inbound ports are provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
|
@ -294,18 +280,16 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
c.excludeInboundPorts = []string{"8080", "21000"}
|
||||
return c
|
||||
},
|
||||
nil,
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 15000,
|
||||
ProxyOutboundPort: 15001,
|
||||
ExcludeInboundPorts: []string{"8080", "21000"},
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"exclude outbound ports are provided",
|
||||
func() cmd {
|
||||
name: "exclude outbound ports are provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
|
@ -313,18 +297,16 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
c.excludeOutboundPorts = []string{"8080", "21000"}
|
||||
return c
|
||||
},
|
||||
nil,
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 15000,
|
||||
ProxyOutboundPort: 15001,
|
||||
ExcludeOutboundPorts: []string{"8080", "21000"},
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"exclude outbound CIDRs are provided",
|
||||
func() cmd {
|
||||
name: "exclude outbound CIDRs are provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
|
@ -332,18 +314,16 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
c.excludeOutboundCIDRs = []string{"1.1.1.1", "2.2.2.2/24"}
|
||||
return c
|
||||
},
|
||||
nil,
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 15000,
|
||||
ProxyOutboundPort: 15001,
|
||||
ExcludeOutboundCIDRs: []string{"1.1.1.1", "2.2.2.2/24"},
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"exclude UIDs are provided",
|
||||
func() cmd {
|
||||
name: "exclude UIDs are provided",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
|
@ -351,25 +331,23 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
c.excludeUIDs = []string{"2345", "3456"}
|
||||
return c
|
||||
},
|
||||
nil,
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 15000,
|
||||
ProxyOutboundPort: 15001,
|
||||
ExcludeUIDs: []string{"2345", "3456"},
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxy config has envoy_prometheus_bind_addr set",
|
||||
func() cmd {
|
||||
name: "proxy config has envoy_prometheus_bind_addr set",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -384,24 +362,23 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 20000,
|
||||
ProxyOutboundPort: iptables.DefaultTProxyOutboundPort,
|
||||
ExcludeInboundPorts: []string{"9000"},
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxy config has an invalid envoy_prometheus_bind_addr set",
|
||||
func() cmd {
|
||||
name: "proxy config has an invalid envoy_prometheus_bind_addr set",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -416,19 +393,18 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{},
|
||||
"failed parsing host and port from envoy_prometheus_bind_addr: address 9000: missing port in address",
|
||||
expError: "failed parsing host and port from envoy_prometheus_bind_addr: address 9000: missing port in address",
|
||||
},
|
||||
{
|
||||
"proxy config has envoy_stats_bind_addr set",
|
||||
func() cmd {
|
||||
name: "proxy config has envoy_stats_bind_addr set",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -443,24 +419,23 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 20000,
|
||||
ProxyOutboundPort: iptables.DefaultTProxyOutboundPort,
|
||||
ExcludeInboundPorts: []string{"8000"},
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxy config has an invalid envoy_stats_bind_addr set",
|
||||
func() cmd {
|
||||
name: "proxy config has an invalid envoy_stats_bind_addr set",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -475,19 +450,18 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{},
|
||||
"failed parsing host and port from envoy_stats_bind_addr: address 8000: missing port in address",
|
||||
expError: "failed parsing host and port from envoy_stats_bind_addr: address 8000: missing port in address",
|
||||
},
|
||||
{
|
||||
"proxy config has expose paths with listener port set",
|
||||
func() cmd {
|
||||
name: "proxy config has expose paths with listener port set",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
Kind: api.ServiceKindConnectProxy,
|
||||
ID: "test-proxy-id",
|
||||
|
@ -508,24 +482,23 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 20000,
|
||||
ProxyOutboundPort: iptables.DefaultTProxyOutboundPort,
|
||||
ExcludeInboundPorts: []string{"23000"},
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"proxy config has expose paths with checks set to true",
|
||||
func() cmd {
|
||||
name: "proxy config has expose paths with checks set to true",
|
||||
command: func() cmd {
|
||||
var c cmd
|
||||
c.init()
|
||||
c.proxyUID = "1234"
|
||||
c.proxyID = "test-proxy-id"
|
||||
return c
|
||||
},
|
||||
[]api.AgentServiceRegistration{
|
||||
consulServices: []api.AgentServiceRegistration{
|
||||
{
|
||||
ID: "foo-id",
|
||||
Name: "foo",
|
||||
|
@ -559,13 +532,12 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
iptables.Config{
|
||||
expCfg: iptables.Config{
|
||||
ProxyUserID: "1234",
|
||||
ProxyInboundPort: 20000,
|
||||
ProxyOutboundPort: iptables.DefaultTProxyOutboundPort,
|
||||
ExcludeInboundPorts: []string{"21500", "21501"},
|
||||
},
|
||||
"",
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -596,7 +568,10 @@ func TestGenerateConfigFromFlags(t *testing.T) {
|
|||
|
||||
if c.expError == "" {
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, c.expCfg, cfg)
|
||||
|
||||
sort.Strings(c.expCfg.ExcludeInboundPorts)
|
||||
sort.Strings(cfg.ExcludeInboundPorts)
|
||||
require.Equal(t, c.expCfg, cfg)
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), c.expError)
|
||||
|
|
Loading…
Reference in New Issue