pack_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright 2016 fatedier, fatedier@gmail.com
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package msg
  15. import (
  16. "bytes"
  17. "encoding/binary"
  18. "testing"
  19. "github.com/stretchr/testify/assert"
  20. "github.com/fatedier/frp/utils/errors"
  21. )
  22. type TestStruct struct{}
  23. func TestPack(t *testing.T) {
  24. assert := assert.New(t)
  25. var (
  26. msg Message
  27. buffer []byte
  28. err error
  29. )
  30. // error type
  31. msg = &TestStruct{}
  32. buffer, err = Pack(msg)
  33. assert.Error(err, errors.ErrMsgType.Error())
  34. // correct
  35. msg = &Ping{}
  36. buffer, err = Pack(msg)
  37. assert.NoError(err)
  38. b := bytes.NewBuffer(nil)
  39. b.WriteByte(TypePing)
  40. binary.Write(b, binary.BigEndian, int64(2))
  41. b.WriteString("{}")
  42. assert.True(bytes.Equal(b.Bytes(), buffer))
  43. }
  44. func TestUnPack(t *testing.T) {
  45. assert := assert.New(t)
  46. var (
  47. msg Message
  48. err error
  49. )
  50. // error message type
  51. msg, err = UnPack('-', []byte("{}"))
  52. assert.Error(err)
  53. // correct
  54. msg, err = UnPack(TypePong, []byte("{}"))
  55. assert.NoError(err)
  56. assert.Equal(getTypeFn(msg), getTypeFn((*Pong)(nil)))
  57. }
  58. func TestUnPackInto(t *testing.T) {
  59. assert := assert.New(t)
  60. var err error
  61. // correct type
  62. pongMsg := &Pong{}
  63. err = UnPackInto([]byte("{}"), pongMsg)
  64. assert.NoError(err)
  65. // wrong type
  66. loginMsg := &Login{}
  67. err = UnPackInto([]byte(`{"version": 123}`), loginMsg)
  68. assert.Error(err)
  69. }