-
Notifications
You must be signed in to change notification settings - Fork 8
/
packet_test.go
90 lines (74 loc) · 2.26 KB
/
packet_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package main
import (
"testing"
"github.com/google/gopacket"
"github.com/google/gopacket/layers"
"github.com/google/gopacket/pcap"
// import layers to run its init function
_ "github.com/google/gopacket/layers"
)
var testDecoders []PayloadDecoder
func init() {
testDecoders = []PayloadDecoder{
&HL7Decoder{},
&DicomDecoder{},
}
for _, decoder := range testDecoders {
if err := decoder.Initialize(); err != nil {
panic("Failed to initialize decoders")
}
}
}
func TestPacketParseSimple(t *testing.T) {
// Read a small pcap file and process the packets using handlePacket. Use the
// statistics generated at the end to check for correctness.
setupLogging(false)
// Initialize objects later used by handlePacket
stats = *NewStats()
apiClient := NewAPIClient("", "", "", 1, false)
assetCSVWriter, err := NewAssetCSVWriter("")
if err != nil {
panic(err)
}
// Read a pcap file
handle, err := pcap.OpenOffline("testdata/HL7-ADT-UDI-PRT.pcap")
if err != nil {
panic(err)
}
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
// Handle each packet from the pcap file
var numPackets uint64
for packet := range packetSource.Packets() {
handlePacket(packet, testDecoders, apiClient, assetCSVWriter, nil)
numPackets++
}
// Check stats
if nPrt16 := stats.Provenances["HL7 PRT-16"]; nPrt16 != 1 {
t.Errorf("Not enough HL7 packets: %d (wanted %d)", nPrt16, 1)
}
if nPkts := stats.TotalPacketCount; nPkts != numPackets {
t.Errorf("Wrong total packet count: %d (wanted %d)", nPkts, numPackets)
}
}
// Create an empty Packet and ignore it
func TestSkipEmptyPacket(t *testing.T) {
var data []byte
pkt := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.Default)
stats = *NewStats()
handlePacket(pkt, testDecoders, nil, nil, nil)
if stats.TotalPacketCount != 1 {
t.Errorf("Wrong number of packets")
}
if len(stats.Identifiers) != 0 {
t.Errorf("Expected to find no identifiers; found %d", len(stats.Identifiers))
}
}
// Create an empty Packet to measure the overhead of ignoring it
func BenchmarkSkipEmptyPacket(b *testing.B) {
var data []byte
pkt := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.Default)
stats = *NewStats()
for i := 0; i < b.N; i++ {
handlePacket(pkt, testDecoders, nil, nil, nil)
}
}