Files
elmprodvpn/selective-vpn-api/app/transport_policy_apply_kernel_conntrack_test.go

63 lines
1.9 KiB
Go

package app
import "testing"
func TestParseTransportConntrackLockLine(t *testing.T) {
line := "tcp 6 431999 ESTABLISHED src=10.0.0.2 dst=10.1.0.11 sport=12345 dport=443 src=10.1.0.11 dst=10.0.0.2 sport=443 dport=12345 [ASSURED] mark=0x120 use=1"
dst, mark, proto, ok := parseTransportConntrackLockLine(line)
if !ok {
t.Fatalf("expected line to parse")
}
if dst.String() != "10.1.0.11" {
t.Fatalf("unexpected dst: %s", dst.String())
}
if mark != 0x120 {
t.Fatalf("unexpected mark: %#x", mark)
}
if proto != "tcp" {
t.Fatalf("unexpected proto: %s", proto)
}
}
func TestParseTransportOwnerLocksFromConntrack(t *testing.T) {
raw := "" +
"tcp 6 431999 ESTABLISHED src=10.0.0.2 dst=10.1.0.11 sport=1 dport=2 mark=0x120 use=1\n" +
"udp 17 60 src=10.0.0.2 dst=10.1.0.12 sport=1 dport=2 mark=288 use=1\n" +
"udp 17 60 src=10.0.0.2 dst=10.9.0.12 sport=1 dport=2 mark=0x222 use=1\n"
markOwner := map[uint32]transportPolicyMarkOwner{
0x120: {
ClientID: "c1",
ClientKind: "singbox",
IfaceID: "edge-a",
MarkHex: "0x120",
},
}
st := parseTransportOwnerLocksFromConntrack(raw, markOwner, 13)
if st.PolicyRevision != 13 {
t.Fatalf("unexpected revision: %d", st.PolicyRevision)
}
if len(st.Items) != 2 {
t.Fatalf("expected 2 locks, got %d (%#v)", len(st.Items), st.Items)
}
for _, item := range st.Items {
if item.ClientID != "c1" {
t.Fatalf("unexpected client id: %q", item.ClientID)
}
if item.MarkHex != "0x120" {
t.Fatalf("unexpected mark hex: %q", item.MarkHex)
}
}
}
func TestParseTransportConntrackMark(t *testing.T) {
if v, ok := parseTransportConntrackMark("0x120"); !ok || v != 0x120 {
t.Fatalf("hex mark parse failed: %v %v", v, ok)
}
if v, ok := parseTransportConntrackMark("288"); !ok || v != 288 {
t.Fatalf("dec mark parse failed: %v %v", v, ok)
}
if _, ok := parseTransportConntrackMark("bad"); ok {
t.Fatalf("expected parse error")
}
}