From de04a277991bba00cf3a54e156b848db0ecee133 Mon Sep 17 00:00:00 2001 From: Xavi Ramirez Date: Mon, 7 Aug 2017 05:58:15 +0000 Subject: [PATCH] Return NonKayveeError if log contians invalid or empty json --- decode/decode.go | 8 +++++++- decode/decode_test.go | 9 +++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/decode/decode.go b/decode/decode.go index 0a89db6..47f08cc 100644 --- a/decode/decode.go +++ b/decode/decode.go @@ -83,8 +83,14 @@ func FieldsFromKayvee(line string) (map[string]interface{}, error) { possibleJSON := line[firstIdx : lastIdx+1] var fields map[string]interface{} if err := json.Unmarshal([]byte(possibleJSON), &fields); err != nil { - return map[string]interface{}{}, err + return map[string]interface{}{}, &NonKayveeError{} } + + if len(fields) == 0 { // Some logs superfluous "{}" in them. They're not kayvee. + return map[string]interface{}{}, &NonKayveeError{} + } + // TODO: consider also filter if they have source and title + for k, v := range fields { if !stringInSlice(k, reservedFields) { m[k] = v diff --git a/decode/decode_test.go b/decode/decode_test.go index 4ec3ab6..22877a5 100644 --- a/decode/decode_test.go +++ b/decode/decode_test.go @@ -1,7 +1,6 @@ package decode import ( - "encoding/json" "fmt" "testing" "time" @@ -75,7 +74,13 @@ func TestKayveeDecoding(t *testing.T) { Title: "errors on invalid JSON (missing a quote)", Input: `prefix {"a:"b"} postfix`, ExpectedOutput: map[string]interface{}{}, - ExpectedError: &json.SyntaxError{}, + ExpectedError: &NonKayveeError{}, + }, + Spec{ + Title: "errors on empty JSON: {}", + Input: `prefix {} postfix`, + ExpectedOutput: map[string]interface{}{}, + ExpectedError: &NonKayveeError{}, }, }