--- a/loader/schema.json Sat Jul 09 09:56:31 2016 -0500
+++ b/loader/schema.json Sat Jul 09 10:38:27 2016 -0500
@@ -103,7 +103,7 @@
"required": ["statuscode", "body"]
- "required": ["status_code", "json-schema"]
+ "required": ["statuscode", "json-schema"] "required": ["statuscode"]
--- a/reporter/console_reporter.go Sat Jul 09 09:56:31 2016 -0500
+++ b/reporter/console_reporter.go Sat Jul 09 10:38:27 2016 -0500
@@ -38,7 +38,11 @@
fmt.Printf("%s %s %s\n", test.Name, status, test.Duration.String())
- if reporter.verbose || res.Passed == false {
+ fmt.Printf(" %s\n", res.Error.Error()) writer := new(tabwriter.Writer)
writer.Init(os.Stdout, 2, 2, 2, ' ', 0)
--- a/test/request.go Sat Jul 09 09:56:31 2016 -0500
+++ b/test/request.go Sat Jul 09 10:38:27 2016 -0500
@@ -14,6 +14,7 @@
"gopkg.in/xeipuuv/gojsonschema.v0"
@@ -134,12 +135,15 @@
-func (req *Request) compareResponse(res *Result, hresp *http.Response) {
- res.HttpResponse = *hresp
+func (req *Request) compareResponse(hresp *http.Response) (bool, error) { // first check the resp code
if hresp.StatusCode != req.Response.StatusCode {
+ "Expected status code '%d' but got '%d'", + req.Response.StatusCode, @@ -147,7 +151,13 @@
actual := hresp.Header[http.CanonicalHeaderKey(name)]
+ "Expected header '%s' to be '%s' but received '%s'", @@ -155,44 +165,52 @@
// read the body into a byte array
body_byte, err := ioutil.ReadAll(hresp.Body)
// check if we have a file block and check it
if len(req.Response.File) > 0 {
if sha256_digest, ok := req.Response.File["sha256"]; ok {
sum := sha256.Sum256(body_byte)
+ actual := fmt.Sprintf("%x", sum) - if fmt.Sprintf("%x", sum) != sha256_digest {
+ if actual != sha256_digest { + "Expected file to have a SHA256 of '%s' but received '%s'", if md5_digest, ok := req.Response.File["md5"]; ok {
sum := md5.Sum(body_byte)
+ actual := fmt.Sprintf("%x", sum) - if fmt.Sprintf("%x", sum) != md5_digest {
+ if actual != md5_digest { + "Expected file to have a MD5 of '%s' but received '%s'", if filename, ok := req.Response.File["filename"]; ok {
file, err := os.Create(filename)
_, err = file.Write(body_byte)
body := string(body_byte[:])
@@ -203,16 +221,21 @@
schema_result, err := gojsonschema.Validate(schema_loader, body_loader)
if schema_result.Valid() != true {
+ for _, err := range schema_result.Errors() { + errors = append(errors, err.Description()) + err_msg := strings.Join(errors, "\n") + err := fmt.Errorf("Schema validation failed:\n%s", err_msg) - // if we made it this far, we passed, yay!
- res.TestResponse = req.Response
--- a/test/result.go Sat Jul 09 09:56:31 2016 -0500
+++ b/test/result.go Sat Jul 09 10:38:27 2016 -0500
@@ -7,8 +7,9 @@
- HttpResponse http.Response
+ HttpResponse *http.Response func NewResult(test *Test) *Result {
--- a/test/test.go Sat Jul 09 09:56:31 2016 -0500
+++ b/test/test.go Sat Jul 09 10:38:27 2016 -0500
@@ -29,11 +29,14 @@
resp, err := client.Do(http_request)
- request.compareResponse(res, resp)
+ res.HttpResponse = resp + res.Passed, res.Error = request.compareResponse(resp)