From dc0170a4c810c79c942e2aca1bc667f935ea62d3 Mon Sep 17 00:00:00 2001 From: Christoph Eck Date: Tue, 20 Oct 2020 07:50:31 +0200 Subject: [PATCH 1/5] feat: http json data --- http.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/http.go b/http.go index 27c8b3a..de4fb33 100644 --- a/http.go +++ b/http.go @@ -1,6 +1,7 @@ package cachet import ( + "bytes" "crypto/tls" "io/ioutil" "net/http" @@ -38,11 +39,19 @@ type HTTPMonitor struct { // compiled to Regexp ExpectedBody string `mapstructure:"expected_body"` bodyRegexp *regexp.Regexp + + // JSON data + Data string `mapstructure:"data"` } // TODO: test func (monitor *HTTPMonitor) test() bool { - req, err := http.NewRequest(monitor.Method, monitor.Target, nil) + var dataBuffer *bytes.Buffer = nil + if monitor.Data != "" { + dataBuffer = bytes.NewBuffer([]byte(monitor.Data)) + } + + req, err := http.NewRequest(monitor.Method, monitor.Target, dataBuffer) for k, v := range monitor.Headers { req.Header.Add(k, v) } From f6ca8816e7e2dbbf6eb5a596a75b7608710aa3be Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 20 Oct 2020 09:08:39 +0000 Subject: [PATCH 2/5] feat: data request with more log outputs --- http.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/http.go b/http.go index de4fb33..f167946 100644 --- a/http.go +++ b/http.go @@ -9,6 +9,7 @@ import ( "strconv" "strings" "time" + "fmt" ) // Investigating template @@ -47,12 +48,19 @@ type HTTPMonitor struct { // TODO: test func (monitor *HTTPMonitor) test() bool { var dataBuffer *bytes.Buffer = nil + var req *http.Request + var err error if monitor.Data != "" { + fmt.Println("Data: ", monitor.Data) dataBuffer = bytes.NewBuffer([]byte(monitor.Data)) + req, err = http.NewRequest(monitor.Method, monitor.Target, dataBuffer) + } else { + req, err = http.NewRequest(monitor.Method, monitor.Target, nil) } - - req, err := http.NewRequest(monitor.Method, monitor.Target, dataBuffer) + fmt.Println("Target: ", monitor.Target) + fmt.Println("Target: ", dataBuffer) for k, v := range monitor.Headers { + fmt.Println(k, ": ", v) req.Header.Add(k, v) } @@ -65,6 +73,7 @@ func (monitor *HTTPMonitor) test() bool { resp, err := client.Do(req) if err != nil { + fmt.Println(err.Error()) monitor.lastFailReason = err.Error() return false } @@ -73,6 +82,7 @@ func (monitor *HTTPMonitor) test() bool { if monitor.ExpectedStatusCode > 0 && resp.StatusCode != monitor.ExpectedStatusCode { monitor.lastFailReason = "Expected HTTP response status: " + strconv.Itoa(monitor.ExpectedStatusCode) + ", got: " + strconv.Itoa(resp.StatusCode) + fmt.Println(monitor.lastFailReason) return false } @@ -81,11 +91,13 @@ func (monitor *HTTPMonitor) test() bool { responseBody, err := ioutil.ReadAll(resp.Body) if err != nil { monitor.lastFailReason = err.Error() + fmt.Println(err.Error()) return false } if !monitor.bodyRegexp.Match(responseBody) { monitor.lastFailReason = "Unexpected body: " + string(responseBody) + ".\nExpected to match: " + monitor.ExpectedBody + fmt.Println(monitor.lastFailReason) return false } } From 6e0816c077e088cfc3690f736bd78e882dbce54d Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 20 Oct 2020 10:02:12 +0000 Subject: [PATCH 3/5] feat: check md5 sum --- http.go | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/http.go b/http.go index f167946..7707370 100644 --- a/http.go +++ b/http.go @@ -1,8 +1,8 @@ package cachet import ( - "bytes" "crypto/tls" + "crypto/md5" "io/ioutil" "net/http" "regexp" @@ -41,24 +41,24 @@ type HTTPMonitor struct { ExpectedBody string `mapstructure:"expected_body"` bodyRegexp *regexp.Regexp - // JSON data + // data Data string `mapstructure:"data"` + ExpectedMd5Sum string `mapstructure:"expected_md5sum"` } // TODO: test func (monitor *HTTPMonitor) test() bool { - var dataBuffer *bytes.Buffer = nil var req *http.Request var err error if monitor.Data != "" { fmt.Println("Data: ", monitor.Data) - dataBuffer = bytes.NewBuffer([]byte(monitor.Data)) + dataBuffer := strings.NewReader(monitor.Data) req, err = http.NewRequest(monitor.Method, monitor.Target, dataBuffer) + fmt.Println("Target: ", dataBuffer) } else { req, err = http.NewRequest(monitor.Method, monitor.Target, nil) } fmt.Println("Target: ", monitor.Target) - fmt.Println("Target: ", dataBuffer) for k, v := range monitor.Headers { fmt.Println(k, ": ", v) req.Header.Add(k, v) @@ -86,15 +86,26 @@ func (monitor *HTTPMonitor) test() bool { return false } - if monitor.bodyRegexp != nil { - // check response body - responseBody, err := ioutil.ReadAll(resp.Body) - if err != nil { - monitor.lastFailReason = err.Error() - fmt.Println(err.Error()) - return false + // check response body + responseBody, err := ioutil.ReadAll(resp.Body) + fmt.Println("Response: ", string(responseBody)) + if err != nil { + monitor.lastFailReason = err.Error() + fmt.Println(err.Error()) + return false + } + if monitor.ExpectedMd5Sum != "" { + sum := fmt.Sprintf("%x", (md5.Sum(responseBody))) + fmt.Println("Calculated sum", sum) + fmt.Println("Expected sum", monitor.ExpectedMd5Sum) + equalMd5 := strings.Compare(sum, monitor.ExpectedMd5Sum) == 0 + if !equalMd5 { + monitor.lastFailReason = "Expected Md5 sum: " + monitor.ExpectedMd5Sum + ", got: " + sum } + return equalMd5 + } + if monitor.bodyRegexp != nil { if !monitor.bodyRegexp.Match(responseBody) { monitor.lastFailReason = "Unexpected body: " + string(responseBody) + ".\nExpected to match: " + monitor.ExpectedBody fmt.Println(monitor.lastFailReason) From 7657f99ac98dfe64e2691b5f0a5b595faa836716 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 20 Oct 2020 10:12:58 +0000 Subject: [PATCH 4/5] feat: check content length --- http.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/http.go b/http.go index 7707370..ee1457a 100644 --- a/http.go +++ b/http.go @@ -44,6 +44,7 @@ type HTTPMonitor struct { // data Data string `mapstructure:"data"` ExpectedMd5Sum string `mapstructure:"expected_md5sum"` + ExpectedLength int `mapstructure:"expected_length"` } // TODO: test @@ -88,21 +89,28 @@ func (monitor *HTTPMonitor) test() bool { // check response body responseBody, err := ioutil.ReadAll(resp.Body) + responseLength := len(string(responseBody)) fmt.Println("Response: ", string(responseBody)) + fmt.Println("Response len: ", responseLength) if err != nil { monitor.lastFailReason = err.Error() fmt.Println(err.Error()) return false } + + if monitor.ExpectedLength > 0 && responseLength != monitor.ExpectedLength { + monitor.lastFailReason = "Expected response body length: " + strconv.Itoa(monitor.ExpectedLength) + ", got: " + strconv.Itoa(responseLength) + return false + } + if monitor.ExpectedMd5Sum != "" { sum := fmt.Sprintf("%x", (md5.Sum(responseBody))) fmt.Println("Calculated sum", sum) fmt.Println("Expected sum", monitor.ExpectedMd5Sum) - equalMd5 := strings.Compare(sum, monitor.ExpectedMd5Sum) == 0 - if !equalMd5 { - monitor.lastFailReason = "Expected Md5 sum: " + monitor.ExpectedMd5Sum + ", got: " + sum + if strings.Compare(sum, monitor.ExpectedMd5Sum) != 0 { + monitor.lastFailReason = "Expected respsone body MD5 checksum: " + monitor.ExpectedMd5Sum + ", got: " + sum + return false } - return equalMd5 } if monitor.bodyRegexp != nil { From 896c0d28da140a2ec4ba7a704f356d5ad833a6be Mon Sep 17 00:00:00 2001 From: Christoph Eck Date: Tue, 20 Oct 2020 12:17:11 +0200 Subject: [PATCH 5/5] refactor: remove logs and reformat --- http.go | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/http.go b/http.go index ee1457a..1899cf4 100644 --- a/http.go +++ b/http.go @@ -1,15 +1,15 @@ package cachet import ( - "crypto/tls" "crypto/md5" + "crypto/tls" + "fmt" "io/ioutil" "net/http" "regexp" "strconv" "strings" "time" - "fmt" ) // Investigating template @@ -41,27 +41,27 @@ type HTTPMonitor struct { ExpectedBody string `mapstructure:"expected_body"` bodyRegexp *regexp.Regexp + // content check + ExpectedMd5Sum string `mapstructure:"expected_md5sum"` + ExpectedLength int `mapstructure:"expected_length"` + // data Data string `mapstructure:"data"` - ExpectedMd5Sum string `mapstructure:"expected_md5sum"` - ExpectedLength int `mapstructure:"expected_length"` } // TODO: test func (monitor *HTTPMonitor) test() bool { var req *http.Request var err error + if monitor.Data != "" { - fmt.Println("Data: ", monitor.Data) dataBuffer := strings.NewReader(monitor.Data) req, err = http.NewRequest(monitor.Method, monitor.Target, dataBuffer) - fmt.Println("Target: ", dataBuffer) } else { - req, err = http.NewRequest(monitor.Method, monitor.Target, nil) + req, err = http.NewRequest(monitor.Method, monitor.Target, nil) } - fmt.Println("Target: ", monitor.Target) + for k, v := range monitor.Headers { - fmt.Println(k, ": ", v) req.Header.Add(k, v) } @@ -74,7 +74,6 @@ func (monitor *HTTPMonitor) test() bool { resp, err := client.Do(req) if err != nil { - fmt.Println(err.Error()) monitor.lastFailReason = err.Error() return false } @@ -83,18 +82,13 @@ func (monitor *HTTPMonitor) test() bool { if monitor.ExpectedStatusCode > 0 && resp.StatusCode != monitor.ExpectedStatusCode { monitor.lastFailReason = "Expected HTTP response status: " + strconv.Itoa(monitor.ExpectedStatusCode) + ", got: " + strconv.Itoa(resp.StatusCode) - fmt.Println(monitor.lastFailReason) return false } - // check response body responseBody, err := ioutil.ReadAll(resp.Body) responseLength := len(string(responseBody)) - fmt.Println("Response: ", string(responseBody)) - fmt.Println("Response len: ", responseLength) if err != nil { monitor.lastFailReason = err.Error() - fmt.Println(err.Error()) return false } @@ -105,8 +99,6 @@ func (monitor *HTTPMonitor) test() bool { if monitor.ExpectedMd5Sum != "" { sum := fmt.Sprintf("%x", (md5.Sum(responseBody))) - fmt.Println("Calculated sum", sum) - fmt.Println("Expected sum", monitor.ExpectedMd5Sum) if strings.Compare(sum, monitor.ExpectedMd5Sum) != 0 { monitor.lastFailReason = "Expected respsone body MD5 checksum: " + monitor.ExpectedMd5Sum + ", got: " + sum return false @@ -116,7 +108,6 @@ func (monitor *HTTPMonitor) test() bool { if monitor.bodyRegexp != nil { if !monitor.bodyRegexp.Match(responseBody) { monitor.lastFailReason = "Unexpected body: " + string(responseBody) + ".\nExpected to match: " + monitor.ExpectedBody - fmt.Println(monitor.lastFailReason) return false } }