github.com/gopacket/gopacket@v1.1.0/pcapgo/write_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  
     7  package pcapgo
     8  
     9  import (
    10  	"bytes"
    11  	"testing"
    12  	"time"
    13  
    14  	"github.com/gopacket/gopacket"
    15  )
    16  
    17  func TestWriteHeaderNanos(t *testing.T) {
    18  	var buf bytes.Buffer
    19  	w := NewWriterNanos(&buf)
    20  	w.WriteFileHeader(0x1234, 0x56)
    21  	want := []byte{
    22  		0x4d, 0x3c, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
    23  		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    24  		0x34, 0x12, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
    25  	}
    26  	if got := buf.Bytes(); !bytes.Equal(got, want) {
    27  		t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, got)
    28  	}
    29  }
    30  
    31  func TestWriteHeader(t *testing.T) {
    32  	var buf bytes.Buffer
    33  	w := NewWriter(&buf)
    34  	w.WriteFileHeader(0x1234, 0x56)
    35  	want := []byte{
    36  		0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
    37  		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    38  		0x34, 0x12, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
    39  	}
    40  	if got := buf.Bytes(); !bytes.Equal(got, want) {
    41  		t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, got)
    42  	}
    43  }
    44  
    45  func TestWritePacket(t *testing.T) {
    46  	ci := gopacket.CaptureInfo{
    47  		Timestamp:     time.Unix(0x01020304, 0xAA*1000),
    48  		Length:        0xABCD,
    49  		CaptureLength: 10,
    50  	}
    51  	data := []byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
    52  	var buf bytes.Buffer
    53  	w := NewWriter(&buf)
    54  	w.WritePacket(ci, data)
    55  	want := []byte{
    56  		0x04, 0x03, 0x02, 0x01, 0xAA, 0x00, 0x00, 0x00,
    57  		0x0A, 0x00, 0x00, 0x00, 0xCD, 0xAB, 0x00, 0x00,
    58  		0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
    59  	}
    60  	if got := buf.Bytes(); !bytes.Equal(got, want) {
    61  		t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, got)
    62  	}
    63  }
    64  
    65  func BenchmarkWritePacket(b *testing.B) {
    66  	b.StopTimer()
    67  	ci := gopacket.CaptureInfo{
    68  		Timestamp:     time.Unix(0x01020304, 0xAA*1000),
    69  		Length:        0xABCD,
    70  		CaptureLength: 10,
    71  	}
    72  	data := []byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
    73  	var buf bytes.Buffer
    74  	w := NewWriter(&buf)
    75  	b.StartTimer()
    76  
    77  	for i := 0; i < b.N; i++ {
    78  		w.WritePacket(ci, data)
    79  	}
    80  }
    81  
    82  func TestCaptureInfoErrors(t *testing.T) {
    83  	data := []byte{1, 2, 3, 4}
    84  	ts := time.Unix(0, 0)
    85  	for _, test := range []gopacket.CaptureInfo{
    86  		gopacket.CaptureInfo{
    87  			Timestamp:     ts,
    88  			Length:        5,
    89  			CaptureLength: 5,
    90  		},
    91  		gopacket.CaptureInfo{
    92  			Timestamp:     ts,
    93  			Length:        3,
    94  			CaptureLength: 4,
    95  		},
    96  	} {
    97  		var buf bytes.Buffer
    98  		w := NewWriter(&buf)
    99  		if err := w.WritePacket(test, data); err == nil {
   100  			t.Errorf("CaptureInfo %+v should have error", test)
   101  		}
   102  	}
   103  }