mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 19:41:17 +00:00
58 lines
1.1 KiB
Go
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()
|
|
}
|