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  }