2015-03-09 18:15:08 +03:00
|
|
|
package logrus
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"errors"
|
2016-08-15 21:04:25 +03:00
|
|
|
"strings"
|
2015-03-09 18:15:08 +03:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestErrorNotLost(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{}
|
|
|
|
|
|
|
|
b, err := formatter.Format(WithField("error", errors.New("wild walrus")))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
entry := make(map[string]interface{})
|
|
|
|
err = json.Unmarshal(b, &entry)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to unmarshal formatted entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if entry["error"] != "wild walrus" {
|
|
|
|
t.Fatal("Error field not set")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestErrorNotLostOnFieldNotNamedError(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{}
|
|
|
|
|
|
|
|
b, err := formatter.Format(WithField("omg", errors.New("wild walrus")))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
entry := make(map[string]interface{})
|
|
|
|
err = json.Unmarshal(b, &entry)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to unmarshal formatted entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if entry["omg"] != "wild walrus" {
|
|
|
|
t.Fatal("Error field not set")
|
|
|
|
}
|
|
|
|
}
|
2015-03-09 18:30:43 +03:00
|
|
|
|
|
|
|
func TestFieldClashWithTime(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{}
|
|
|
|
|
|
|
|
b, err := formatter.Format(WithField("time", "right now!"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
entry := make(map[string]interface{})
|
|
|
|
err = json.Unmarshal(b, &entry)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to unmarshal formatted entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if entry["fields.time"] != "right now!" {
|
|
|
|
t.Fatal("fields.time not set to original time field")
|
|
|
|
}
|
|
|
|
|
|
|
|
if entry["time"] != "0001-01-01T00:00:00Z" {
|
|
|
|
t.Fatal("time field not set to current time, was: ", entry["time"])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFieldClashWithMsg(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{}
|
|
|
|
|
|
|
|
b, err := formatter.Format(WithField("msg", "something"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
entry := make(map[string]interface{})
|
|
|
|
err = json.Unmarshal(b, &entry)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to unmarshal formatted entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if entry["fields.msg"] != "something" {
|
|
|
|
t.Fatal("fields.msg not set to original msg field")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFieldClashWithLevel(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{}
|
|
|
|
|
|
|
|
b, err := formatter.Format(WithField("level", "something"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
entry := make(map[string]interface{})
|
|
|
|
err = json.Unmarshal(b, &entry)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to unmarshal formatted entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if entry["fields.level"] != "something" {
|
|
|
|
t.Fatal("fields.level not set to original level field")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestJSONEntryEndsWithNewline(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{}
|
|
|
|
|
|
|
|
b, err := formatter.Format(WithField("level", "something"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if b[len(b)-1] != '\n' {
|
|
|
|
t.Fatal("Expected JSON log entry to end with a newline")
|
|
|
|
}
|
|
|
|
}
|
2016-08-15 21:04:25 +03:00
|
|
|
|
|
|
|
func TestJSONMessageKey(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{MessageKey: "message"}
|
|
|
|
|
|
|
|
b, err := formatter.Format(&Entry{Message: "oh hai"})
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
s := string(b)
|
|
|
|
if !(strings.Contains(s, "message") && strings.Contains(s, "oh hai")) {
|
|
|
|
t.Fatal("Expected JSON to format message key")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestJSONLevelKey(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{LevelKey: "somelevel"}
|
|
|
|
|
|
|
|
b, err := formatter.Format(WithField("level", "something"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
s := string(b)
|
|
|
|
if !strings.Contains(s, "somelevel") {
|
|
|
|
t.Fatal("Expected JSON to format level key")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestJSONTimeKey(t *testing.T) {
|
|
|
|
formatter := &JSONFormatter{TimeKey: "timeywimey"}
|
|
|
|
|
|
|
|
b, err := formatter.Format(WithField("level", "something"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Unable to format entry: ", err)
|
|
|
|
}
|
|
|
|
s := string(b)
|
|
|
|
if !strings.Contains(s, "timeywimey") {
|
|
|
|
t.Fatal("Expected JSON to format time key")
|
|
|
|
}
|
|
|
|
}
|