Merge pull request #10253 from hashicorp/dnephin/fix-test-flake

redirecttraffic: fix a flaky test
This commit is contained in:
Daniel Nephin 2021-05-19 11:00:59 -04:00 committed by GitHub
commit 4847654e3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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)