1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
package main
import (
"github.com/mndrix/tap-go"
rspec "github.com/opencontainers/runtime-spec/specs-go"
"github.com/opencontainers/runtime-tools/cgroups"
"github.com/opencontainers/runtime-tools/validation/util"
)
func main() {
var shares uint64 = 1024
var period uint64 = 100000
var quota int64 = 50000
var cpus, mems string = "0-1", "0"
t := tap.New()
t.Header(0)
defer t.AutoPlan()
g, err := util.GetDefaultGenerator()
if err != nil {
util.Fatal(err)
}
g.SetLinuxCgroupsPath(cgroups.RelCgroupPath)
g.SetLinuxResourcesCPUShares(shares)
g.SetLinuxResourcesCPUQuota(quota)
g.SetLinuxResourcesCPUPeriod(period)
g.SetLinuxResourcesCPUCpus(cpus)
g.SetLinuxResourcesCPUMems(mems)
err = util.RuntimeOutsideValidate(g, t, func(config *rspec.Spec, t *tap.T, state *rspec.State) error {
cg, err := cgroups.FindCgroup()
t.Ok((err == nil), "find cpus cgroup")
if err != nil {
t.Diagnostic(err.Error())
return nil
}
lcd, err := cg.GetCPUData(state.Pid, config.Linux.CgroupsPath)
t.Ok((err == nil), "get cpus cgroup data")
if err != nil {
t.Diagnostic(err.Error())
return nil
}
t.Ok(*lcd.Shares == shares, "cpus shares limit is set correctly")
t.Diagnosticf("expect: %d, actual: %d", shares, lcd.Shares)
t.Ok(*lcd.Quota == quota, "cpus quota is set correctly")
t.Diagnosticf("expect: %d, actual: %d", quota, lcd.Quota)
t.Ok(*lcd.Period == period, "cpus period is set correctly")
t.Diagnosticf("expect: %d, actual: %d", period, lcd.Period)
t.Ok(lcd.Cpus == cpus, "cpus cpus is set correctly")
t.Diagnosticf("expect: %s, actual: %s", cpus, lcd.Cpus)
t.Ok(lcd.Mems == mems, "cpus mems is set correctly")
t.Diagnosticf("expect: %s, actual: %s", mems, lcd.Mems)
return nil
})
if err != nil {
t.Fail(err.Error())
}
}
|