github.com/gopacket/gopacket@v1.1.0/layers/dot1q_test.go (about) 1 // Copyright 2012 Google, Inc. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the LICENSE file in the root of the source 5 // tree. 6 package layers 7 8 import ( 9 "fmt" 10 "reflect" 11 "testing" 12 13 "github.com/gopacket/gopacket" 14 ) 15 16 // test harness to ensure the dot1q layer can be encoded/decoded properly 17 // return error if decoded data not match. 18 func testEncodeDecodeDot1Q(dot1Q *Dot1Q) error { 19 buf := gopacket.NewSerializeBuffer() 20 opts := gopacket.SerializeOptions{} 21 expectedDot1Q := dot1Q 22 23 err := dot1Q.SerializeTo(buf, opts) 24 if err != nil { 25 return err 26 } 27 28 newDot1q := &Dot1Q{} 29 err = newDot1q.DecodeFromBytes(buf.Bytes(), gopacket.NilDecodeFeedback) 30 if err != nil { 31 return err 32 } 33 newDot1q.BaseLayer = BaseLayer{} 34 35 if !reflect.DeepEqual(expectedDot1Q, newDot1q) { 36 return fmt.Errorf("Expect %v actual %v", expectedDot1Q, newDot1q) 37 } 38 return nil 39 40 } 41 42 // Test to ensure what has been encode can be decoded 43 func TestEncodeDecodeDot1Q(t *testing.T) { 44 dot1Qs := []*Dot1Q{ 45 &Dot1Q{ 46 Priority: uint8(3), 47 VLANIdentifier: uint16(30), 48 }, 49 &Dot1Q{ 50 Priority: uint8(0x07), 51 DropEligible: true, 52 VLANIdentifier: uint16(0xFFF), 53 }, 54 } 55 56 for i, curTest := range dot1Qs { 57 err := testEncodeDecodeDot1Q(curTest) 58 if err != nil { 59 t.Error("Error with item ", i, " with error message :", err) 60 } 61 } 62 }