| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package xray
- import (
- "os"
- "path/filepath"
- "runtime"
- "sync"
- "testing"
- "time"
- )
- func TestRefreshVersionTimesOut(t *testing.T) {
- if runtime.GOOS == "windows" {
- t.Skip("shell fixture is Unix-only")
- }
- dir := t.TempDir()
- t.Setenv("XUI_BIN_FOLDER", dir)
- binaryPath := filepath.Join(dir, GetBinaryName())
- if err := os.WriteFile(binaryPath, []byte("#!/bin/sh\nexec sleep 1\n"), 0o700); err != nil {
- t.Fatalf("write xray fixture: %v", err)
- }
- previousTimeout := xrayVersionTimeout
- xrayVersionTimeout = 20 * time.Millisecond
- t.Cleanup(func() { xrayVersionTimeout = previousTimeout })
- p := newProcess(&Config{})
- started := time.Now()
- p.refreshVersion()
- elapsed := time.Since(started)
- if elapsed < xrayVersionTimeout {
- t.Fatalf("refreshVersion duration = %s, want at least %s", elapsed, xrayVersionTimeout)
- }
- if elapsed > 500*time.Millisecond {
- t.Fatalf("refreshVersion duration = %s, want under 500ms", elapsed)
- }
- if got := p.GetXrayVersion(); got != "Unknown" {
- t.Fatalf("version = %q, want Unknown", got)
- }
- }
- func TestProcessConfigSnapshotsAreRaceSafe(t *testing.T) {
- p := NewProcess(&Config{})
- first := &Config{}
- second := &Config{}
- var wg sync.WaitGroup
- wg.Go(func() {
- for range 1000 {
- p.SetConfig(first)
- p.SetConfig(second)
- }
- })
- for range 4 {
- wg.Go(func() {
- for range 1000 {
- if p.GetConfig() == nil {
- t.Error("config = nil")
- }
- }
- })
- }
- wg.Wait()
- }
|