3
0

header_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package header
  2. import (
  3. "reflect"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/stretchr/testify/require"
  7. )
  8. type headerTest struct {
  9. expectedBytes []byte
  10. *H
  11. }
  12. // 0001 0010 00010010
  13. var headerBigEndianTests = []headerTest{{
  14. expectedBytes: []byte{0x54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9},
  15. // 1010 0000
  16. H: &H{
  17. // 1111 1+2+4+8 = 15
  18. Version: 5,
  19. Type: 4,
  20. Subtype: 0,
  21. Reserved: 0,
  22. RemoteIndex: 10,
  23. MessageCounter: 9,
  24. },
  25. },
  26. }
  27. func TestEncode(t *testing.T) {
  28. for _, tt := range headerBigEndianTests {
  29. b, err := tt.Encode(make([]byte, Len))
  30. if err != nil {
  31. t.Fatal(err)
  32. }
  33. assert.Equal(t, tt.expectedBytes, b)
  34. }
  35. }
  36. func TestParse(t *testing.T) {
  37. for _, tt := range headerBigEndianTests {
  38. b := tt.expectedBytes
  39. parsedHeader := &H{}
  40. parsedHeader.Parse(b)
  41. if !reflect.DeepEqual(tt.H, parsedHeader) {
  42. t.Fatalf("got %#v; want %#v", parsedHeader, tt.H)
  43. }
  44. }
  45. }
  46. func TestTypeName(t *testing.T) {
  47. assert.Equal(t, "test", TypeName(Test))
  48. assert.Equal(t, "test", (&H{Type: Test}).TypeName())
  49. assert.Equal(t, "unknown", TypeName(99))
  50. assert.Equal(t, "unknown", (&H{Type: 99}).TypeName())
  51. }
  52. func TestSubTypeName(t *testing.T) {
  53. assert.Equal(t, "testRequest", SubTypeName(Test, TestRequest))
  54. assert.Equal(t, "testRequest", (&H{Type: Test, Subtype: TestRequest}).SubTypeName())
  55. assert.Equal(t, "unknown", SubTypeName(99, TestRequest))
  56. assert.Equal(t, "unknown", (&H{Type: 99, Subtype: TestRequest}).SubTypeName())
  57. assert.Equal(t, "unknown", SubTypeName(Test, 99))
  58. assert.Equal(t, "unknown", (&H{Type: Test, Subtype: 99}).SubTypeName())
  59. assert.Equal(t, "none", SubTypeName(Message, 0))
  60. assert.Equal(t, "none", (&H{Type: Message, Subtype: 0}).SubTypeName())
  61. }
  62. func TestTypeMap(t *testing.T) {
  63. // Force people to document this stuff
  64. assert.Equal(t, map[MessageType]string{
  65. Handshake: "handshake",
  66. Message: "message",
  67. RecvError: "recvError",
  68. LightHouse: "lightHouse",
  69. Test: "test",
  70. CloseTunnel: "closeTunnel",
  71. Control: "control",
  72. }, typeMap)
  73. assert.Equal(t, map[MessageType]*map[MessageSubType]string{
  74. Message: {
  75. MessageNone: "none",
  76. MessageRelay: "relay",
  77. },
  78. RecvError: &subTypeNoneMap,
  79. LightHouse: &subTypeNoneMap,
  80. Test: &subTypeTestMap,
  81. CloseTunnel: &subTypeNoneMap,
  82. Handshake: {
  83. HandshakeIXPSK0: "ix_psk0",
  84. },
  85. Control: &subTypeNoneMap,
  86. }, subTypeMap)
  87. }
  88. func TestHeader_String(t *testing.T) {
  89. assert.Equal(
  90. t,
  91. "ver=100 type=test subtype=testRequest reserved=0x63 remoteindex=98 messagecounter=97",
  92. (&H{100, Test, TestRequest, 99, 98, 97}).String(),
  93. )
  94. }
  95. func TestHeader_MarshalJSON(t *testing.T) {
  96. b, err := (&H{100, Test, TestRequest, 99, 98, 97}).MarshalJSON()
  97. require.NoError(t, err)
  98. assert.Equal(
  99. t,
  100. "{\"messageCounter\":97,\"remoteIndex\":98,\"reserved\":99,\"subType\":\"testRequest\",\"type\":\"test\",\"version\":100}",
  101. string(b),
  102. )
  103. }