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
 | 
					package fsutils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
 | 
				
			||||||
	"runtime"
 | 
						"runtime"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -68,5 +69,13 @@ func (this *Limiter) TryAck() bool {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (this *Limiter) Release() {
 | 
					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