68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
package docker
|
||
|
||
import (
|
||
"testing"
|
||
|
||
"github.com/docker/docker/api/types/container"
|
||
)
|
||
|
||
// TestComputeStats — verifikasi rumus tanpa daemon, angka dibuat persis.
|
||
func TestComputeStats(t *testing.T) {
|
||
raw := &container.StatsResponse{
|
||
CPUStats: container.CPUStats{
|
||
CPUUsage: container.CPUUsage{TotalUsage: 300_000_000},
|
||
SystemUsage: 1_000_000_000,
|
||
OnlineCPUs: 4,
|
||
},
|
||
PreCPUStats: container.CPUStats{
|
||
CPUUsage: container.CPUUsage{TotalUsage: 100_000_000},
|
||
SystemUsage: 500_000_000,
|
||
},
|
||
MemoryStats: container.MemoryStats{
|
||
Usage: 200 * 1024 * 1024,
|
||
Limit: 500 * 1024 * 1024,
|
||
Stats: map[string]uint64{"cache": 50 * 1024 * 1024},
|
||
},
|
||
Networks: map[string]container.NetworkStats{
|
||
"eth0": {RxBytes: 1000, TxBytes: 2000},
|
||
"eth1": {RxBytes: 500, TxBytes: 300},
|
||
},
|
||
BlkioStats: container.BlkioStats{
|
||
IoServiceBytesRecursive: []container.BlkioStatEntry{
|
||
{Op: "Read", Value: 4096},
|
||
{Op: "Write", Value: 8192},
|
||
{Op: "Sync", Value: 999},
|
||
},
|
||
},
|
||
PidsStats: container.PidsStats{Current: 17},
|
||
}
|
||
|
||
s := computeStats(raw)
|
||
|
||
// CPU: (300−100)/(1000−500) × 4 × 100 = 160%
|
||
if s.CPUPercent < 159.9 || s.CPUPercent > 160.1 {
|
||
t.Fatalf("CPU%% = %v, mau ~160", s.CPUPercent)
|
||
}
|
||
// Mem: (200−50) MB dari limit 500 MB = 30%
|
||
if s.MemUsed != 150*1024*1024 || s.MemPercent < 29.9 || s.MemPercent > 30.1 {
|
||
t.Fatalf("mem salah: used=%d pct=%v", s.MemUsed, s.MemPercent)
|
||
}
|
||
if s.NetRx != 1500 || s.NetTx != 2300 {
|
||
t.Fatalf("net salah: rx=%d tx=%d", s.NetRx, s.NetTx)
|
||
}
|
||
if s.BlkRead != 4096 || s.BlkWrite != 8192 {
|
||
t.Fatalf("blk salah: r=%d w=%d", s.BlkRead, s.BlkWrite)
|
||
}
|
||
if s.PIDs != 17 {
|
||
t.Fatalf("pids=%d", s.PIDs)
|
||
}
|
||
}
|
||
|
||
// TestComputeStatsZeroGuard — delta nol / data kosong tidak boleh NaN/panic.
|
||
func TestComputeStatsZeroGuard(t *testing.T) {
|
||
s := computeStats(&container.StatsResponse{})
|
||
if s.CPUPercent != 0 || s.MemPercent != 0 || s.MemUsed != 0 {
|
||
t.Fatalf("guard gagal: %+v", s)
|
||
}
|
||
}
|