github.com/gopacket/gopacket@v1.1.0/layers/asf_test.go (about) 1 // Copyright 2019 The GoPacket Authors. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style license that can be found 4 // in the LICENSE file in the root of the source tree. 5 6 package layers 7 8 import ( 9 "bytes" 10 "encoding/hex" 11 "testing" 12 13 "github.com/gopacket/gopacket" 14 ) 15 16 func TestASFDecodeFromBytes(t *testing.T) { 17 b, err := hex.DecodeString("000011be4000001000000000000000") 18 if err != nil { 19 t.Fatalf("Failed to decode ASF message") 20 } 21 22 asf := &ASF{} 23 if err := asf.DecodeFromBytes(b, gopacket.NilDecodeFeedback); err != nil { 24 t.Fatalf("Unexpected error: %v", err) 25 } 26 if !bytes.Equal(asf.BaseLayer.Contents, b[:8]) { 27 t.Errorf("contents is %v, want %v", asf.BaseLayer.Contents, b[:8]) 28 } 29 if !bytes.Equal(asf.BaseLayer.Payload, b[8:]) { 30 t.Errorf("payload is %v, want %v", asf.BaseLayer.Payload, b[8:]) 31 } 32 if asf.Enterprise != ASFRMCPEnterprise { 33 t.Errorf("enterprise is %v, want %v", asf.Enterprise, ASFRMCPEnterprise) 34 } 35 if asf.Type != ASFDataIdentifierPresencePong.Type { 36 t.Errorf("type is %v, want %v", asf.Type, ASFDataIdentifierPresencePong) 37 } 38 if asf.Tag != 0 { 39 t.Errorf("tag is %v, want 0", asf.Tag) 40 } 41 if asf.Length != 16 { 42 t.Errorf("length is %v, want 16", asf.Length) 43 } 44 } 45 46 func serializeASF(asf *ASF) ([]byte, error) { 47 sb := gopacket.NewSerializeBuffer() 48 err := asf.SerializeTo(sb, gopacket.SerializeOptions{ 49 FixLengths: true, 50 }) 51 return sb.Bytes(), err 52 } 53 54 func TestASFSerializeTo(t *testing.T) { 55 table := []struct { 56 layer *ASF 57 want []byte 58 }{ 59 { 60 &ASF{ 61 ASFDataIdentifier: ASFDataIdentifierPresencePing, 62 }, 63 []byte{0, 0, 0x11, 0xbe, 0x80, 0, 0, 0}, 64 }, 65 { 66 &ASF{ 67 ASFDataIdentifier: ASFDataIdentifierPresencePong, 68 // ensures length is being overridden - should be encoded to 0 69 // as there is no payload 70 Length: 1, 71 }, 72 []byte{0, 0, 0x11, 0xbe, 0x40, 0, 0, 0}, 73 }, 74 } 75 for _, test := range table { 76 b, err := serializeASF(test.layer) 77 switch { 78 case err != nil && test.want != nil: 79 t.Errorf("serialize %v failed with %v, wanted %v", test.layer, 80 err, test.want) 81 case err == nil && !bytes.Equal(b, test.want): 82 t.Errorf("serialize %v = %v, want %v", test.layer, b, test.want) 83 } 84 } 85 }