Pulse/internal/monitoring/ratetracker_concurrency_test.go
2025-10-11 23:29:47 +00:00

58 lines
1.1 KiB
Go

package monitoring
import (
"sync"
"testing"
"time"
"github.com/rcourtman/pulse-go-rewrite/internal/types"
)
func TestRateTrackerConcurrentAccess(t *testing.T) {
rt := NewRateTracker()
const iterations = 1000
var wg sync.WaitGroup
wg.Add(3)
go func() {
defer wg.Done()
for i := 0; i < iterations; i++ {
metrics := types.IOMetrics{
DiskRead: int64(i * 100),
DiskWrite: int64(i * 80),
NetworkIn: int64(i * 60),
NetworkOut: int64(i * 40),
Timestamp: time.Now().Add(time.Duration(i) * time.Millisecond),
}
rt.CalculateRates("guest-1", metrics)
time.Sleep(time.Microsecond)
}
}()
go func() {
defer wg.Done()
for i := 0; i < iterations; i++ {
metrics := types.IOMetrics{
DiskRead: int64(i * 50),
DiskWrite: int64(i * 70),
NetworkIn: int64(i * 30),
NetworkOut: int64(i * 20),
Timestamp: time.Now().Add(time.Duration(i) * time.Millisecond),
}
rt.CalculateRates("guest-2", metrics)
time.Sleep(time.Microsecond)
}
}()
go func() {
defer wg.Done()
for i := 0; i < iterations/10; i++ {
rt.Clear()
time.Sleep(5 * time.Microsecond)
}
}()
wg.Wait()
}