add test cases for Set interfaces
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
This commit is contained in:
parent
74005ed4e0
commit
4077c254a6
|
@ -1,6 +1,7 @@
|
||||||
package fs
|
package fs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/libcontainer/cgroups"
|
"github.com/docker/libcontainer/cgroups"
|
||||||
|
@ -72,6 +73,35 @@ func appendBlkioStatEntry(blkioStatEntries *[]cgroups.BlkioStatEntry, major, min
|
||||||
*blkioStatEntries = append(*blkioStatEntries, cgroups.BlkioStatEntry{Major: major, Minor: minor, Value: value, Op: op})
|
*blkioStatEntries = append(*blkioStatEntries, cgroups.BlkioStatEntry{Major: major, Minor: minor, Value: value, Op: op})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBlkioSetWeight(t *testing.T) {
|
||||||
|
helper := NewCgroupTestUtil("blkio", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
|
||||||
|
const (
|
||||||
|
weightBefore = 100
|
||||||
|
weightAfter = 200
|
||||||
|
)
|
||||||
|
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"blkio.weight": strconv.Itoa(weightBefore),
|
||||||
|
})
|
||||||
|
|
||||||
|
helper.CgroupData.c.BlkioWeight = weightAfter
|
||||||
|
blkio := &BlkioGroup{}
|
||||||
|
if err := blkio.Set(helper.CgroupPath, helper.CgroupData.c); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
value, err := getCgroupParamUint(helper.CgroupPath, "blkio.weight")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse blkio.weight - %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value != weightAfter {
|
||||||
|
t.Fatal("Got the wrong value, set blkio.weight failed.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBlkioStats(t *testing.T) {
|
func TestBlkioStats(t *testing.T) {
|
||||||
helper := NewCgroupTestUtil("blkio", t)
|
helper := NewCgroupTestUtil("blkio", t)
|
||||||
defer helper.cleanup()
|
defer helper.cleanup()
|
||||||
|
|
|
@ -2,11 +2,81 @@ package fs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/libcontainer/cgroups"
|
"github.com/docker/libcontainer/cgroups"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestCpuSetShares(t *testing.T) {
|
||||||
|
helper := NewCgroupTestUtil("cpu", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
|
||||||
|
const (
|
||||||
|
sharesBefore = 1024
|
||||||
|
sharesAfter = 512
|
||||||
|
)
|
||||||
|
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"cpu.shares": strconv.Itoa(sharesBefore),
|
||||||
|
})
|
||||||
|
|
||||||
|
helper.CgroupData.c.CpuShares = sharesAfter
|
||||||
|
cpu := &CpuGroup{}
|
||||||
|
if err := cpu.Set(helper.CgroupPath, helper.CgroupData.c); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
value, err := getCgroupParamUint(helper.CgroupPath, "cpu.shares")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse cpu.shares - %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value != sharesAfter {
|
||||||
|
t.Fatal("Got the wrong value, set cpu.shares failed.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCpuSetBandWidth(t *testing.T) {
|
||||||
|
helper := NewCgroupTestUtil("cpu", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
|
||||||
|
const (
|
||||||
|
quotaBefore = 8000
|
||||||
|
quotaAfter = 5000
|
||||||
|
periodBefore = 10000
|
||||||
|
periodAfter = 7000
|
||||||
|
)
|
||||||
|
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"cpu.cfs_quota_us": strconv.Itoa(quotaBefore),
|
||||||
|
"cpu.cfs_period_us": strconv.Itoa(periodBefore),
|
||||||
|
})
|
||||||
|
|
||||||
|
helper.CgroupData.c.CpuQuota = quotaAfter
|
||||||
|
helper.CgroupData.c.CpuPeriod = periodAfter
|
||||||
|
cpu := &CpuGroup{}
|
||||||
|
if err := cpu.Set(helper.CgroupPath, helper.CgroupData.c); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
quota, err := getCgroupParamUint(helper.CgroupPath, "cpu.cfs_quota_us")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse cpu.cfs_quota_us - %s", err)
|
||||||
|
}
|
||||||
|
if quota != quotaAfter {
|
||||||
|
t.Fatal("Got the wrong value, set cpu.cfs_quota_us failed.")
|
||||||
|
}
|
||||||
|
|
||||||
|
period, err := getCgroupParamUint(helper.CgroupPath, "cpu.cfs_period_us")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse cpu.cfs_period_us - %s", err)
|
||||||
|
}
|
||||||
|
if period != periodAfter {
|
||||||
|
t.Fatal("Got the wrong value, set cpu.cfs_period_us failed.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCpuStats(t *testing.T) {
|
func TestCpuStats(t *testing.T) {
|
||||||
helper := NewCgroupTestUtil("cpu", t)
|
helper := NewCgroupTestUtil("cpu", t)
|
||||||
defer helper.cleanup()
|
defer helper.cleanup()
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
package fs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCpusetSetCpus(t *testing.T) {
|
||||||
|
helper := NewCgroupTestUtil("cpuset", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
|
||||||
|
const (
|
||||||
|
cpusBefore = "0"
|
||||||
|
cpusAfter = "1-3"
|
||||||
|
)
|
||||||
|
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"cpuset.cpus": cpusBefore,
|
||||||
|
})
|
||||||
|
|
||||||
|
helper.CgroupData.c.CpusetCpus = cpusAfter
|
||||||
|
cpuset := &CpusetGroup{}
|
||||||
|
if err := cpuset.Set(helper.CgroupPath, helper.CgroupData.c); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
value, err := getCgroupParamString(helper.CgroupPath, "cpuset.cpus")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse cpuset.cpus - %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value != cpusAfter {
|
||||||
|
t.Fatal("Got the wrong value, set cpuset.cpus failed.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCpusetSetMems(t *testing.T) {
|
||||||
|
helper := NewCgroupTestUtil("cpuset", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
|
||||||
|
const (
|
||||||
|
memsBefore = "0"
|
||||||
|
memsAfter = "1"
|
||||||
|
)
|
||||||
|
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"cpuset.mems": memsBefore,
|
||||||
|
})
|
||||||
|
|
||||||
|
helper.CgroupData.c.CpusetMems = memsAfter
|
||||||
|
cpuset := &CpusetGroup{}
|
||||||
|
if err := cpuset.Set(helper.CgroupPath, helper.CgroupData.c); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
value, err := getCgroupParamString(helper.CgroupPath, "cpuset.mems")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse cpuset.mems - %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value != memsAfter {
|
||||||
|
t.Fatal("Got the wrong value, set cpuset.mems failed.")
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package fs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/libcontainer/configs"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
allowedDevices = []*configs.Device{
|
||||||
|
{
|
||||||
|
Path: "/dev/zero",
|
||||||
|
Type: 'c',
|
||||||
|
Major: 1,
|
||||||
|
Minor: 5,
|
||||||
|
Permissions: "rwm",
|
||||||
|
FileMode: 0666,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
allowedList = "c 1:5 rwm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestDevicesSetAllow(t *testing.T) {
|
||||||
|
helper := NewCgroupTestUtil("devices", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"device.deny": "a",
|
||||||
|
})
|
||||||
|
|
||||||
|
helper.CgroupData.c.AllowAllDevices = false
|
||||||
|
helper.CgroupData.c.AllowedDevices = allowedDevices
|
||||||
|
devices := &DevicesGroup{}
|
||||||
|
if err := devices.Set(helper.CgroupPath, helper.CgroupData.c); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: this doesn't make sence, the file devices.allow under real cgroupfs
|
||||||
|
// is not allowed to read. Our test path don't have cgroupfs mounted.
|
||||||
|
value, err := getCgroupParamString(helper.CgroupPath, "devices.allow")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse devices.allow - %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value != allowedList {
|
||||||
|
t.Fatal("Got the wrong value, set devices.allow failed.")
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package fs
|
package fs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/libcontainer/cgroups"
|
"github.com/docker/libcontainer/cgroups"
|
||||||
|
@ -14,6 +15,46 @@ rss 1024`
|
||||||
memoryFailcnt = "100\n"
|
memoryFailcnt = "100\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestMemorySetMemory(t *testing.T) {
|
||||||
|
helper := NewCgroupTestUtil("memory", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
|
||||||
|
const (
|
||||||
|
memoryBefore = 314572800 // 300M
|
||||||
|
memoryAfter = 524288000 // 500M
|
||||||
|
reservationBefore = 209715200 // 200M
|
||||||
|
reservationAfter = 314572800 // 300M
|
||||||
|
)
|
||||||
|
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"memory.limit_in_bytes": strconv.Itoa(memoryBefore),
|
||||||
|
"memory.soft_limit_in_bytes": strconv.Itoa(reservationBefore),
|
||||||
|
})
|
||||||
|
|
||||||
|
helper.CgroupData.c.Memory = memoryAfter
|
||||||
|
helper.CgroupData.c.MemoryReservation = reservationAfter
|
||||||
|
memory := &MemoryGroup{}
|
||||||
|
if err := memory.Set(helper.CgroupPath, helper.CgroupData.c); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
value, err := getCgroupParamUint(helper.CgroupPath, "memory.limit_in_bytes")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse memory.limit_in_bytes - %s", err)
|
||||||
|
}
|
||||||
|
if value != memoryAfter {
|
||||||
|
t.Fatal("Got the wrong value, set memory.limit_in_bytes failed.")
|
||||||
|
}
|
||||||
|
|
||||||
|
value, err = getCgroupParamUint(helper.CgroupPath, "memory.soft_limit_in_bytes")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse memory.soft_limit_in_bytes - %s", err)
|
||||||
|
}
|
||||||
|
if value != reservationAfter {
|
||||||
|
t.Fatal("Got the wrong value, set memory.soft_limit_in_bytes failed.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestMemoryStats(t *testing.T) {
|
func TestMemoryStats(t *testing.T) {
|
||||||
helper := NewCgroupTestUtil("memory", t)
|
helper := NewCgroupTestUtil("memory", t)
|
||||||
defer helper.cleanup()
|
defer helper.cleanup()
|
||||||
|
|
|
@ -10,6 +10,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/libcontainer/configs"
|
||||||
)
|
)
|
||||||
|
|
||||||
type cgroupTestUtil struct {
|
type cgroupTestUtil struct {
|
||||||
|
@ -26,7 +28,9 @@ type cgroupTestUtil struct {
|
||||||
|
|
||||||
// Creates a new test util for the specified subsystem
|
// Creates a new test util for the specified subsystem
|
||||||
func NewCgroupTestUtil(subsystem string, t *testing.T) *cgroupTestUtil {
|
func NewCgroupTestUtil(subsystem string, t *testing.T) *cgroupTestUtil {
|
||||||
d := &data{}
|
d := &data{
|
||||||
|
c: &configs.Cgroup{},
|
||||||
|
}
|
||||||
tempDir, err := ioutil.TempDir("", fmt.Sprintf("%s_cgroup_test", subsystem))
|
tempDir, err := ioutil.TempDir("", fmt.Sprintf("%s_cgroup_test", subsystem))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|
Loading…
Reference in New Issue