node_traffic_sync_online_prune_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package job
  2. import (
  3. "path/filepath"
  4. "testing"
  5. "github.com/op/go-logging"
  6. "github.com/mhsanaei/3x-ui/v3/internal/database"
  7. "github.com/mhsanaei/3x-ui/v3/internal/database/model"
  8. xuilogger "github.com/mhsanaei/3x-ui/v3/internal/logger"
  9. "github.com/mhsanaei/3x-ui/v3/internal/web/runtime"
  10. "github.com/mhsanaei/3x-ui/v3/internal/web/service"
  11. "github.com/mhsanaei/3x-ui/v3/internal/xray"
  12. )
  13. // The sync tick is the only place that sees which nodes it no longer fetches, so it
  14. // must drop their online sets itself: a disabled node here, a deleted one below.
  15. func TestNodeTrafficSyncDropsOnlineClientsOfUnsyncedNodes(t *testing.T) {
  16. xuilogger.InitLogger(logging.ERROR)
  17. if err := database.InitDB(filepath.Join(t.TempDir(), "x-ui.db")); err != nil {
  18. t.Fatalf("InitDB: %v", err)
  19. }
  20. t.Cleanup(func() { _ = database.CloseDB() })
  21. runtime.SetManager(runtime.NewManager(runtime.LocalDeps{APIPort: func() int { return 0 }, SetNeedRestart: func() {}}))
  22. t.Cleanup(func() { runtime.SetManager(nil) })
  23. process := xray.NewTestProcess(nil, "")
  24. t.Cleanup(service.SetXrayProcessForTest(process))
  25. disabled := &model.Node{Name: "disabled", Address: "127.0.0.1", Port: 1, ApiToken: "tok", Enable: true, Status: "online"}
  26. if err := database.GetDB().Create(disabled).Error; err != nil {
  27. t.Fatalf("create node: %v", err)
  28. }
  29. if err := database.GetDB().Model(disabled).Update("enable", false).Error; err != nil {
  30. t.Fatalf("disable node: %v", err)
  31. }
  32. process.SetNodeOnlineTree(disabled.Id, map[string][]string{"g-disabled": {"a@x"}})
  33. process.SetNodeOnlineTree(disabled.Id+100, map[string][]string{"g-deleted": {"b@x"}})
  34. NewNodeTrafficSyncJob().Run()
  35. if got := process.GetMergedNodeTrees(); len(got) != 0 {
  36. t.Fatalf("online sets after a sync tick = %v, want none for a disabled or deleted node", got)
  37. }
  38. }