mirror of
https://github.com/fosrl/olm.git
synced 2026-02-07 21:46:40 +00:00
103 lines
2.0 KiB
Go
103 lines
2.0 KiB
Go
package device
|
|
|
|
import (
|
|
"net/netip"
|
|
"testing"
|
|
|
|
"github.com/fosrl/newt/util"
|
|
)
|
|
|
|
func TestExtractDestIP(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
packet []byte
|
|
wantIP string
|
|
wantOk bool
|
|
}{
|
|
{
|
|
name: "IPv4 packet",
|
|
packet: []byte{
|
|
0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00,
|
|
0x40, 0x11, 0x00, 0x00, 0xc0, 0xa8, 0x01, 0x01,
|
|
0x0a, 0x1e, 0x1e, 0x1e, // Dest IP: 10.30.30.30
|
|
},
|
|
wantIP: "10.30.30.30",
|
|
wantOk: true,
|
|
},
|
|
{
|
|
name: "Too short packet",
|
|
packet: []byte{0x45, 0x00},
|
|
wantIP: "",
|
|
wantOk: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotIP, gotOk := extractDestIP(tt.packet)
|
|
if gotOk != tt.wantOk {
|
|
t.Errorf("extractDestIP() ok = %v, want %v", gotOk, tt.wantOk)
|
|
return
|
|
}
|
|
if tt.wantOk {
|
|
wantAddr := netip.MustParseAddr(tt.wantIP)
|
|
if gotIP != wantAddr {
|
|
t.Errorf("extractDestIP() ip = %v, want %v", gotIP, wantAddr)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetProtocol(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
packet []byte
|
|
wantProto uint8
|
|
wantOk bool
|
|
}{
|
|
{
|
|
name: "UDP packet",
|
|
packet: []byte{
|
|
0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00,
|
|
0x40, 0x11, 0x00, 0x00, 0xc0, 0xa8, 0x01, 0x01, // Protocol: UDP (17) at byte 9
|
|
0x0a, 0x1e, 0x1e, 0x1e,
|
|
},
|
|
wantProto: 17,
|
|
wantOk: true,
|
|
},
|
|
{
|
|
name: "Too short",
|
|
packet: []byte{0x45, 0x00},
|
|
wantProto: 0,
|
|
wantOk: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotProto, gotOk := util.GetProtocol(tt.packet)
|
|
if gotOk != tt.wantOk {
|
|
t.Errorf("GetProtocol() ok = %v, want %v", gotOk, tt.wantOk)
|
|
return
|
|
}
|
|
if gotProto != tt.wantProto {
|
|
t.Errorf("GetProtocol() proto = %v, want %v", gotProto, tt.wantProto)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkExtractDestIP(b *testing.B) {
|
|
packet := []byte{
|
|
0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00,
|
|
0x40, 0x11, 0x00, 0x00, 0xc0, 0xa8, 0x01, 0x01,
|
|
0x0a, 0x1e, 0x1e, 0x1e,
|
|
}
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
extractDestIP(packet)
|
|
}
|
|
}
|