Release 3X-UI for Docker / build (push) Canceled after 0s
Release 3X-UI / build (386) (push) Canceled after 0s
Release 3X-UI / build (amd64) (push) Canceled after 0s
Release 3X-UI / build (arm64) (push) Canceled after 0s
Release 3X-UI / build (armv5) (push) Canceled after 0s
Release 3X-UI / build (armv6) (push) Canceled after 0s
Release 3X-UI / build (armv7) (push) Canceled after 0s
Release 3X-UI / build (s390x) (push) Canceled after 0s
Release 3X-UI / Build for Windows (amd64) (push) Canceled after 0s
Release 3X-UI / Publish rolling dev release (push) Canceled after 0s
37 lines
815 B
Go
37 lines
815 B
Go
package xray
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
// TestLogWriterLastLineConcurrent exercises the LogWriter from multiple
|
|
// goroutines: Xray drives Write while another goroutine (Process.GetResult)
|
|
// reads the last line. Run under `go test -race` this fails on an unguarded
|
|
// lastLine field and passes once the access is serialized.
|
|
func TestLogWriterLastLineConcurrent(t *testing.T) {
|
|
lw := NewLogWriter()
|
|
const writers, readers, iterations = 4, 4, 500
|
|
|
|
var wg sync.WaitGroup
|
|
wg.Add(writers + readers)
|
|
|
|
for range writers {
|
|
go func() {
|
|
defer wg.Done()
|
|
for range iterations {
|
|
_, _ = lw.Write([]byte("2024/01/01 00:00:00.000000 [Info] connection accepted"))
|
|
}
|
|
}()
|
|
}
|
|
for range readers {
|
|
go func() {
|
|
defer wg.Done()
|
|
for range iterations {
|
|
_ = lw.LastLine()
|
|
}
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
}
|