mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 16:00:25 +08:00 
			
		
		
		
	增加读写线程限制相关测试用例
This commit is contained in:
		@@ -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)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								internal/utils/fs/limiter_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								internal/utils/fs/limiter_test.go
									
									
									
									
									
										Normal 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)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user