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