package awg import "testing" func TestParseINI_AWG20(t *testing.T) { raw := `[Interface] PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Address = 10.8.0.2/32 DNS = 1.1.1.1 Jc = 4 Jmin = 40 Jmax = 70 H1 = 1 H2 = 2 H3 = 3 H4 = 4 I1 = [Peer] PublicKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE= Endpoint = 203.0.113.10:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 25 ` c, err := Parse(raw) if err != nil { t.Fatal(err) } if c.Jc != 4 || c.I1 != "" || c.Endpoint != "203.0.113.10:51820" { t.Fatalf("unexpected conf: %+v", c) } if !c.IsAWG20() { t.Fatal("expected AWG2 markers") } ipc, err := c.ToIPC() if err != nil { t.Fatal(err) } if !containsAll(ipc, "jc=4", "i1=", "endpoint=203.0.113.10:51820") { t.Fatalf("bad ipc: %s", ipc) } } func TestDetect(t *testing.T) { if !Detect("[Interface]\nPrivateKey = x") { t.Fatal("expected detect") } if !Detect("awg://1.2.3.4:51820/?private_key=a&public_key=b&address=10.0.0.2/32") { t.Fatal("expected awg uri detect") } } func containsAll(s string, parts ...string) bool { for _, p := range parts { if !stringsContains(s, p) { return false } } return true } func stringsContains(s, sub string) bool { return len(sub) == 0 || (len(s) >= len(sub) && indexOf(s, sub) >= 0) } func indexOf(s, sub string) int { for i := 0; i+len(sub) <= len(s); i++ { if s[i:i+len(sub)] == sub { return i } } return -1 }