mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
e692886563
1. Dismantle and remove struct cgroupData. It contained three unrelated
entities (cgroup paths, pid, and resources), and made the code
harder to read. Most importantly, though, it is not needed.
Now, subsystems' Apply methods take path, resources, and pid.
To a reviewer -- the core of the changes is in fs.go and paths.go,
the rest of it is adapting to the new signatures and related test
changes.
2. Dismantle and remove struct cgroupTestUtil. This is a followup
to the previous item -- since cgroupData is gone, there is nothing
to hold in cgroupTestUtil. The change itself is very small (see
util_test.go), but this patch is big because of it -- mostly
because we had to replace helper.cgroup.Resources with
&config.Resources{}.
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
98 lines
3.2 KiB
Go
98 lines
3.2 KiB
Go
package fs
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/opencontainers/runc/libcontainer/cgroups"
|
|
)
|
|
|
|
const (
|
|
cpuAcctUsageContents = "12262454190222160"
|
|
cpuAcctUsagePerCPUContents = "1564936537989058 1583937096487821 1604195415465681 1596445226820187 1481069084155629 1478735613864327 1477610593414743 1476362015778086"
|
|
cpuAcctStatContents = "user 452278264\nsystem 291429664"
|
|
cpuAcctUsageAll = `cpu user system
|
|
0 962250696038415 637727786389114
|
|
1 981956408513304 638197595421064
|
|
2 1002658817529022 638956774598358
|
|
3 994937703492523 637985531181620
|
|
4 874843781648690 638837766495476
|
|
5 872544369885276 638763309884944
|
|
6 870104915696359 640081778921247
|
|
7 870202363887496 638716766259495
|
|
`
|
|
)
|
|
|
|
func TestCpuacctStats(t *testing.T) {
|
|
path := tempDir(t, "cpuacct")
|
|
writeFileContents(t, path, map[string]string{
|
|
"cpuacct.usage": cpuAcctUsageContents,
|
|
"cpuacct.usage_percpu": cpuAcctUsagePerCPUContents,
|
|
"cpuacct.stat": cpuAcctStatContents,
|
|
"cpuacct.usage_all": cpuAcctUsageAll,
|
|
})
|
|
|
|
cpuacct := &CpuacctGroup{}
|
|
actualStats := *cgroups.NewStats()
|
|
err := cpuacct.GetStats(path, &actualStats)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
expectedStats := cgroups.CpuUsage{
|
|
TotalUsage: uint64(12262454190222160),
|
|
PercpuUsage: []uint64{
|
|
1564936537989058, 1583937096487821, 1604195415465681, 1596445226820187,
|
|
1481069084155629, 1478735613864327, 1477610593414743, 1476362015778086,
|
|
},
|
|
PercpuUsageInKernelmode: []uint64{
|
|
637727786389114, 638197595421064, 638956774598358, 637985531181620,
|
|
638837766495476, 638763309884944, 640081778921247, 638716766259495,
|
|
},
|
|
PercpuUsageInUsermode: []uint64{
|
|
962250696038415, 981956408513304, 1002658817529022, 994937703492523,
|
|
874843781648690, 872544369885276, 870104915696359, 870202363887496,
|
|
},
|
|
UsageInKernelmode: (uint64(291429664) * nanosecondsInSecond) / clockTicks,
|
|
UsageInUsermode: (uint64(452278264) * nanosecondsInSecond) / clockTicks,
|
|
}
|
|
|
|
if !reflect.DeepEqual(expectedStats, actualStats.CpuStats.CpuUsage) {
|
|
t.Errorf("Expected CPU usage %#v but found %#v\n",
|
|
expectedStats, actualStats.CpuStats.CpuUsage)
|
|
}
|
|
}
|
|
|
|
func TestCpuacctStatsWithoutUsageAll(t *testing.T) {
|
|
path := tempDir(t, "cpuacct")
|
|
writeFileContents(t, path, map[string]string{
|
|
"cpuacct.usage": cpuAcctUsageContents,
|
|
"cpuacct.usage_percpu": cpuAcctUsagePerCPUContents,
|
|
"cpuacct.stat": cpuAcctStatContents,
|
|
})
|
|
|
|
cpuacct := &CpuacctGroup{}
|
|
actualStats := *cgroups.NewStats()
|
|
err := cpuacct.GetStats(path, &actualStats)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
expectedStats := cgroups.CpuUsage{
|
|
TotalUsage: uint64(12262454190222160),
|
|
PercpuUsage: []uint64{
|
|
1564936537989058, 1583937096487821, 1604195415465681, 1596445226820187,
|
|
1481069084155629, 1478735613864327, 1477610593414743, 1476362015778086,
|
|
},
|
|
PercpuUsageInKernelmode: []uint64{},
|
|
PercpuUsageInUsermode: []uint64{},
|
|
UsageInKernelmode: (uint64(291429664) * nanosecondsInSecond) / clockTicks,
|
|
UsageInUsermode: (uint64(452278264) * nanosecondsInSecond) / clockTicks,
|
|
}
|
|
|
|
if !reflect.DeepEqual(expectedStats, actualStats.CpuStats.CpuUsage) {
|
|
t.Errorf("Expected CPU usage %#v but found %#v\n",
|
|
expectedStats, actualStats.CpuStats.CpuUsage)
|
|
}
|
|
}
|