1
0
Fork 0
telegraf/plugins/inputs/sflow/packetdecoder_test.go
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

205 lines
4.6 KiB
Go

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)
}