feat: check md5 sum

This commit is contained in:
Ubuntu
2020-10-20 10:02:12 +00:00
parent f6ca8816e7
commit 6e0816c077

23
http.go
View File

@@ -1,8 +1,8 @@
package cachet package cachet
import ( import (
"bytes"
"crypto/tls" "crypto/tls"
"crypto/md5"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"regexp" "regexp"
@@ -41,24 +41,24 @@ type HTTPMonitor struct {
ExpectedBody string `mapstructure:"expected_body"` ExpectedBody string `mapstructure:"expected_body"`
bodyRegexp *regexp.Regexp bodyRegexp *regexp.Regexp
// JSON data // data
Data string `mapstructure:"data"` Data string `mapstructure:"data"`
ExpectedMd5Sum string `mapstructure:"expected_md5sum"`
} }
// TODO: test // TODO: test
func (monitor *HTTPMonitor) test() bool { func (monitor *HTTPMonitor) test() bool {
var dataBuffer *bytes.Buffer = nil
var req *http.Request var req *http.Request
var err error var err error
if monitor.Data != "" { if monitor.Data != "" {
fmt.Println("Data: ", 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) req, err = http.NewRequest(monitor.Method, monitor.Target, dataBuffer)
fmt.Println("Target: ", dataBuffer)
} else { } else {
req, err = http.NewRequest(monitor.Method, monitor.Target, nil) req, err = http.NewRequest(monitor.Method, monitor.Target, nil)
} }
fmt.Println("Target: ", monitor.Target) fmt.Println("Target: ", monitor.Target)
fmt.Println("Target: ", dataBuffer)
for k, v := range monitor.Headers { for k, v := range monitor.Headers {
fmt.Println(k, ": ", v) fmt.Println(k, ": ", v)
req.Header.Add(k, v) req.Header.Add(k, v)
@@ -86,15 +86,26 @@ func (monitor *HTTPMonitor) test() bool {
return false return false
} }
if monitor.bodyRegexp != nil {
// check response body // check response body
responseBody, err := ioutil.ReadAll(resp.Body) responseBody, err := ioutil.ReadAll(resp.Body)
fmt.Println("Response: ", string(responseBody))
if err != nil { if err != nil {
monitor.lastFailReason = err.Error() monitor.lastFailReason = err.Error()
fmt.Println(err.Error()) fmt.Println(err.Error())
return false 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) { if !monitor.bodyRegexp.Match(responseBody) {
monitor.lastFailReason = "Unexpected body: " + string(responseBody) + ".\nExpected to match: " + monitor.ExpectedBody monitor.lastFailReason = "Unexpected body: " + string(responseBody) + ".\nExpected to match: " + monitor.ExpectedBody
fmt.Println(monitor.lastFailReason) fmt.Println(monitor.lastFailReason)