| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | package nebulaimport (	"reflect"	"testing"	"github.com/stretchr/testify/assert")type headerTest struct {	expectedBytes []byte	*Header}// 0001 0010 00010010var 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),	)}
 |