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  }