Add tracked vpnruntime implementation for CI guard tests
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package vpnruntime
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNormalizeIPv4PacketChecksumsRepairsTCP(t *testing.T) {
|
||||
packet := []byte{
|
||||
0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x06, 0x12, 0x34, 192, 168, 200, 61, 10, 77, 0, 2,
|
||||
0x46, 0xa0, 0xdd, 0x78, 0, 0, 0, 1, 0, 0, 0, 0, 0x50, 0x12, 0x72, 0x10, 0xab, 0xcd, 0, 0,
|
||||
}
|
||||
if !normalizeIPv4PacketChecksums(packet) {
|
||||
t.Fatal("normalize returned false")
|
||||
}
|
||||
if got := checksum(packet[:20]); got != 0 {
|
||||
t.Fatalf("ip checksum verification = %#x, want 0", got)
|
||||
}
|
||||
tcp := packet[20:]
|
||||
pseudo := make([]byte, 12+len(tcp))
|
||||
copy(pseudo[0:4], packet[12:16])
|
||||
copy(pseudo[4:8], packet[16:20])
|
||||
pseudo[9] = 6
|
||||
binary.BigEndian.PutUint16(pseudo[10:12], uint16(len(tcp)))
|
||||
copy(pseudo[12:], tcp)
|
||||
if got := checksum(pseudo); got != 0 {
|
||||
t.Fatalf("tcp checksum verification = %#x, want 0", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeIPv4PacketChecksumsRepairsUDP(t *testing.T) {
|
||||
packet := []byte{
|
||||
0x45, 0x00, 0x00, 0x20, 0, 0, 0x40, 0, 0x40, 0x11, 0x12, 0x34, 10, 77, 0, 2, 192, 168, 200, 210,
|
||||
0x30, 0x39, 0x00, 0x35, 0x00, 0x0c, 0xab, 0xcd, 0xde, 0xad, 0xbe, 0xef,
|
||||
}
|
||||
if !normalizeIPv4PacketChecksums(packet) {
|
||||
t.Fatal("normalize returned false")
|
||||
}
|
||||
if got := checksum(packet[:20]); got != 0 {
|
||||
t.Fatalf("ip checksum verification = %#x, want 0", got)
|
||||
}
|
||||
udp := packet[20:]
|
||||
pseudo := make([]byte, 12+len(udp))
|
||||
copy(pseudo[0:4], packet[12:16])
|
||||
copy(pseudo[4:8], packet[16:20])
|
||||
pseudo[9] = 17
|
||||
binary.BigEndian.PutUint16(pseudo[10:12], uint16(len(udp)))
|
||||
copy(pseudo[12:], udp)
|
||||
if got := checksum(pseudo); got != 0 {
|
||||
t.Fatalf("udp checksum verification = %#x, want 0", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user