mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-10 13:21:00 +00:00
116ef900d5
RestartXray cleared isManuallyStopped unconditionally at its top, so the @30s pending-config cron (and warp/ldap/outbound reconcile jobs) that call RestartXray(false) resurrected an Xray the admin had deliberately stopped — unlike the crash-detector, which honors the manual-stop flag. Skip a non-forced restart while the stop flag is set; only an explicit forced restart clears it.
24 lines
747 B
Go
24 lines
747 B
Go
package service
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// A background (non-forced) restart — the pending-config-change cron, warp/ldap/
|
|
// outbound reconcile jobs — must not revive an Xray the admin deliberately
|
|
// stopped. Only an explicit forced restart clears the manual-stop state.
|
|
func TestRestartXrayRespectsManualStop(t *testing.T) {
|
|
setupSettingTestDB(t)
|
|
if err := (&SettingService{}).saveSetting("xrayTemplateConfig", "{ not valid json"); err != nil {
|
|
t.Fatalf("seed template: %v", err)
|
|
}
|
|
t.Cleanup(func() { isManuallyStopped.Store(false) })
|
|
|
|
isManuallyStopped.Store(true)
|
|
_ = (&XrayService{}).RestartXray(false)
|
|
|
|
if !isManuallyStopped.Load() {
|
|
t.Fatal("a non-forced restart cleared a deliberate manual stop and would revive xray")
|
|
}
|
|
}
|