3
0

header_test.go 3.0 KB

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