58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
// Copyright 2020 Gin Core Team. All rights reserved.
|
|
// Use of this source code is governed by a MIT style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build !nomsgpack
|
|
|
|
package binding
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/ugorji/go/codec"
|
|
)
|
|
|
|
func TestBindingMsgPack(t *testing.T) {
|
|
test := FooStruct{
|
|
Foo: "bar",
|
|
}
|
|
|
|
h := new(codec.MsgpackHandle)
|
|
assert.NotNil(t, h)
|
|
buf := bytes.NewBuffer([]byte{})
|
|
assert.NotNil(t, buf)
|
|
err := codec.NewEncoder(buf, h).Encode(test)
|
|
assert.NoError(t, err)
|
|
|
|
data := buf.Bytes()
|
|
|
|
testMsgPackBodyBinding(t,
|
|
MsgPack, "msgpack",
|
|
"/", "/",
|
|
string(data), string(data[1:]))
|
|
}
|
|
|
|
func testMsgPackBodyBinding(t *testing.T, b Binding, name, path, badPath, body, badBody string) {
|
|
assert.Equal(t, name, b.Name())
|
|
|
|
obj := FooStruct{}
|
|
req := requestWithBody("POST", path, body)
|
|
req.Header.Add("Content-Type", MIMEMSGPACK)
|
|
err := b.Bind(req, &obj)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "bar", obj.Foo)
|
|
|
|
obj = FooStruct{}
|
|
req = requestWithBody("POST", badPath, badBody)
|
|
req.Header.Add("Content-Type", MIMEMSGPACK)
|
|
err = MsgPack.Bind(req, &obj)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestBindingDefaultMsgPack(t *testing.T) {
|
|
assert.Equal(t, MsgPack, Default("POST", MIMEMSGPACK))
|
|
assert.Equal(t, MsgPack, Default("PUT", MIMEMSGPACK2))
|
|
}
|