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  }