| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package service
- import (
- "sync"
- "testing"
- "github.com/mhsanaei/3x-ui/v3/internal/xray"
- )
- func TestXrayLifecycleSnapshotDoesNotOverwriteNewerResult(t *testing.T) {
- state := xrayLifecycle{}
- first := xray.NewProcess(&xray.Config{})
- second := xray.NewProcess(&xray.Config{})
- state.replace(first)
- state.storeResult(first, "first result")
- process, result := state.snapshot()
- if process != first || result != "first result" {
- t.Fatalf("snapshot = (%p, %q), want (%p, %q)", process, result, first, "first result")
- }
- state.replace(second)
- state.storeResult(first, "old result")
- process, result = state.snapshot()
- if process != second {
- t.Fatal("snapshot returned the replaced process")
- }
- if result != "" {
- t.Fatalf("snapshot result = %q, want empty", result)
- }
- }
- func TestXrayLifecycleConcurrentStatusResultAndTrafficReads(t *testing.T) {
- previousProcess, previousResult := xrayState.snapshot()
- t.Cleanup(func() {
- xrayState.mu.Lock()
- xrayState.process = previousProcess
- xrayState.result = previousResult
- xrayState.mu.Unlock()
- })
- first := xray.NewProcess(&xray.Config{})
- second := xray.NewProcess(&xray.Config{})
- service := XrayService{}
- var wg sync.WaitGroup
- wg.Go(func() {
- for range 200 {
- xrayState.replace(first)
- xrayState.replace(second)
- }
- })
- for range 4 {
- wg.Go(func() {
- for range 200 {
- _ = service.IsXrayRunning()
- _ = service.GetXrayResult()
- _, _, err := service.GetXrayTraffic()
- if err == nil || err.Error() != "xray is not running" {
- t.Errorf("GetXrayTraffic error = %v, want xray is not running", err)
- }
- }
- })
- }
- wg.Wait()
- }
|