增加读写线程限制相关测试用例

This commit is contained in:
GoEdgeLab
2024-04-29 23:10:02 +08:00
parent 421b7814a6
commit 0fd2ea51d5
2 changed files with 64 additions and 1 deletions

View File

@@ -3,6 +3,7 @@
package fsutils
import (
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
"runtime"
"time"
)
@@ -68,5 +69,13 @@ func (this *Limiter) TryAck() bool {
}
func (this *Limiter) Release() {
this.threads <- struct{}{}
select {
case this.threads <- struct{}{}:
default:
remotelogs.Error("FS_LIMITER", "Limiter Ack()/Release() should appeared as a pair")
}
}
func (this *Limiter) FreeThreads() int {
return len(this.threads)
}

View File

@@ -0,0 +1,54 @@
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package fsutils_test
import (
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"github.com/iwind/TeaGo/assert"
"testing"
)
func TestLimiter_Ack(t *testing.T) {
var a = assert.NewAssertion(t)
{
var limiter = fsutils.NewLimiter(4)
a.IsTrue(limiter.FreeThreads() == 4)
limiter.Ack()
a.IsTrue(limiter.FreeThreads() == 3)
limiter.Ack()
a.IsTrue(limiter.FreeThreads() == 2)
limiter.Release()
a.IsTrue(limiter.FreeThreads() == 3)
limiter.Release()
a.IsTrue(limiter.FreeThreads() == 4)
}
}
func TestLimiter_TryAck(t *testing.T) {
var a = assert.NewAssertion(t)
{
var limiter = fsutils.NewLimiter(4)
var count = limiter.FreeThreads()
a.IsTrue(count == 4)
for i := 0; i < count; i++ {
limiter.Ack()
}
a.IsTrue(limiter.FreeThreads() == 0)
a.IsFalse(limiter.TryAck())
a.IsTrue(limiter.FreeThreads() == 0)
}
{
var limiter = fsutils.NewLimiter(4)
var count = limiter.FreeThreads()
a.IsTrue(count == 4)
for i := 0; i < count-1; i++ {
limiter.Ack()
}
a.IsTrue(limiter.FreeThreads() == 1)
a.IsTrue(limiter.TryAck())
a.IsTrue(limiter.FreeThreads() == 0)
}
}