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:
Daniel Nephin 2021-05-18 12:36:46 -04:00
parent 2bb846fee5
commit 5a7059f45c
1 changed files with 77 additions and 102 deletions

View File

@ -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)