Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
205
plugins/inputs/sflow/packetdecoder_test.go
Normal file
205
plugins/inputs/sflow/packetdecoder_test.go
Normal file
|
@ -0,0 +1,205 @@
|
|||
package sflow
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestUDPHeader(t *testing.T) {
|
||||
octets := bytes.NewBuffer([]byte{
|
||||
0x00, 0x01, // src_port
|
||||
0x00, 0x02, // dst_port
|
||||
0x00, 0x03, // udp_length
|
||||
0x00, 0x00, // checksum
|
||||
})
|
||||
|
||||
actual, err := decodeUDPHeader(octets)
|
||||
require.NoError(t, err)
|
||||
|
||||
expected := udpHeader{
|
||||
sourcePort: 1,
|
||||
destinationPort: 2,
|
||||
udpLength: 3,
|
||||
}
|
||||
|
||||
require.Equal(t, expected, actual)
|
||||
}
|
||||
|
||||
func BenchmarkUDPHeader(b *testing.B) {
|
||||
octets := bytes.NewBuffer([]byte{
|
||||
0x00, 0x01, // src_port
|
||||
0x00, 0x02, // dst_port
|
||||
0x00, 0x03, // udp_length
|
||||
0x00, 0x00, // checksum
|
||||
})
|
||||
|
||||
b.ResetTimer()
|
||||
for n := 0; n < b.N; n++ {
|
||||
_, err := decodeUDPHeader(octets)
|
||||
require.NoError(b, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestIPv4Header(t *testing.T) {
|
||||
octets := bytes.NewBuffer(
|
||||
[]byte{
|
||||
0x45, // version + IHL
|
||||
0x00, // ip_dscp + ip_ecn
|
||||
0x00, 0x00, // total length
|
||||
0x00, 0x00, // identification
|
||||
0x00, 0x00, // flags + frag offset
|
||||
0x00, // ttl
|
||||
0x11, // protocol udp (0x11)
|
||||
0x00, 0x00, // header checksum
|
||||
0x7f, 0x00, 0x00, 0x01, // src ip
|
||||
0x7f, 0x00, 0x00, 0x02, // dst ip
|
||||
0x00, 0x01, // src_port
|
||||
0x00, 0x02, // dst_port
|
||||
0x00, 0x03, // udp_length
|
||||
0x00, 0x00, // checksum
|
||||
},
|
||||
)
|
||||
dc := newDecoder()
|
||||
actual, err := dc.decodeIPv4Header(octets)
|
||||
require.NoError(t, err)
|
||||
|
||||
expected := ipV4Header{
|
||||
version: 0x40,
|
||||
internetHeaderLength: 0x05,
|
||||
dscp: 0,
|
||||
ecn: 0,
|
||||
totalLength: 0,
|
||||
identification: 0,
|
||||
flags: 0,
|
||||
fragmentOffset: 0,
|
||||
ttl: 0,
|
||||
protocol: 0x11,
|
||||
headerChecksum: 0,
|
||||
sourceIP: [4]byte{127, 0, 0, 1},
|
||||
destIP: [4]byte{127, 0, 0, 2},
|
||||
protocolHeader: udpHeader{
|
||||
sourcePort: 1,
|
||||
destinationPort: 2,
|
||||
udpLength: 3,
|
||||
checksum: 0,
|
||||
},
|
||||
}
|
||||
|
||||
require.Equal(t, expected, actual)
|
||||
}
|
||||
|
||||
// Using the same Directive instance, prior paths through the parse tree should
|
||||
// not affect the latest parse.
|
||||
func TestIPv4HeaderSwitch(t *testing.T) {
|
||||
octets := bytes.NewBuffer(
|
||||
[]byte{
|
||||
0x45, // version + IHL
|
||||
0x00, // ip_dscp + ip_ecn
|
||||
0x00, 0x00, // total length
|
||||
0x00, 0x00, // identification
|
||||
0x00, 0x00, // flags + frag offset
|
||||
0x00, // ttl
|
||||
0x11, // protocol udp (0x11)
|
||||
0x00, 0x00, // header checksum
|
||||
0x7f, 0x00, 0x00, 0x01, // src ip
|
||||
0x7f, 0x00, 0x00, 0x02, // dst ip
|
||||
0x00, 0x01, // src_port
|
||||
0x00, 0x02, // dst_port
|
||||
0x00, 0x03, // udp_length
|
||||
0x00, 0x00, // checksum
|
||||
},
|
||||
)
|
||||
dc := newDecoder()
|
||||
_, err := dc.decodeIPv4Header(octets)
|
||||
require.NoError(t, err)
|
||||
|
||||
octets = bytes.NewBuffer(
|
||||
[]byte{
|
||||
0x45, // version + IHL
|
||||
0x00, // ip_dscp + ip_ecn
|
||||
0x00, 0x00, // total length
|
||||
0x00, 0x00, // identification
|
||||
0x00, 0x00, // flags + frag offset
|
||||
0x00, // ttl
|
||||
0x06, // protocol tcp (0x06)
|
||||
0x00, 0x00, // header checksum
|
||||
0x7f, 0x00, 0x00, 0x01, // src ip
|
||||
0x7f, 0x00, 0x00, 0x02, // dst ip
|
||||
0x00, 0x01, // src_port
|
||||
0x00, 0x02, // dst_port
|
||||
0x00, 0x00, 0x00, 0x00, // sequence
|
||||
0x00, 0x00, 0x00, 0x00, // ack_number
|
||||
0x00, 0x00, // tcp_header_length
|
||||
0x00, 0x00, // tcp_window_size
|
||||
0x00, 0x00, // checksum
|
||||
0x00, 0x00, // tcp_urgent_pointer
|
||||
},
|
||||
)
|
||||
dc = newDecoder()
|
||||
actual, err := dc.decodeIPv4Header(octets)
|
||||
require.NoError(t, err)
|
||||
|
||||
expected := ipV4Header{
|
||||
version: 64,
|
||||
internetHeaderLength: 5,
|
||||
protocol: 6,
|
||||
sourceIP: [4]byte{127, 0, 0, 1},
|
||||
destIP: [4]byte{127, 0, 0, 2},
|
||||
protocolHeader: tcpHeader{
|
||||
sourcePort: 1,
|
||||
destinationPort: 2,
|
||||
},
|
||||
}
|
||||
|
||||
require.Equal(t, expected, actual)
|
||||
}
|
||||
|
||||
func TestUnknownProtocol(t *testing.T) {
|
||||
octets := bytes.NewBuffer(
|
||||
[]byte{
|
||||
0x45, // version + IHL
|
||||
0x00, // ip_dscp + ip_ecn
|
||||
0x00, 0x00, // total length
|
||||
0x00, 0x00, // identification
|
||||
0x00, 0x00, // flags + frag offset
|
||||
0x00, // ttl
|
||||
0x99, // protocol
|
||||
0x00, 0x00, // header checksum
|
||||
0x7f, 0x00, 0x00, 0x01, // src ip
|
||||
0x7f, 0x00, 0x00, 0x02, // dst ip
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
},
|
||||
)
|
||||
dc := newDecoder()
|
||||
actual, err := dc.decodeIPv4Header(octets)
|
||||
require.NoError(t, err)
|
||||
|
||||
expected := ipV4Header{
|
||||
version: 64,
|
||||
internetHeaderLength: 5,
|
||||
protocol: 153,
|
||||
sourceIP: [4]byte{127, 0, 0, 1},
|
||||
destIP: [4]byte{127, 0, 0, 2},
|
||||
}
|
||||
|
||||
require.Equal(t, expected, actual)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue