1
0

client_update_enable_test.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package service
  2. import (
  3. "testing"
  4. "github.com/mhsanaei/3x-ui/v3/internal/database"
  5. "github.com/mhsanaei/3x-ui/v3/internal/database/model"
  6. )
  7. func TestUpdate_PersistsRecordEnable_True(t *testing.T) {
  8. setupBulkDB(t)
  9. svc := &ClientService{}
  10. inboundSvc := &InboundService{}
  11. email := "u-true@x"
  12. c := model.Client{Email: email, ID: "11111111-1111-1111-1111-111111111111", SubID: email, Enable: false}
  13. ib := mkInbound(t, 53001, model.VLESS, clientsSettings(t, []model.Client{c}))
  14. if err := svc.SyncInbound(nil, ib.Id, []model.Client{c}); err != nil {
  15. t.Fatalf("seed linkage: %v", err)
  16. }
  17. mkTraffic(t, ib.Id, email, 0, 0, 0, 0, false)
  18. rec, err := svc.GetRecordByEmail(nil, email)
  19. if err != nil {
  20. t.Fatalf("GetRecordByEmail: %v", err)
  21. }
  22. updated := rec.ToClient()
  23. updated.Enable = true
  24. if _, err := svc.Update(inboundSvc, rec.Id, *updated); err != nil {
  25. t.Fatalf("Update: %v", err)
  26. }
  27. if got := recordEnableOf(t, svc, email); !got {
  28. t.Fatalf("%s: client_records.enable = false, want true", email)
  29. }
  30. if got := trafficOf(t, email).Enable; !got {
  31. t.Fatalf("%s: client_traffics.enable = false, want true", email)
  32. }
  33. if got := jsonClientEnable(t, inboundSvc, ib.Id, email); !got {
  34. t.Fatalf("%s: inbound JSON enable = false, want true", email)
  35. }
  36. }
  37. func TestUpdate_PersistsRecordEnable_False(t *testing.T) {
  38. setupBulkDB(t)
  39. svc := &ClientService{}
  40. inboundSvc := &InboundService{}
  41. email := "u-false@x"
  42. c := model.Client{Email: email, ID: "11111111-1111-1111-1111-111111111111", SubID: email, Enable: true}
  43. ib := mkInbound(t, 53002, model.VLESS, clientsSettings(t, []model.Client{c}))
  44. if err := svc.SyncInbound(nil, ib.Id, []model.Client{c}); err != nil {
  45. t.Fatalf("seed linkage: %v", err)
  46. }
  47. mkTraffic(t, ib.Id, email, 0, 0, 0, 0, true)
  48. rec, err := svc.GetRecordByEmail(nil, email)
  49. if err != nil {
  50. t.Fatalf("GetRecordByEmail: %v", err)
  51. }
  52. updated := rec.ToClient()
  53. updated.Enable = false
  54. if _, err := svc.Update(inboundSvc, rec.Id, *updated); err != nil {
  55. t.Fatalf("Update: %v", err)
  56. }
  57. if got := recordEnableOf(t, svc, email); got {
  58. t.Fatalf("%s: client_records.enable = true, want false", email)
  59. }
  60. }
  61. func TestUpdate_PersistsRecordEnable_NoInbound(t *testing.T) {
  62. setupBulkDB(t)
  63. svc := &ClientService{}
  64. inboundSvc := &InboundService{}
  65. email := "u-noib@x"
  66. rec := &model.ClientRecord{
  67. Email: email,
  68. UUID: "11111111-1111-1111-1111-111111111111",
  69. SubID: email,
  70. Enable: false,
  71. }
  72. if err := database.GetDB().Create(rec).Error; err != nil {
  73. t.Fatalf("create record: %v", err)
  74. }
  75. forceRecordDisabled(t, svc, email)
  76. updated := rec.ToClient()
  77. updated.Enable = true
  78. if _, err := svc.Update(inboundSvc, rec.Id, *updated); err != nil {
  79. t.Fatalf("Update: %v", err)
  80. }
  81. if got := recordEnableOf(t, svc, email); !got {
  82. t.Fatalf("%s: client_records.enable = false, want true (no-inbound persistence gap)", email)
  83. }
  84. }
  85. func TestResetTrafficByEmail_LeavesRecordEnableTrue(t *testing.T) {
  86. setupBulkDB(t)
  87. svc := &ClientService{}
  88. inboundSvc := &InboundService{}
  89. email := "r-attached@x"
  90. c := model.Client{Email: email, ID: "11111111-1111-1111-1111-111111111111", SubID: email, Enable: false}
  91. ib := mkInbound(t, 53003, model.VLESS, clientsSettings(t, []model.Client{c}))
  92. if err := svc.SyncInbound(nil, ib.Id, []model.Client{c}); err != nil {
  93. t.Fatalf("seed linkage: %v", err)
  94. }
  95. mkTraffic(t, ib.Id, email, 10, 20, 0, 0, false)
  96. if _, err := svc.ResetTrafficByEmail(inboundSvc, email); err != nil {
  97. t.Fatalf("ResetTrafficByEmail: %v", err)
  98. }
  99. if got := recordEnableOf(t, svc, email); !got {
  100. t.Fatalf("%s: client_records.enable = false, want true", email)
  101. }
  102. tr := trafficOf(t, email)
  103. if !tr.Enable {
  104. t.Fatalf("%s: client_traffics.enable = false, want true", email)
  105. }
  106. if tr.Up != 0 || tr.Down != 0 {
  107. t.Fatalf("%s: expected up/down 0, got up=%d down=%d", email, tr.Up, tr.Down)
  108. }
  109. }
  110. func TestResetTrafficByEmail_NoInbound_LeavesRecordEnableTrue(t *testing.T) {
  111. setupBulkDB(t)
  112. svc := &ClientService{}
  113. inboundSvc := &InboundService{}
  114. email := "r-noib@x"
  115. rec := &model.ClientRecord{
  116. Email: email,
  117. UUID: "11111111-1111-1111-1111-111111111111",
  118. SubID: email,
  119. Enable: false,
  120. }
  121. if err := database.GetDB().Create(rec).Error; err != nil {
  122. t.Fatalf("create record: %v", err)
  123. }
  124. forceRecordDisabled(t, svc, email)
  125. if _, err := svc.ResetTrafficByEmail(inboundSvc, email); err != nil {
  126. t.Fatalf("ResetTrafficByEmail: %v", err)
  127. }
  128. if got := recordEnableOf(t, svc, email); !got {
  129. t.Fatalf("%s: client_records.enable = false, want true (no-inbound reset re-enable gap)", email)
  130. }
  131. }