Fix protogen empty messages marshaling #108
1 changed files with 59 additions and 0 deletions
|
@ -7,6 +7,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto/encoding"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -68,6 +69,64 @@ func TestRPCMessage(t *testing.T, msgGens ...func(empty bool) message.Message) {
|
||||||
require.Equal(t, bm, bm2)
|
require.Equal(t, bm, bm2)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
t.Run("compatibility", func(t *testing.T) {
|
||||||
|
testCompatibility(t, msgGen)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testCompatibility(t *testing.T, msgGen func(empty bool) message.Message) {
|
||||||
|
compareBinary := func(t *testing.T, msg message.Message) {
|
||||||
|
am, ok := msg.(binaryMessage)
|
||||||
|
if !ok {
|
||||||
|
t.Skip()
|
||||||
|
}
|
||||||
|
|
||||||
|
a := am.StableMarshal(nil)
|
||||||
|
b := msg.ToGRPCMessage().(encoding.ProtoMarshaler).MarshalProtobuf(nil)
|
||||||
|
if len(a) == 0 {
|
||||||
|
require.Empty(t, b)
|
||||||
|
} else {
|
||||||
|
require.Equal(t, a, b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compareJSON := func(t *testing.T, msg message.Message) {
|
||||||
|
am, ok := msg.(jsonMessage)
|
||||||
|
if !ok {
|
||||||
|
t.Skip()
|
||||||
|
}
|
||||||
|
|
||||||
|
a, err := am.MarshalJSON()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
b, err := json.Marshal(msg.ToGRPCMessage())
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.JSONEq(t, string(a), string(b))
|
||||||
|
if len(a) == 0 {
|
||||||
|
require.Empty(t, b)
|
||||||
|
} else {
|
||||||
|
require.Equal(t, a, b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.Run("empty", func(t *testing.T) {
|
||||||
|
t.Skip()
|
||||||
|
msg := msgGen(true)
|
||||||
|
t.Run(fmt.Sprintf("Binary_%T", msg), func(t *testing.T) {
|
||||||
|
compareBinary(t, msg)
|
||||||
|
})
|
||||||
|
t.Run(fmt.Sprintf("JSON_%T", msg), func(t *testing.T) {
|
||||||
|
compareJSON(t, msg)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
t.Run("not empty", func(t *testing.T) {
|
||||||
|
msg := msgGen(false)
|
||||||
|
t.Run(fmt.Sprintf("Binary_%T", msg), func(t *testing.T) {
|
||||||
|
compareBinary(t, msg)
|
||||||
|
})
|
||||||
|
t.Run(fmt.Sprintf("JSON_%T", msg), func(t *testing.T) {
|
||||||
|
compareJSON(t, msg)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue