2018-02-05 16:05:59 -05:00
package jsonlog // import "github.com/docker/docker/daemon/logger/jsonfilelog/jsonlog"
2015-06-27 09:18:52 +02:00
import (
"bytes"
2017-09-22 15:37:16 -04:00
"encoding/json"
2015-06-27 09:18:52 +02:00
"regexp"
"testing"
2017-09-22 15:37:16 -04:00
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2015-06-27 09:18:52 +02:00
)
2015-08-08 11:28:22 +08:00
func TestJSONLogsMarshalJSONBuf ( t * testing . T ) {
logs := map [ * JSONLogs ] string {
2017-09-22 15:37:16 -04:00
{ Log : [ ] byte ( ` "A log line with \\" ` ) } : ` ^ { \"log\":\"\\\"A log line with \\\\\\\\\\\"\",\"time\": ` ,
{ Log : [ ] byte ( "A log line" ) } : ` ^ { \"log\":\"A log line\",\"time\": ` ,
{ Log : [ ] byte ( "A log line with \r" ) } : ` ^ { \"log\":\"A log line with \\r\",\"time\": ` ,
{ Log : [ ] byte ( "A log line with & < >" ) } : ` ^ { \"log\":\"A log line with \\u0026 \\u003c \\u003e\",\"time\": ` ,
{ Log : [ ] byte ( "A log line with utf8 : 🚀 ψ ω β" ) } : ` ^ { \"log\":\"A log line with utf8 : 🚀 ψ ω β\",\"time\": ` ,
{ Stream : "stdout" } : ` ^ { \"stream\":\"stdout\",\"time\": ` ,
{ Stream : "stdout" , Log : [ ] byte ( "A log line" ) } : ` ^ { \"log\":\"A log line\",\"stream\":\"stdout\",\"time\": ` ,
{ Created : time . Date ( 2017 , 9 , 1 , 1 , 1 , 1 , 1 , time . UTC ) } : ` ^ { \"time\":"2017-09-01T01:01:01.000000001Z"}$ ` ,
{ } : ` ^ { \"time\":"0001-01-01T00:00:00Z"}$ ` ,
2015-06-27 09:18:52 +02:00
// These ones are a little weird
2017-09-22 15:37:16 -04:00
{ Log : [ ] byte ( "\u2028 \u2029" ) } : ` ^ { \"log\":\"\\u2028 \\u2029\",\"time\": ` ,
{ Log : [ ] byte { 0xaF } } : ` ^ { \"log\":\"\\ufffd\",\"time\": ` ,
{ Log : [ ] byte { 0x7F } } : ` ^ { \"log\":\"\x7f\",\"time\": ` ,
2015-10-04 21:07:09 +00:00
// with raw attributes
2017-09-22 15:37:16 -04:00
{ Log : [ ] byte ( "A log line" ) , RawAttrs : [ ] byte ( ` { "hello":"world","value":1234} ` ) } : ` ^ { \"log\":\"A log line\",\"attrs\": { \"hello\":\"world\",\"value\":1234},\"time\": ` ,
2017-09-26 10:22:10 -04:00
// with Tag set
2018-01-08 00:54:58 +00:00
{ Log : [ ] byte ( "A log line with tag" ) , RawAttrs : [ ] byte ( ` { "hello":"world","value":1234} ` ) } : ` ^ { \"log\":\"A log line with tag\",\"attrs\": { \"hello\":\"world\",\"value\":1234},\"time\": ` ,
2015-06-27 09:18:52 +02:00
}
for jsonLog , expression := range logs {
var buf bytes . Buffer
2017-09-22 15:37:16 -04:00
err := jsonLog . MarshalJSONBuf ( & buf )
require . NoError ( t , err )
assert . Regexp ( t , regexp . MustCompile ( expression ) , buf . String ( ) )
assert . NoError ( t , json . Unmarshal ( buf . Bytes ( ) , & map [ string ] interface { } { } ) )
2015-06-27 09:18:52 +02:00
}
}