diff --git a/pkg/analyze/host_tcp_connect_test.go b/pkg/analyze/host_tcp_connect_test.go index 08897016..c30fe2b5 100644 --- a/pkg/analyze/host_tcp_connect_test.go +++ b/pkg/analyze/host_tcp_connect_test.go @@ -31,6 +31,12 @@ func TestAnalyzeTCPConnect(t *testing.T) { Message: "Connection was refused", }, }, + { + Pass: &troubleshootv1beta2.SingleOutcome{ + When: "connected", + Message: "Connection was successful", + }, + }, { Warn: &troubleshootv1beta2.SingleOutcome{ Message: "Unexpected TCP connection status", @@ -47,7 +53,7 @@ func TestAnalyzeTCPConnect(t *testing.T) { }, }, { - name: "connected, fail", + name: "connected, success", info: &collect.NetworkStatusResult{ Status: collect.NetworkStatusConnected, }, diff --git a/pkg/analyze/host_tcploadbalancer.go b/pkg/analyze/host_tcploadbalancer.go index e6556af9..e827cfd3 100644 --- a/pkg/analyze/host_tcploadbalancer.go +++ b/pkg/analyze/host_tcploadbalancer.go @@ -42,9 +42,9 @@ func (a *AnalyzeHostTCPLoadBalancer) Analyze(getCollectedFileContents func(strin } var coll resultCollector + result := &AnalyzeResult{Title: a.Title()} for _, outcome := range hostAnalyzer.Outcomes { - result := &AnalyzeResult{Title: a.Title()} if outcome.Fail != nil { if outcome.Fail.When == "" { @@ -53,6 +53,7 @@ func (a *AnalyzeHostTCPLoadBalancer) Analyze(getCollectedFileContents func(strin result.URI = outcome.Fail.URI coll.push(result) + break } if string(actual.Status) == outcome.Fail.When { @@ -61,6 +62,7 @@ func (a *AnalyzeHostTCPLoadBalancer) Analyze(getCollectedFileContents func(strin result.URI = outcome.Fail.URI coll.push(result) + break } } else if outcome.Warn != nil { if outcome.Warn.When == "" { @@ -69,6 +71,7 @@ func (a *AnalyzeHostTCPLoadBalancer) Analyze(getCollectedFileContents func(strin result.URI = outcome.Warn.URI coll.push(result) + break } if string(actual.Status) == outcome.Warn.When { @@ -77,6 +80,7 @@ func (a *AnalyzeHostTCPLoadBalancer) Analyze(getCollectedFileContents func(strin result.URI = outcome.Warn.URI coll.push(result) + break } } else if outcome.Pass != nil { if outcome.Pass.When == "" { @@ -85,6 +89,7 @@ func (a *AnalyzeHostTCPLoadBalancer) Analyze(getCollectedFileContents func(strin result.URI = outcome.Pass.URI coll.push(result) + break } if string(actual.Status) == outcome.Pass.When { @@ -93,6 +98,7 @@ func (a *AnalyzeHostTCPLoadBalancer) Analyze(getCollectedFileContents func(strin result.URI = outcome.Pass.URI coll.push(result) + break } } } diff --git a/pkg/analyze/host_tcploadbalancer_test.go b/pkg/analyze/host_tcploadbalancer_test.go new file mode 100644 index 00000000..be837e46 --- /dev/null +++ b/pkg/analyze/host_tcploadbalancer_test.go @@ -0,0 +1,112 @@ +package analyzer + +import ( + "encoding/json" + "testing" + + troubleshootv1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2" + "github.com/replicatedhq/troubleshoot/pkg/collect" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestAnalyzeTCPLoadBalancer(t *testing.T) { + tests := []struct { + name string + info *collect.NetworkStatusResult + hostAnalyzer *troubleshootv1beta2.TCPLoadBalancerAnalyze + result []*AnalyzeResult + expectErr bool + }{ + { + name: "connection refused, fail", + info: &collect.NetworkStatusResult{ + Status: collect.NetworkStatusConnectionRefused, + }, + hostAnalyzer: &troubleshootv1beta2.TCPLoadBalancerAnalyze{ + Outcomes: []*troubleshootv1beta2.Outcome{ + { + Fail: &troubleshootv1beta2.SingleOutcome{ + When: "connection-refused", + Message: "Connection was refused", + }, + }, + { + Pass: &troubleshootv1beta2.SingleOutcome{ + When: "connected", + Message: "Connection was successful", + }, + }, + { + Warn: &troubleshootv1beta2.SingleOutcome{ + Message: "Unexpected TCP connection status", + }, + }, + }, + }, + result: []*AnalyzeResult{ + { + Title: "TCP Load Balancer", + IsFail: true, + Message: "Connection was refused", + }, + }, + }, + { + name: "connected, success", + info: &collect.NetworkStatusResult{ + Status: collect.NetworkStatusConnected, + }, + hostAnalyzer: &troubleshootv1beta2.TCPLoadBalancerAnalyze{ + Outcomes: []*troubleshootv1beta2.Outcome{ + { + Fail: &troubleshootv1beta2.SingleOutcome{ + When: "connection-refused", + Message: "Connection was refused", + }, + }, + { + Pass: &troubleshootv1beta2.SingleOutcome{ + When: "connected", + Message: "Connection was successful", + }, + }, + { + Warn: &troubleshootv1beta2.SingleOutcome{ + Message: "Unexpected TCP connection status", + }, + }, + }, + }, + result: []*AnalyzeResult{ + { + Title: "TCP Load Balancer", + IsPass: true, + Message: "Connection was successful", + }, + }, + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + req := require.New(t) + b, err := json.Marshal(test.info) + if err != nil { + t.Fatal(err) + } + + getCollectedFileContents := func(filename string) ([]byte, error) { + return b, nil + } + + result, err := (&AnalyzeHostTCPLoadBalancer{test.hostAnalyzer}).Analyze(getCollectedFileContents) + if test.expectErr { + req.Error(err) + } else { + req.NoError(err) + } + + assert.Equal(t, test.result, result) + }) + } +}