github.com/GuanceCloud/cliutils@v1.1.21/point/easyproto_test.go (about)

     1  package point
     2  
     3  import (
     4  	T "testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func BenchmarkEasyproto(b *T.B) {
    10  	r := NewRander(WithRandText(3))
    11  	pts := r.Rand(1000)
    12  
    13  	pbpts := &PBPoints{}
    14  
    15  	for _, pt := range pts {
    16  		pbpts.Arr = append(pbpts.Arr, pt.pt)
    17  	}
    18  
    19  	b.ResetTimer()
    20  	b.Run("easyproto-encode", func(b *T.B) {
    21  		for i := 0; i < b.N; i++ {
    22  			var dst []byte
    23  			marshalPoints(pts, dst)
    24  		}
    25  	})
    26  
    27  	b.ResetTimer()
    28  	b.Run("gogopb-encode", func(b *T.B) {
    29  		for i := 0; i < b.N; i++ {
    30  			pbpts.Marshal()
    31  		}
    32  	})
    33  
    34  	src, err := pbpts.Marshal()
    35  	assert.NoError(b, err)
    36  	b.ResetTimer()
    37  	b.Run("easyproto-decode", func(b *T.B) {
    38  		for i := 0; i < b.N; i++ {
    39  			unmarshalPoints(src)
    40  		}
    41  	})
    42  
    43  	b.Run("gogopb-decode", func(b *T.B) {
    44  		for i := 0; i < b.N; i++ {
    45  			var pbpts PBPoints
    46  			pbpts.Unmarshal(src)
    47  		}
    48  	})
    49  
    50  	b.Run("easyproto-decode-under-point-pool", func(b *T.B) {
    51  		pp := NewReservedCapPointPool(100)
    52  		SetPointPool(pp)
    53  
    54  		b.Cleanup(func() {
    55  			b.Logf("ptpool: %s", pp.(*ReservedCapPointPool).String())
    56  			ClearPointPool()
    57  		})
    58  
    59  		for i := 0; i < b.N; i++ {
    60  			pts, _ := unmarshalPoints(src)
    61  
    62  			for _, pt := range pts {
    63  				pp.Put(pt)
    64  			}
    65  		}
    66  	})
    67  
    68  	/*
    69  		  goos: darwin
    70  			goarch: arm64
    71  			pkg: github.com/GuanceCloud/cliutils/point
    72  			BenchmarkEasyproto
    73  			BenchmarkEasyproto/easyproto-encode
    74  			BenchmarkEasyproto/easyproto-encode-10         	    1161	   1034532 ns/op	 1202131 B/op	       1 allocs/op
    75  			BenchmarkEasyproto/gogopb-encode
    76  			BenchmarkEasyproto/gogopb-encode-10            	    3010	    401256 ns/op	 1089548 B/op	       1 allocs/op
    77  			BenchmarkEasyproto/easyproto-decode
    78  			BenchmarkEasyproto/easyproto-decode-10         	     560	   2119419 ns/op	 2138183 B/op	   57014 allocs/op
    79  			BenchmarkEasyproto/easyproto-decode#01
    80  			BenchmarkEasyproto/easyproto-decode#01-10      	     601	   1958508 ns/op	 3013150 B/op	   69012 allocs/op
    81  			PASS
    82  			ok  	github.com/GuanceCloud/cliutils/point	6.254s
    83  	*/
    84  }
    85  
    86  func TestEasyproto(t *T.T) {
    87  	t.Run("marshal", func(t *T.T) {
    88  		var kvs KVs
    89  		kvs = kvs.AddV2("f1", 123, false)
    90  		kvs = kvs.AddV2("f2", 1.23, false)
    91  		kvs = kvs.AddV2("f3", uint(42), false, WithKVUnit("year"), WithKVType(GAUGE))
    92  		kvs = kvs.AddV2("f4", false, false)
    93  		kvs = kvs.AddV2("f5", []byte("binary-data"), false)
    94  		kvs = kvs.AddV2("f6", "text-data", false)
    95  		kvs = kvs.AddV2("tag-1", "value-1", true, WithKVTagSet(true))
    96  
    97  		pts := []*Point{
    98  			NewPointV2("p1", kvs, WithTimestamp(123)),
    99  		}
   100  
   101  		var dst []byte
   102  
   103  		// marshaled with easyproto
   104  		dst = marshalPoints(pts, dst)
   105  
   106  		// unmarshal with gogo-proto
   107  		dec := GetDecoder(WithDecEncoding(Protobuf), WithDecEasyproto(false))
   108  		defer PutDecoder(dec)
   109  
   110  		pts2, err := dec.Decode(dst)
   111  		assert.NoError(t, err)
   112  		assert.Len(t, pts2, 1)
   113  
   114  		assert.Equal(t, pts[0].Pretty(), pts2[0].Pretty())
   115  
   116  		t.Logf("pt: %s", pts[0].Pretty())
   117  	})
   118  
   119  	t.Run("unmarshal", func(t *T.T) {
   120  		var kvs KVs
   121  		kvs = kvs.AddV2("f1", 123, false, WithKVUnit("dollar"), WithKVType(GAUGE))
   122  		kvs = kvs.AddV2("f2", 1.23, false, WithKVUnit("byte"), WithKVType(COUNT))
   123  		kvs = kvs.AddV2("f3", uint(42), false)
   124  		kvs = kvs.AddV2("f4", false, false)
   125  		kvs = kvs.AddV2("f5", []byte("binary-data"), false)
   126  		kvs = kvs.AddV2("f6", "text-data", false)
   127  		kvs = kvs.AddV2("tag-1", "value-1", false, WithKVTagSet(true))
   128  
   129  		pts := []*Point{
   130  			NewPointV2("p1", kvs, WithTimestamp(123)),
   131  		}
   132  		t.Logf("pt: %s", pts[0].Pretty())
   133  
   134  		var dst []byte
   135  		dst = marshalPoints(pts, dst)
   136  
   137  		pts2, err := unmarshalPoints(dst)
   138  		assert.NoError(t, err)
   139  
   140  		assert.Len(t, pts2, 1)
   141  
   142  		assert.Equal(t, pts[0].Pretty(), pts2[0].Pretty())
   143  
   144  		t.Logf("pt2: %s", pts2[0].Pretty())
   145  	})
   146  }