| package logrus |
| |
| import ( |
| "encoding/json" |
| "errors" |
| "strings" |
| "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") |
| } |
| } |
| |
| 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") |
| } |
| } |
| |
| func TestJSONMessageKey(t *testing.T) { |
| formatter := &JSONFormatter{ |
| FieldMap: FieldMap{ |
| FieldKeyMsg: "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{ |
| FieldMap: FieldMap{ |
| FieldKeyLevel: "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{ |
| FieldMap: FieldMap{ |
| FieldKeyTime: "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") |
| } |
| } |
| |
| func TestJSONDisableTimestamp(t *testing.T) { |
| formatter := &JSONFormatter{ |
| DisableTimestamp: true, |
| } |
| |
| b, err := formatter.Format(WithField("level", "something")) |
| if err != nil { |
| t.Fatal("Unable to format entry: ", err) |
| } |
| s := string(b) |
| if strings.Contains(s, FieldKeyTime) { |
| t.Error("Did not prevent timestamp", s) |
| } |
| } |
| |
| func TestJSONEnableTimestamp(t *testing.T) { |
| formatter := &JSONFormatter{} |
| |
| b, err := formatter.Format(WithField("level", "something")) |
| if err != nil { |
| t.Fatal("Unable to format entry: ", err) |
| } |
| s := string(b) |
| if !strings.Contains(s, FieldKeyTime) { |
| t.Error("Timestamp not present", s) |
| } |
| } |