| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package sub
- import (
- "net/url"
- "testing"
- "github.com/mhsanaei/3x-ui/v3/internal/database"
- "github.com/mhsanaei/3x-ui/v3/internal/database/model"
- wgutil "github.com/mhsanaei/3x-ui/v3/internal/util/wireguard"
- )
- func TestGenWireguardLinkFields(t *testing.T) {
- serverPriv, serverPub, err := wgutil.GenerateWireguardKeypair()
- if err != nil {
- t.Fatalf("keypair: %v", err)
- }
- clientPriv, _, err := wgutil.GenerateWireguardKeypair()
- if err != nil {
- t.Fatalf("client keypair: %v", err)
- }
- inbound := &model.Inbound{
- Listen: "203.0.113.7",
- Port: 51820,
- Protocol: model.WireGuard,
- Remark: "wg-sub",
- Settings: `{"secretKey":"` + serverPriv + `","mtu":1420,"clients":[{"email":"user","privateKey":"` + clientPriv + `","allowedIPs":["10.0.0.2/32"],"keepAlive":25}]}`,
- }
- s := &SubService{}
- link := s.genWireguardLink(inbound, "user")
- u, err := url.Parse(link)
- if err != nil {
- t.Fatalf("link does not parse: %v\n got: %s", err, link)
- }
- if u.Scheme != "wireguard" {
- t.Fatalf("scheme = %q, want wireguard", u.Scheme)
- }
- if u.Host != "203.0.113.7:51820" {
- t.Fatalf("host = %q, want 203.0.113.7:51820", u.Host)
- }
- if u.User.Username() != clientPriv {
- t.Fatalf("userinfo = %q, want client private key %q", u.User.Username(), clientPriv)
- }
- q := u.Query()
- if q.Get("publickey") != serverPub {
- t.Fatalf("publickey = %q, want server public key %q", q.Get("publickey"), serverPub)
- }
- if q.Get("address") != "10.0.0.2/32" {
- t.Fatalf("address = %q, want 10.0.0.2/32", q.Get("address"))
- }
- if q.Get("mtu") != "1420" {
- t.Fatalf("mtu = %q, want 1420", q.Get("mtu"))
- }
- }
- func TestGenWireguardLinkWrongProtocol(t *testing.T) {
- s := &SubService{}
- vless := &model.Inbound{Protocol: model.VLESS, Settings: `{"clients":[{"email":"user"}]}`}
- if got := s.genWireguardLink(vless, "user"); got != "" {
- t.Fatalf("wrong protocol should yield empty link, got %q", got)
- }
- }
- func TestGenWireguardLinkNoKey(t *testing.T) {
- s := &SubService{}
- inbound := &model.Inbound{
- Protocol: model.WireGuard,
- Port: 51820,
- Settings: `{"secretKey":"x","clients":[{"email":"user"}]}`,
- }
- if got := s.genWireguardLink(inbound, "user"); got != "" {
- t.Fatalf("client without private key should yield empty link, got %q", got)
- }
- }
- func TestGetInboundsBySubIdIncludesWireguard(t *testing.T) {
- initSubDB(t)
- db := database.GetDB()
- in := &model.Inbound{Port: 51820, Protocol: model.WireGuard, Enable: true, Tag: "wg-sub", Settings: `{"secretKey":"x","clients":[]}`}
- if err := db.Create(in).Error; err != nil {
- t.Fatalf("create inbound: %v", err)
- }
- rec := &model.ClientRecord{Email: "u@wg", SubID: "subwg", Enable: true}
- if err := db.Create(rec).Error; err != nil {
- t.Fatalf("create client: %v", err)
- }
- if err := db.Create(&model.ClientInbound{ClientId: rec.Id, InboundId: in.Id}).Error; err != nil {
- t.Fatalf("create link: %v", err)
- }
- s := &SubService{}
- inbounds, err := s.getInboundsBySubId("subwg")
- if err != nil {
- t.Fatalf("getInboundsBySubId: %v", err)
- }
- if len(inbounds) != 1 || inbounds[0].Id != in.Id {
- t.Fatalf("wireguard inbound not returned for subId: %+v", inbounds)
- }
- }
|