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  }