123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package nebula
- import (
- "github.com/stretchr/testify/assert"
- "reflect"
- "testing"
- )
- type headerTest struct {
- expectedBytes []byte
- *Header
- }
- // 0001 0010 00010010
- var headerBigEndianTests = []headerTest{{
- expectedBytes: []byte{0x54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9},
- // 1010 0000
- Header: &Header{
- // 1111 1+2+4+8 = 15
- Version: 5,
- Type: 4,
- Subtype: 0,
- Reserved: 0,
- RemoteIndex: 10,
- MessageCounter: 9,
- },
- },
- }
- func TestEncode(t *testing.T) {
- for _, tt := range headerBigEndianTests {
- b, err := tt.Encode(make([]byte, HeaderLen))
- if err != nil {
- t.Fatal(err)
- }
- assert.Equal(t, tt.expectedBytes, b)
- }
- }
- func TestParse(t *testing.T) {
- for _, tt := range headerBigEndianTests {
- b := tt.expectedBytes
- parsedHeader := &Header{}
- parsedHeader.Parse(b)
- if !reflect.DeepEqual(tt.Header, parsedHeader) {
- t.Fatalf("got %#v; want %#v", parsedHeader, tt.Header)
- }
- }
- }
- func TestTypeName(t *testing.T) {
- assert.Equal(t, "test", TypeName(test))
- assert.Equal(t, "test", (&Header{Type: test}).TypeName())
- assert.Equal(t, "unknown", TypeName(99))
- assert.Equal(t, "unknown", (&Header{Type: 99}).TypeName())
- }
- func TestSubTypeName(t *testing.T) {
- assert.Equal(t, "testRequest", SubTypeName(test, testRequest))
- assert.Equal(t, "testRequest", (&Header{Type: test, Subtype: testRequest}).SubTypeName())
- assert.Equal(t, "unknown", SubTypeName(99, testRequest))
- assert.Equal(t, "unknown", (&Header{Type: 99, Subtype: testRequest}).SubTypeName())
- assert.Equal(t, "unknown", SubTypeName(test, 99))
- assert.Equal(t, "unknown", (&Header{Type: test, Subtype: 99}).SubTypeName())
- assert.Equal(t, "none", SubTypeName(message, 0))
- assert.Equal(t, "none", (&Header{Type: message, Subtype: 0}).SubTypeName())
- }
- func TestTypeMap(t *testing.T) {
- // Force people to document this stuff
- assert.Equal(t, map[NebulaMessageType]string{
- handshake: "handshake",
- message: "message",
- recvError: "recvError",
- lightHouse: "lightHouse",
- test: "test",
- closeTunnel: "closeTunnel",
- testRemote: "testRemote",
- testRemoteReply: "testRemoteReply",
- }, typeMap)
- assert.Equal(t, map[NebulaMessageType]*map[NebulaMessageSubType]string{
- message: &subTypeNoneMap,
- recvError: &subTypeNoneMap,
- lightHouse: &subTypeNoneMap,
- test: &subTypeTestMap,
- closeTunnel: &subTypeNoneMap,
- handshake: {
- handshakeIXPSK0: "ix_psk0",
- },
- testRemote: &subTypeNoneMap,
- testRemoteReply: &subTypeNoneMap,
- }, subTypeMap)
- }
- func TestHeader_String(t *testing.T) {
- assert.Equal(
- t,
- "ver=100 type=test subtype=testRequest reserved=0x63 remoteindex=98 messagecounter=97",
- (&Header{100, test, testRequest, 99, 98, 97}).String(),
- )
- }
- func TestHeader_MarshalJSON(t *testing.T) {
- b, err := (&Header{100, test, testRequest, 99, 98, 97}).MarshalJSON()
- assert.Nil(t, err)
- assert.Equal(
- t,
- "{\"messageCounter\":97,\"remoteIndex\":98,\"reserved\":99,\"subType\":\"testRequest\",\"type\":\"test\",\"version\":100}",
- string(b),
- )
- }
|