Initial commit (code only without large binaries)
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user