github.com/gopacket/gopacket@v1.1.0/defrag/lcmdefrag/lcmdefrag_test.go (about)

     1  // Copyright 2018 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  
     7  package lcmdefrag
     8  
     9  import (
    10  	"testing"
    11  
    12  	"github.com/gopacket/gopacket"
    13  	"github.com/gopacket/gopacket/layers"
    14  )
    15  
    16  var (
    17  	fragmentOne = []byte{
    18  		0x4c, 0x43, 0x30, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d,
    19  		0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x4c, 0x43, 0x4d, 0x5f,
    20  		0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,
    21  		0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,
    22  	}
    23  
    24  	fragmentTwo = []byte{
    25  		0x4c, 0x43, 0x30, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d,
    26  		0x00, 0x00, 0x00, 0x2d, 0x00, 0x01, 0x00, 0x02, 0x6c, 0x63, 0x6d, 0x20,
    27  		0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,
    28  	}
    29  
    30  	completePacket = []byte{
    31  		0x4c, 0x43, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x43, 0x4d, 0x5f,
    32  		0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,
    33  		0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,
    34  	}
    35  )
    36  
    37  func TestOrderedLCMDefrag(t *testing.T) {
    38  	defragmenter := NewLCMDefragmenter()
    39  	var err error
    40  
    41  	packet := gopacket.NewPacket(fragmentOne, layers.LayerTypeLCM, gopacket.NoCopy)
    42  	lcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
    43  
    44  	lcm, err = defragmenter.Defrag(lcm)
    45  	if lcm != nil {
    46  		t.Fatal("Returned incomplete LCM message.")
    47  	}
    48  	if err != nil {
    49  		t.Fatal(err)
    50  	}
    51  
    52  	packet = gopacket.NewPacket(fragmentTwo, layers.LayerTypeLCM, gopacket.NoCopy)
    53  	lcm = packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
    54  
    55  	lcm, err = defragmenter.Defrag(lcm)
    56  	if lcm == nil {
    57  		t.Fatal("Did not receive defragmented LCM message.")
    58  	}
    59  	if err != nil {
    60  		t.Fatal(err)
    61  	}
    62  }
    63  
    64  func TestUnorderedLCMDefrag(t *testing.T) {
    65  	defragmenter := NewLCMDefragmenter()
    66  	var err error
    67  
    68  	packet := gopacket.NewPacket(fragmentTwo, layers.LayerTypeLCM, gopacket.NoCopy)
    69  	lcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
    70  
    71  	lcm, err = defragmenter.Defrag(lcm)
    72  	if lcm != nil {
    73  		t.Fatal("Returned incomplete LCM message.")
    74  	}
    75  	if err != nil {
    76  		t.Fatal(err)
    77  	}
    78  
    79  	packet = gopacket.NewPacket(fragmentOne, layers.LayerTypeLCM, gopacket.NoCopy)
    80  	lcm = packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
    81  
    82  	lcm, err = defragmenter.Defrag(lcm)
    83  	if lcm == nil {
    84  		t.Fatal("Did not receive defragmented LCM message.")
    85  	}
    86  	if err != nil {
    87  		t.Fatal(err)
    88  	}
    89  }
    90  
    91  func TestNonLCMDefrag(t *testing.T) {
    92  	defragmenter := NewLCMDefragmenter()
    93  	var err error
    94  
    95  	packet := gopacket.NewPacket(completePacket, layers.LayerTypeLCM, gopacket.NoCopy)
    96  	lcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
    97  
    98  	lcm, err = defragmenter.Defrag(lcm)
    99  	if lcm == nil {
   100  		t.Fatal("Did not receive complete LCM message.")
   101  	}
   102  	if err != nil {
   103  		t.Fatal(err)
   104  	}
   105  }