Files
waf-platform/EdgeNode/internal/utils/readers/readers_concurrent_file_test.go
2026-02-04 20:27:13 +08:00

68 lines
1.4 KiB
Go

// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package readers_test
import (
"github.com/TeaOSLab/EdgeNode/internal/utils/readers"
"github.com/TeaOSLab/EdgeNode/internal/utils/testutils"
"github.com/iwind/TeaGo/types"
"os"
"testing"
"time"
)
func TestConcurrentFileReaders_Get(t *testing.T) {
if !testutils.IsSingleTesting() {
return
}
var path = "readers_concurrent_file.txt"
writeFp, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
if err != nil {
t.Fatal(err)
}
var concurrentReaders = readers.NewConcurrentFileReaders(path)
defer func() {
_ = writeFp.Close()
concurrentReaders.NotifyClose()
_ = os.Remove(path)
time.Sleep(2 * time.Second)
}()
// pre-write
_, _ = writeFp.WriteString("0")
for i := 0; i < 5; i++ {
go func(i int) {
reader, readerErr := concurrentReaders.Get()
if readerErr != nil {
t.Error(i, "Get():", readerErr)
} else {
defer func() {
_ = reader.Close()
}()
var buf = make([]byte, 1024)
for {
n, readErr := reader.Read(buf)
if n > 0 {
t.Log(i, "Read:", string(buf[:n]))
}
if readErr != nil {
t.Log(i, "readErr:", readErr)
break
}
}
}
}(i)
}
for i := 1; i <= 10; i++ {
_, _ = writeFp.WriteString(types.String(i))
concurrentReaders.NotifyRead()
time.Sleep(2 * time.Second)
}
}