Skip to content

Commit db1ad26

Browse files
committed
Making the HTTP Collector tests more robust.
Previously, the certificate-mismatch test result was masked by the timeout test result
1 parent 03efedf commit db1ad26

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

pkg/collect/http.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ func responseToOutput(response *http.Response, err error) ([]byte, error) {
213213
var rawJSON json.RawMessage
214214
if len(body) > 0 {
215215
if err := json.Unmarshal(body, &rawJSON); err != nil {
216-
klog.Infof("failed to unmarshal response body as JSON: %+v", err)
216+
klog.Infof("response body is not in JSON format: %+v", err)
217217
rawJSON = json.RawMessage{}
218218
}
219219
} else {

pkg/collect/http_test.go

+21-12
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"io"
88
"net/http"
99
"net/http/httptest"
10+
"regexp"
1011
"strings"
1112
"testing"
1213
"time"
@@ -42,6 +43,7 @@ type CollectorTest struct {
4243
Collector *troubleshootv1beta2.HTTP
4344
args args
4445
checkTimeout bool
46+
checkCert bool
4547
want CollectorResult
4648
wantErr bool
4749
}
@@ -77,18 +79,16 @@ func TestCollectHTTP_Collect(t *testing.T) {
7779
res.Write([]byte("Hello, PUT!"))
7880
})
7981
mux.HandleFunc("/error", func(res http.ResponseWriter, req *http.Request) {
80-
time.Sleep(1 * time.Millisecond)
82+
time.Sleep(2000 * time.Millisecond)
8183
fmt.Println("Sleeping for 2 seconds on /error call")
8284
res.Header().Set("Content-Type", "application/json; charset=utf-8")
8385
res.WriteHeader(http.StatusInternalServerError)
8486
res.Write([]byte("{\"error\": { \"message\": \"context deadline exceeded\"}}"))
8587
})
8688
mux.HandleFunc("/certificate-mismatch", func(res http.ResponseWriter, req *http.Request) {
87-
time.Sleep(1 * time.Millisecond)
88-
fmt.Println("Sleeping for 2 seconds on /error call")
8989
res.Header().Set("Content-Type", "application/json; charset=utf-8")
9090
res.WriteHeader(http.StatusInternalServerError)
91-
res.Write([]byte("{\"error\": { \"message\": \"Request failed: proxyconnect tcp: tls: failed to verify certificate: x509: \"10.0.0.254\" certificate is not trusted\"}}"))
91+
res.Write([]byte("{\"error\": { \"message\": \"Request failed: proxyconnect tcp: tls: failed to verify certificate: x509: 10.0.0.254 certificate is not trusted\"}}"))
9292
})
9393

9494
sample_get_response := &ResponseData{
@@ -129,14 +129,14 @@ func TestCollectHTTP_Collect(t *testing.T) {
129129

130130
sample_error_response := &ErrorResponse{
131131
Error: HTTPError{
132-
Message: "context deadline exceeded",
132+
Message: "Get \"http://127.0.0.1:57932/error\": context deadline exceeded",
133133
},
134134
}
135135
sample_error_bytes, _ := sample_error_response.ToJSONbytes()
136136

137137
sample_certificate_untrusted := &ErrorResponse{
138138
Error: HTTPError{
139-
Message: "Request failed: proxyconnect tcp: tls: failed to verify certificate: x509: \"10.0.0.254\" certificate is not trusted",
139+
Message: "Request failed: proxyconnect tcp: tls: failed to verify certificate: x509: 10.0.0.254 certificate is not trusted",
140140
},
141141
}
142142
sample_certificate_untrusted_bytes, _ := sample_certificate_untrusted.ToJSONbytes()
@@ -279,8 +279,8 @@ func TestCollectHTTP_Collect(t *testing.T) {
279279
want: CollectorResult{
280280
"result.json": sample_certificate_untrusted_bytes,
281281
},
282-
checkTimeout: true,
283-
wantErr: true,
282+
checkCert: true,
283+
wantErr: true,
284284
},
285285
}
286286
for _, tt := range tests {
@@ -304,8 +304,9 @@ func TestCollectHTTP_Collect(t *testing.T) {
304304
c.Collector.Get.URL = fmt.Sprintf("%s%s", url, "/error")
305305
response_data := sample_error_response
306306
response_data.testCollectHTTP(t, &tt, c)
307+
} else if tt.checkCert {
307308
c.Collector.Get.URL = fmt.Sprintf("%s%s", url, "/certificate-mismatch")
308-
response_data = sample_certificate_untrusted
309+
response_data := sample_certificate_untrusted
309310
response_data.testCollectHTTP(t, &tt, c)
310311
} else {
311312
c.Collector.Get.URL = fmt.Sprintf("%s%s", url, "/get")
@@ -374,9 +375,8 @@ func (er *ErrorResponse) testCollectHTTP(t *testing.T, tt *CollectorTest, c *Col
374375
t.Errorf("CollectHTTP.Collect() error = %v, wantErr %v", err, tt.wantErr)
375376
return
376377
}
377-
378-
if strings.Contains(strings.TrimSpace(er.Error.Message), "context deadline exceeded") != tt.wantErr {
379-
t.Errorf("CollectHTTP.Collect() response = %v, wantErr %v", er.Error.Message, tt.wantErr)
378+
if !compareStringsAlphaOnly(string(tt.want[expected_filename]), string(er.Error.Message)) {
379+
t.Errorf("CollectHTTP.Collect() response = %v, wantErr %s", er.Error.Message, tt.want[expected_filename])
380380
}
381381
}
382382

@@ -473,3 +473,12 @@ func Test_responseToOutput(t *testing.T) {
473473
})
474474
}
475475
}
476+
477+
func compareStringsAlphaOnly(str1, str2 string) bool {
478+
reg := regexp.MustCompile("[^a-zA-Z]+")
479+
480+
processedStr1 := reg.ReplaceAllString(str1, "")
481+
processedStr2 := reg.ReplaceAllString(str2, "")
482+
483+
return strings.Contains(processedStr1, processedStr2)
484+
}

0 commit comments

Comments
 (0)