process_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. "encoding/json"
  19. "fmt"
  20. "net"
  21. "reflect"
  22. "testing"
  23. "github.com/stretchr/testify/assert"
  24. )
  25. func TestProcess(t *testing.T) {
  26. assert := assert.New(t)
  27. var (
  28. msg Message
  29. resMsg Message
  30. err error
  31. )
  32. // empty struct
  33. msg = &Ping{}
  34. buffer := bytes.NewBuffer(nil)
  35. err = WriteMsg(buffer, msg)
  36. assert.NoError(err)
  37. resMsg, err = ReadMsg(buffer)
  38. assert.NoError(err)
  39. assert.Equal(reflect.TypeOf(resMsg).Elem(), TypeMap[TypePing])
  40. // normal message
  41. msg = &StartWorkConn{
  42. ProxyName: "test",
  43. }
  44. buffer = bytes.NewBuffer(nil)
  45. err = WriteMsg(buffer, msg)
  46. assert.NoError(err)
  47. resMsg, err = ReadMsg(buffer)
  48. assert.NoError(err)
  49. assert.Equal(reflect.TypeOf(resMsg).Elem(), TypeMap[TypeStartWorkConn])
  50. startWorkConnMsg, ok := resMsg.(*StartWorkConn)
  51. assert.True(ok)
  52. assert.Equal("test", startWorkConnMsg.ProxyName)
  53. // ReadMsgInto correct
  54. msg = &Pong{}
  55. buffer = bytes.NewBuffer(nil)
  56. err = WriteMsg(buffer, msg)
  57. assert.NoError(err)
  58. err = ReadMsgInto(buffer, msg)
  59. assert.NoError(err)
  60. // ReadMsgInto error type
  61. content := []byte(`{"run_id": 123}`)
  62. buffer = bytes.NewBuffer(nil)
  63. buffer.WriteByte(TypeNewWorkConn)
  64. binary.Write(buffer, binary.BigEndian, int64(len(content)))
  65. buffer.Write(content)
  66. resMsg = &NewWorkConn{}
  67. err = ReadMsgInto(buffer, resMsg)
  68. assert.Error(err)
  69. // message format error
  70. buffer = bytes.NewBuffer([]byte("1234"))
  71. resMsg = &NewProxyResp{}
  72. err = ReadMsgInto(buffer, resMsg)
  73. assert.Error(err)
  74. // MaxLength, real message length is 2
  75. MaxMsgLength = 1
  76. msg = &Ping{}
  77. buffer = bytes.NewBuffer(nil)
  78. err = WriteMsg(buffer, msg)
  79. assert.NoError(err)
  80. _, err = ReadMsg(buffer)
  81. assert.Error(err)
  82. return
  83. }