github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/rpc/message/test/message.go (about) 1 package messagetest 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 "testing" 8 9 "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/message" 10 "github.com/stretchr/testify/require" 11 ) 12 13 type jsonMessage interface { 14 json.Marshaler 15 json.Unmarshaler 16 } 17 18 type binaryMessage interface { 19 StableMarshal([]byte) []byte 20 Unmarshal([]byte) error 21 } 22 23 func TestRPCMessage(t *testing.T, msgGens ...func(empty bool) message.Message) { 24 for _, msgGen := range msgGens { 25 msg := msgGen(false) 26 27 t.Run(fmt.Sprintf("convert_%T", msg), func(t *testing.T) { 28 msg := msgGen(false) 29 30 err := msg.FromGRPCMessage(100) 31 32 require.True(t, errors.As(err, new(message.ErrUnexpectedMessageType))) 33 34 msg2 := msgGen(true) 35 36 err = msg2.FromGRPCMessage(msg.ToGRPCMessage()) 37 require.NoError(t, err) 38 39 require.Equal(t, msg, msg2) 40 }) 41 42 t.Run("encoding", func(t *testing.T) { 43 if jm, ok := msg.(jsonMessage); ok { 44 t.Run(fmt.Sprintf("JSON_%T", msg), func(t *testing.T) { 45 data, err := jm.MarshalJSON() 46 require.NoError(t, err) 47 48 jm2 := msgGen(true).(jsonMessage) 49 require.NoError(t, jm2.UnmarshalJSON(data)) 50 51 require.Equal(t, jm, jm2) 52 }) 53 } 54 55 if bm, ok := msg.(binaryMessage); ok { 56 t.Run(fmt.Sprintf("Binary_%T", msg), func(t *testing.T) { 57 data := bm.StableMarshal(nil) 58 59 bm2 := msgGen(true).(binaryMessage) 60 require.NoError(t, bm2.Unmarshal(data)) 61 62 require.Equal(t, bm, bm2) 63 }) 64 } 65 }) 66 } 67 }