github.com/nyan233/littlerpc@v0.4.6-0.20230316182519-0c8d5c48abaf/core/protocol/error/error_test.go (about) 1 package error 2 3 import ( 4 "encoding/json" 5 random2 "github.com/nyan233/littlerpc/core/utils/random" 6 "github.com/nyan233/littlerpc/internal/reflect" 7 "github.com/stretchr/testify/assert" 8 "testing" 9 ) 10 11 func TestError(t *testing.T) { 12 t.Run("LCode", func(t *testing.T) { 13 numberSeq := random2.GenSequenceNumberOnFastRand(16384) 14 for _, v := range numberSeq { 15 code := Code(v) 16 assert.NotEqualf(t, code.String(), "", "Equal \"\"") 17 var codeStr string 18 err := json.Unmarshal([]byte(code.String()), &codeStr) 19 if err != nil { 20 t.Fatal(err) 21 } 22 } 23 }) 24 t.Run("NilMore", func(t *testing.T) { 25 nilMore, _ := json.Marshal([]string(nil)) 26 genErr := LNewStdError(int(random2.FastRandN(1024)), random2.GenStringOnAscii(10)) 27 err := genErr.UnmarshalMores(nilMore) 28 if err != nil { 29 t.Fatal(err) 30 } 31 t.Log(genErr) 32 }) 33 t.Run("EmptyMore", func(t *testing.T) { 34 nilMore, _ := json.Marshal([]string{""}) 35 genErr := LNewStdError(int(random2.FastRandN(1024)), random2.GenStringOnAscii(10)) 36 err := genErr.UnmarshalMores(nilMore) 37 if err != nil { 38 t.Fatal(err) 39 } 40 t.Log(genErr) 41 }) 42 t.Run("StringMore", func(t *testing.T) { 43 strMore, _ := json.Marshal(random2.GenStringsOnAscii(3, 5)) 44 genErr := LNewStdError(int(random2.FastRandN(1024)), random2.GenStringOnAscii(10)) 45 err := genErr.UnmarshalMores(strMore) 46 if err != nil { 47 t.Fatal(err) 48 } 49 t.Log(genErr) 50 }) 51 t.Run("StdErrorApi", func(t *testing.T) { 52 allMores := random2.GenStringsOnAscii(10, 100) 53 genErr := LNewStdError(int(random2.FastRandN(1024)), random2.GenStringOnAscii(100)) 54 for k, v := range allMores { 55 genErr.AppendMore(v) 56 if genErr.Code() > 1024 { 57 t.Fatal("genErr get code > 1024") 58 } 59 if len(genErr.Message()) > 100 { 60 t.Fatal("genErr get message length > 100") 61 } 62 if !reflect.DeepEqualNotType(genErr.Mores(), allMores[:k+1]) { 63 t.Fatal("append LMores not equal") 64 } 65 } 66 }) 67 } 68 69 func BenchmarkErrorEncoding(b *testing.B) { 70 err := LNewStdError(200, random2.GenStringOnAscii(1000), random2.GenBytesOnAscii(400), 200) 71 b.Run("StdError.Error()", func(b *testing.B) { 72 b.ReportAllocs() 73 for i := 0; i < b.N; i++ { 74 _ = err.Error() 75 } 76 }) 77 b.Run("json.Marshal()", func(b *testing.B) { 78 b.ReportAllocs() 79 for i := 0; i < b.N; i++ { 80 _, _ = json.Marshal(err) 81 } 82 }) 83 }