redirecttraffic: fix a flaky test
https://app.circleci.com/pipelines/github/hashicorp/consul-enterprise/6408/workflows/e90b1140-daa2-458f-8197-d1821e3693e3/jobs/94694/tests#failed-test-0 The ExcludeInboundPorts can be in a different order sometimes, although I'm not sure how. Also removes t.Parallel. We should only need to use t.Parallel in large packages with many slow tests. In this case there is only a single slow test so we don't get any benefit. Also add struct field names to the testcases list, so that it is easier to see what each value is doing, and to make it easier to add new fields in the future.
This commit is contained in:
parent
2730185ac6
commit
f079cef352
|
@ -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