diff --git a/info/container_test.go b/info/container_test.go index 3eff2658..c1d1029c 100644 --- a/info/container_test.go +++ b/info/container_test.go @@ -84,3 +84,167 @@ func TestPercentiles(t *testing.T) { } } } + +func TestAddSampleNilStats(t *testing.T) { + s := &ContainerStatsSummary{} + + stats := &ContainerStats{ + Cpu: &CpuStats{}, + Memory: &MemoryStats{}, + } + stats.Cpu.Usage.PerCpu = []uint64{uint64(10)} + stats.Cpu.Usage.Total = uint64(10) + stats.Cpu.Usage.System = uint64(2) + stats.Cpu.Usage.User = uint64(8) + stats.Memory.Usage = uint64(200) + s.AddSample(nil, stats) + + if len(s.Samples) != 0 { + t.Errorf("added an unexpected sample: %+v", s.Samples) + } + + s.Samples = nil + s.AddSample(stats, nil) + + if len(s.Samples) != 0 { + t.Errorf("added an unexpected sample: %+v", s.Samples) + } +} + +func TestAddSample(t *testing.T) { + s := &ContainerStatsSummary{} + + cpuPrevUsage := uint64(10) + cpuCurrentUsage := uint64(15) + memCurrentUsage := uint64(200) + + prev := &ContainerStats{ + Cpu: &CpuStats{}, + Memory: &MemoryStats{}, + } + prev.Cpu.Usage.PerCpu = []uint64{cpuPrevUsage} + prev.Cpu.Usage.Total = cpuPrevUsage + prev.Cpu.Usage.System = 0 + prev.Cpu.Usage.User = cpuPrevUsage + prev.Timestamp = time.Now() + + current := &ContainerStats{ + Cpu: &CpuStats{}, + Memory: &MemoryStats{}, + } + current.Cpu.Usage.PerCpu = []uint64{cpuCurrentUsage} + current.Cpu.Usage.Total = cpuCurrentUsage + current.Cpu.Usage.System = 0 + current.Cpu.Usage.User = cpuCurrentUsage + current.Memory.Usage = memCurrentUsage + current.Timestamp = prev.Timestamp.Add(1 * time.Second) + + s.AddSample(prev, current) + + if len(s.Samples) != 1 { + t.Fatalf("unexpected samples: %+v", s.Samples) + } + + if s.Samples[0].Memory.Usage != memCurrentUsage { + t.Errorf("wrong memory usage: %v. should be %v", s.Samples[0].Memory.Usage, memCurrentUsage) + } + + if s.Samples[0].Cpu.Usage != cpuCurrentUsage-cpuPrevUsage { + t.Errorf("wrong CPU usage: %v. should be %v", s.Samples[0].Cpu.Usage, cpuCurrentUsage-cpuPrevUsage) + } +} + +func TestAddSampleIncompleteStats(t *testing.T) { + s := &ContainerStatsSummary{} + + cpuPrevUsage := uint64(10) + cpuCurrentUsage := uint64(15) + memCurrentUsage := uint64(200) + + prev := &ContainerStats{ + Cpu: &CpuStats{}, + Memory: &MemoryStats{}, + } + prev.Cpu.Usage.PerCpu = []uint64{cpuPrevUsage} + prev.Cpu.Usage.Total = cpuPrevUsage + prev.Cpu.Usage.System = 0 + prev.Cpu.Usage.User = cpuPrevUsage + prev.Timestamp = time.Now() + + current := &ContainerStats{ + Cpu: &CpuStats{}, + Memory: &MemoryStats{}, + } + current.Cpu.Usage.PerCpu = []uint64{cpuCurrentUsage} + current.Cpu.Usage.Total = cpuCurrentUsage + current.Cpu.Usage.System = 0 + current.Cpu.Usage.User = cpuCurrentUsage + current.Memory.Usage = memCurrentUsage + current.Timestamp = prev.Timestamp.Add(1 * time.Second) + + stats := &ContainerStats{ + Cpu: prev.Cpu, + Memory: nil, + } + s.AddSample(stats, current) + if len(s.Samples) != 0 { + t.Errorf("added an unexpected sample: %+v", s.Samples) + } + s.Samples = nil + + s.AddSample(prev, stats) + if len(s.Samples) != 0 { + t.Errorf("added an unexpected sample: %+v", s.Samples) + } + s.Samples = nil + + stats = &ContainerStats{ + Cpu: nil, + Memory: prev.Memory, + } + s.AddSample(stats, current) + if len(s.Samples) != 0 { + t.Errorf("added an unexpected sample: %+v", s.Samples) + } + s.Samples = nil + + s.AddSample(prev, stats) + if len(s.Samples) != 0 { + t.Errorf("added an unexpected sample: %+v", s.Samples) + } + s.Samples = nil +} + +func TestAddSampleWrongOrder(t *testing.T) { + s := &ContainerStatsSummary{} + + cpuPrevUsage := uint64(10) + cpuCurrentUsage := uint64(15) + memCurrentUsage := uint64(200) + + prev := &ContainerStats{ + Cpu: &CpuStats{}, + Memory: &MemoryStats{}, + } + prev.Cpu.Usage.PerCpu = []uint64{cpuPrevUsage} + prev.Cpu.Usage.Total = cpuPrevUsage + prev.Cpu.Usage.System = 0 + prev.Cpu.Usage.User = cpuPrevUsage + prev.Timestamp = time.Now() + + current := &ContainerStats{ + Cpu: &CpuStats{}, + Memory: &MemoryStats{}, + } + current.Cpu.Usage.PerCpu = []uint64{cpuCurrentUsage} + current.Cpu.Usage.Total = cpuCurrentUsage + current.Cpu.Usage.System = 0 + current.Cpu.Usage.User = cpuCurrentUsage + current.Memory.Usage = memCurrentUsage + current.Timestamp = prev.Timestamp.Add(1 * time.Second) + + s.AddSample(current, prev) + if len(s.Samples) != 0 { + t.Errorf("added an unexpected sample: %+v", s.Samples) + } +}