github.com/influx6/npkg@v0.8.8/njson/json_test.go (about) 1 package njson_test 2 3 import ( 4 gnjson "encoding/json" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 9 "github.com/influx6/npkg" 10 "github.com/influx6/npkg/njson" 11 ) 12 13 type WritableBuffer struct { 14 Data []byte 15 } 16 17 func (wb *WritableBuffer) Write(content []byte) (int, error) { 18 wb.Data = append(wb.Data, content...) 19 return len(content), nil 20 } 21 22 func TestGetJSON(t *testing.T) { 23 t.Run("basic list", func(t *testing.T) { 24 event := njson.JSONL() 25 event.AddString("thunder") 26 event.AddInt(234) 27 require.Equal(t, "[\"thunder\", 234]", event.Message()) 28 }) 29 30 t.Run("basic list with bytes", func(t *testing.T) { 31 event := njson.JSONL() 32 event.AddString("thunder") 33 event.AddInt(234) 34 35 var jsid, err = gnjson.Marshal(map[string]interface{}{"id": 23}) 36 require.NoError(t, err) 37 require.NotEmpty(t, jsid) 38 39 event.AddBytes(jsid) 40 41 require.Equal(t, "[\"thunder\", 234, {\"id\":23}]", event.Message()) 42 }) 43 44 t.Run("basic fields", func(t *testing.T) { 45 event := njson.MJSON("My log") 46 event.String("name", "thunder") 47 event.Int("id", 234) 48 require.Equal(t, "{\"message\": \"My log\", \"name\": \"thunder\", \"id\": 234}", event.Message()) 49 }) 50 51 t.Run("with Object fields", func(t *testing.T) { 52 event := njson.MJSON("My log") 53 event.String("name", "thunder") 54 event.Int("id", 234) 55 56 var jsid, err = gnjson.Marshal(map[string]interface{}{"id": 23}) 57 require.NoError(t, err) 58 require.NotEmpty(t, jsid) 59 60 event.Bytes("data", jsid) 61 require.Equal(t, "{\"message\": \"My log\", \"name\": \"thunder\", \"id\": 234, \"data\": {\"id\":23}}", event.Message()) 62 }) 63 64 t.Run("with Entry fields", func(t *testing.T) { 65 event := njson.MJSON("My log") 66 event.String("name", "thunder") 67 event.Int("id", 234) 68 event.ObjectFor("data", func(event npkg.ObjectEncoder) { 69 event.Int("id", 23) 70 }) 71 require.Equal(t, "{\"message\": \"My log\", \"name\": \"thunder\", \"id\": 234, \"data\": {\"id\": 23}}", event.Message()) 72 }) 73 74 t.Run("with bytes fields", func(t *testing.T) { 75 event := njson.MJSON("My log") 76 event.String("name", "thunder") 77 event.Int("id", 234) 78 event.Bytes("data", []byte("{\"id\": 23}")) 79 require.Equal(t, "{\"message\": \"My log\", \"name\": \"thunder\", \"id\": 234, \"data\": {\"id\": 23}}", event.Message()) 80 }) 81 } 82 83 func BenchmarkGetJSON(b *testing.B) { 84 b.ResetTimer() 85 b.ReportAllocs() 86 87 b.Run("with basic fields", func(b *testing.B) { 88 b.ResetTimer() 89 b.ReportAllocs() 90 91 for i := b.N; i > 0; i-- { 92 event := njson.MJSON("My log") 93 event.String("name", "thunder") 94 event.Int("id", 234) 95 event.Message() 96 } 97 }) 98 99 b.Run("with Entry fields", func(b *testing.B) { 100 b.ResetTimer() 101 b.ReportAllocs() 102 103 for i := b.N; i > 0; i-- { 104 event := njson.MJSON("My log") 105 event.String("name", "thunder") 106 event.Int("id", 234) 107 event.ObjectFor("data", func(event npkg.ObjectEncoder) { 108 event.Int("id", 23) 109 }) 110 event.Message() 111 } 112 }) 113 114 b.Run("with bytes fields", func(b *testing.B) { 115 b.ResetTimer() 116 b.ReportAllocs() 117 118 bu := []byte("{\"id\": 23}") 119 for i := b.N; i > 0; i-- { 120 event := njson.MJSON("My log") 121 event.String("name", "thunder") 122 event.Int("id", 234) 123 event.Bytes("data", bu) 124 event.Message() 125 } 126 }) 127 }