client_create_reuse_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package service
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/mhsanaei/3x-ui/v3/internal/database/model"
  6. )
  7. func settingsHoldUUID(t *testing.T, inboundSvc *InboundService, inboundId int, uuid string) bool {
  8. t.Helper()
  9. ib, err := inboundSvc.GetInbound(inboundId)
  10. if err != nil {
  11. t.Fatalf("GetInbound %d: %v", inboundId, err)
  12. }
  13. return strings.Contains(ib.Settings, uuid)
  14. }
  15. func TestCreateRepeatKeepsExistingUUID(t *testing.T) {
  16. setupBulkDB(t)
  17. svc := &ClientService{}
  18. inboundSvc := &InboundService{}
  19. ibA := mkInbound(t, 21001, model.VLESS, `{"clients":[]}`)
  20. ibB := mkInbound(t, 21002, model.VLESS, `{"clients":[]}`)
  21. const originalUUID = "aaaaaaaa-1111-2222-3333-444444444444"
  22. if _, err := svc.Create(inboundSvc, &ClientCreatePayload{
  23. Client: model.Client{Email: "repeat@x", ID: originalUUID, SubID: "sub-repeat", Enable: true},
  24. InboundIds: []int{ibA.Id},
  25. }); err != nil {
  26. t.Fatalf("first Create: %v", err)
  27. }
  28. if rec := lookupClientRecord(t, "repeat@x"); rec.UUID != originalUUID {
  29. t.Fatalf("record UUID after first Create = %q, want %q", rec.UUID, originalUUID)
  30. }
  31. if _, err := svc.Create(inboundSvc, &ClientCreatePayload{
  32. Client: model.Client{Email: "repeat@x", SubID: "sub-repeat", Enable: true},
  33. InboundIds: []int{ibB.Id},
  34. }); err != nil {
  35. t.Fatalf("repeat Create: %v", err)
  36. }
  37. if rec := lookupClientRecord(t, "repeat@x"); rec.UUID != originalUUID {
  38. t.Fatalf("record UUID after repeat Create = %q, want %q", rec.UUID, originalUUID)
  39. }
  40. if !settingsHoldUUID(t, inboundSvc, ibA.Id, originalUUID) {
  41. t.Fatalf("inbound A settings lost the original UUID")
  42. }
  43. if !settingsHoldUUID(t, inboundSvc, ibB.Id, originalUUID) {
  44. t.Fatalf("inbound B settings did not reuse the original UUID")
  45. }
  46. }