package meta_test import ( "bytes" "encoding/hex" "testing" "git.bit5.ru/backend/meta/v4" "github.com/stretchr/testify/require" ) func TestMsgpackReader(t *testing.T) { t.Run("reading struct as map", func(t *testing.T) { // {"f1":"blabla","f3":[2,4,6],"f2":{"field":1},"f4":[{"field":10},{"field":1024}]} src := "84a26631a6626c61626c61a2663393020406a2663281a56669656c6401a266349281a56669656c640a81a56669656c64cd0400" expected := TestParent{ Field1: "blabla", Field2: TestFoo{ Field: 1, }, Field3: []int8{2, 4, 6}, Field4: []TestFoo{ {Field: 10}, {Field: 1024}, }, } data, err := hex.DecodeString(src) require.NoError(t, err) rdr := meta.NewMsgpackReader(bytes.NewReader(data)) var actual TestParent readErr := actual.Read(rdr) require.NoError(t, readErr) require.EqualValues(t, expected, actual) }) t.Run("reading struct as array with maps", func(t *testing.T) { // ["blabla",{"field":1},[2,4,6],[{"field":10},{"field":1024}]] src := "94a6626c61626c6181a56669656c6401930204069281a56669656c640a81a56669656c64cd0400" expected := TestParent{ Field1: "blabla", Field2: TestFoo{ Field: 1, }, Field3: []int8{2, 4, 6}, Field4: []TestFoo{ {Field: 10}, {Field: 1024}, }, } data, err := hex.DecodeString(src) require.NoError(t, err) rdr := meta.NewMsgpackReader(bytes.NewReader(data)) var actual TestParent readErr := actual.Read(rdr) require.NoError(t, readErr) require.EqualValues(t, expected, actual) }) t.Run("reading struct only as array", func(t *testing.T) { // ["blabla",[1],[2,4,6],[[10],[1024]]] src := "94a6626c61626c6191019302040692910a91cd0400" expected := TestParent{ Field1: "blabla", Field2: TestFoo{ Field: 1, }, Field3: []int8{2, 4, 6}, Field4: []TestFoo{ {Field: 10}, {Field: 1024}, }, } data, err := hex.DecodeString(src) require.NoError(t, err) rdr := meta.NewMsgpackReader(bytes.NewReader(data)) var actual TestParent readErr := actual.Read(rdr) require.NoError(t, readErr) require.EqualValues(t, expected, actual) }) t.Run("reading child struct as map", func(t *testing.T) { // {"f":"qwerty","f1":"blabla","f3":[2,4,6],"f2":{"field":1},"f4":[{"field":10},{"field":1024}]} src := "85a166a6717765727479a26631a6626c61626c61a2663393020406a2663281a56669656c6401a266349281a56669656c640a81a56669656c64cd0400" expected := TestChild{ Field: "qwerty", TestParent: TestParent{ Field1: "blabla", Field2: TestFoo{ Field: 1, }, Field3: []int8{2, 4, 6}, Field4: []TestFoo{ {Field: 10}, {Field: 1024}, }, }, } data, err := hex.DecodeString(src) require.NoError(t, err) rdr := meta.NewMsgpackReader(bytes.NewReader(data)) var actual TestChild readErr := actual.Read(rdr) require.NoError(t, readErr) require.EqualValues(t, expected, actual) }) t.Run("reading child struct as array", func(t *testing.T) { // ["blabla",[1],[2,4,6],[[10],[1024]],"qwerty"] src := "95a6626c61626c6191019302040692910a91cd0400a6717765727479" expected := TestChild{ Field: "qwerty", TestParent: TestParent{ Field1: "blabla", Field2: TestFoo{ Field: 1, }, Field3: []int8{2, 4, 6}, Field4: []TestFoo{ {Field: 10}, {Field: 1024}, }, }, } data, err := hex.DecodeString(src) require.NoError(t, err) rdr := meta.NewMsgpackReader(bytes.NewReader(data)) var actual TestChild readErr := actual.Read(rdr) require.NoError(t, readErr) require.EqualValues(t, expected, actual) }) }