| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- package service
- import (
- "testing"
- "github.com/mhsanaei/3x-ui/v3/internal/database"
- "github.com/mhsanaei/3x-ui/v3/internal/database/model"
- "github.com/mhsanaei/3x-ui/v3/internal/xray"
- )
- func TestParseInboundSettingsClientsIgnoresProtocolScalarFields(t *testing.T) {
- tests := []struct {
- name string
- settings string
- want string
- }{
- {
- name: "vless scalar settings",
- settings: `{
- "clients": [{"email": "[email protected]", "id": "11111111-1111-1111-1111-111111111111", "limitIp": 2}],
- "decryption": "none",
- "encryption": "none",
- "fallbacks": []
- }`,
- want: "[email protected]",
- },
- {
- name: "hysteria scalar settings",
- settings: `{
- "clients": [{"email": "[email protected]", "password": "secret"}],
- "version": 2,
- "ignoreClientBandwidth": false
- }`,
- want: "[email protected]",
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- clients, err := ParseInboundSettingsClients(tt.settings)
- if err != nil {
- t.Fatalf("ParseInboundSettingsClients: %v", err)
- }
- if len(clients) != 1 || clients[0].Email != tt.want {
- t.Fatalf("clients = %+v, want one client with email %s", clients, tt.want)
- }
- })
- }
- }
- func TestParseInboundSettingsClientsRejectsEmptyOrNullSettings(t *testing.T) {
- for _, settings := range []string{"", " ", "null", " \n null \t "} {
- t.Run(settings, func(t *testing.T) {
- clients, err := ParseInboundSettingsClients(settings)
- if err == nil {
- t.Fatalf("ParseInboundSettingsClients(%q) error = nil, want error", settings)
- }
- if clients != nil {
- t.Fatalf("clients = %+v, want nil", clients)
- }
- })
- }
- }
- func TestGetClientsIgnoresProtocolScalarFields(t *testing.T) {
- inbound := &model.Inbound{
- Settings: `{
- "clients": [{"email": "[email protected]", "id": "11111111-1111-1111-1111-111111111111"}],
- "decryption": "none",
- "encryption": "none",
- "fallbacks": []
- }`,
- }
- clients, err := (&InboundService{}).GetClients(inbound)
- if err != nil {
- t.Fatalf("GetClients: %v", err)
- }
- if len(clients) != 1 || clients[0].Email != "[email protected]" {
- t.Fatalf("clients = %+v, want [email protected]", clients)
- }
- }
- func TestSearchClientTrafficIgnoresProtocolScalarFields(t *testing.T) {
- setupBulkDB(t)
- db := database.GetDB()
- client := model.Client{
- Email: "[email protected]",
- ID: "11111111-1111-1111-1111-111111111111",
- SubID: "sub-alice",
- Enable: true,
- }
- inbound := &model.Inbound{
- UserId: 1,
- Tag: "vless-scalar",
- Enable: true,
- Port: 43001,
- Protocol: model.VLESS,
- Settings: `{
- "clients": [{"email": "[email protected]", "id": "11111111-1111-1111-1111-111111111111", "subId": "sub-alice", "enable": true}],
- "decryption": "none",
- "encryption": "none",
- "fallbacks": []
- }`,
- }
- if err := db.Create(inbound).Error; err != nil {
- t.Fatalf("create inbound: %v", err)
- }
- if err := db.Create(&model.ClientRecord{Email: client.Email, Enable: true, SubID: client.SubID}).Error; err != nil {
- t.Fatalf("create client record: %v", err)
- }
- if err := db.Create(&xray.ClientTraffic{InboundId: inbound.Id, Email: client.Email, Enable: true}).Error; err != nil {
- t.Fatalf("create client traffic: %v", err)
- }
- traffic, err := (&InboundService{}).SearchClientTraffic(client.ID)
- if err != nil {
- t.Fatalf("SearchClientTraffic: %v", err)
- }
- if traffic.Email != client.Email || traffic.InboundId != inbound.Id {
- t.Fatalf("traffic = %+v, want email %s inbound %d", traffic, client.Email, inbound.Id)
- }
- }
|