cgroup_test.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package cgroup
  2. import (
  3. "path"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. func TestNewFromProcessCgroupFile(t *testing.T) {
  8. cg, err := NewFromProcessCgroupFile(path.Join("fixtures/proc/100/cgroup"))
  9. assert.Nil(t, err)
  10. assert.Equal(t, "/system.slice/docker.service", cg.Id)
  11. assert.Equal(t, V1, cg.Version)
  12. assert.Equal(t, "/system.slice/docker.service", cg.ContainerId)
  13. assert.Equal(t, ContainerTypeSystemdService, cg.ContainerType)
  14. assert.Equal(t,
  15. map[string]string{
  16. "blkio": "/system.slice/docker.service",
  17. "cpu": "/system.slice/docker.service",
  18. "cpuacct": "/system.slice/docker.service",
  19. "cpuset": "/",
  20. "devices": "/system.slice/docker.service",
  21. "freezer": "/",
  22. "hugetlb": "/",
  23. "memory": "/system.slice/docker.service",
  24. "name=systemd": "/system.slice/docker.service",
  25. "net_cls": "/",
  26. "net_prio": "/",
  27. "perf_event": "/",
  28. "pids": "/system.slice/docker.service",
  29. },
  30. cg.subsystems,
  31. )
  32. cg, err = NewFromProcessCgroupFile(path.Join("fixtures/proc/200/cgroup"))
  33. assert.Nil(t, err)
  34. assert.Equal(t, V1, cg.Version)
  35. assert.Equal(t, "/docker/b43d92bf1e5c6f78bb9b7bc6f40721280299855ba692092716e3a1b6c0b86f3f", cg.Id)
  36. assert.Equal(t, "b43d92bf1e5c6f78bb9b7bc6f40721280299855ba692092716e3a1b6c0b86f3f", cg.ContainerId)
  37. assert.Equal(t, ContainerTypeDocker, cg.ContainerType)
  38. cg, err = NewFromProcessCgroupFile(path.Join("fixtures/proc/300/cgroup"))
  39. assert.Nil(t, err)
  40. assert.Equal(t, V1, cg.Version)
  41. assert.Equal(t, "/kubepods/burstable/pod6a4ce4a0-ba47-11ea-b2a7-0cc47ac5979e/17db96a24ae1e9dd57143e62b1cb0d2d35e693c65c774c7470e87b0572e07c1a", cg.Id)
  42. assert.Equal(t, "17db96a24ae1e9dd57143e62b1cb0d2d35e693c65c774c7470e87b0572e07c1a", cg.ContainerId)
  43. assert.Equal(t, ContainerTypeDocker, cg.ContainerType)
  44. cg, err = NewFromProcessCgroupFile(path.Join("fixtures/proc/400/cgroup"))
  45. assert.Nil(t, err)
  46. assert.Equal(t, V2, cg.Version)
  47. assert.Equal(t, "/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod8712f785_1a3e_41ec_a00b_e2dcc77431cb.slice/docker-73051af271105c07e1f493b34856a77e665e3b0b4fc72f76c807dfbffeb881bd.scope", cg.Id)
  48. assert.Equal(t, "73051af271105c07e1f493b34856a77e665e3b0b4fc72f76c807dfbffeb881bd", cg.ContainerId)
  49. assert.Equal(t, ContainerTypeDocker, cg.ContainerType)
  50. cg, err = NewFromProcessCgroupFile(path.Join("fixtures/proc/600/cgroup"))
  51. assert.Nil(t, err)
  52. assert.Equal(t, V1, cg.Version)
  53. assert.Equal(t, "/system.slice/springboot.service", cg.Id)
  54. assert.Equal(t, "/system.slice/springboot.service", cg.ContainerId)
  55. assert.Equal(t, ContainerTypeSystemdService, cg.ContainerType)
  56. baseCgroupPath = "/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podc83d0428_58af_41eb_8dba_b9e6eddffe7b.slice/docker-0e612005fd07e7f47e2cd07df99a2b4e909446814d71d0b5e4efc7159dd51252.scope"
  57. defer func() {
  58. baseCgroupPath = ""
  59. }()
  60. cg, err = NewFromProcessCgroupFile(path.Join("fixtures/proc/500/cgroup"))
  61. assert.Nil(t, err)
  62. assert.Equal(t, V2, cg.Version)
  63. assert.Equal(t, "/system.slice/docker-ba7b10d15d16e10e3de7a2dcd408a3d971169ae303f46cfad4c5453c6326fee2.scope", cg.Id)
  64. assert.Equal(t, "ba7b10d15d16e10e3de7a2dcd408a3d971169ae303f46cfad4c5453c6326fee2", cg.ContainerId)
  65. assert.Equal(t, ContainerTypeDocker, cg.ContainerType)
  66. }
  67. func TestContainerByCgroup(t *testing.T) {
  68. as := assert.New(t)
  69. typ, id, err := containerByCgroup("/kubepods/burstable/pod9729a196c4723b60ab401eaff722982d/d166c6190614efc91956b78e96d74c3fbc96ca8e91948c36de3bc5b0e7b27d48")
  70. as.Equal(typ, ContainerTypeDocker)
  71. as.Equal("d166c6190614efc91956b78e96d74c3fbc96ca8e91948c36de3bc5b0e7b27d48", id)
  72. as.Nil(err)
  73. typ, id, err = containerByCgroup("/kubepods/besteffort/pod0d08203e-255a-11e9-8cd9-0007cb0b2cc8/671a50f5d60566556912f61511d0ec9e4d5c78d53fbc4676727180438bbbbc55/kube-proxy")
  74. as.Equal(typ, ContainerTypeDocker)
  75. as.Equal("671a50f5d60566556912f61511d0ec9e4d5c78d53fbc4676727180438bbbbc55", id)
  76. as.Nil(err)
  77. typ, id, err = containerByCgroup("/kubepods/poda38c12e8-255a-11e9-8cd9-0007cb0b2cc8/32c562ed81a2622b37b80cb216859820ba51bd694f60ee4cf10d07a4011266f8")
  78. as.Equal(typ, ContainerTypeDocker)
  79. as.Equal("32c562ed81a2622b37b80cb216859820ba51bd694f60ee4cf10d07a4011266f8", id)
  80. as.Nil(err)
  81. typ, id, err = containerByCgroup("/docker/63425c4a8b4291744a79dd9011fddc7a1f8ffda61f65d72196aa01d00cae2e2d")
  82. as.Equal(typ, ContainerTypeDocker)
  83. as.Equal("63425c4a8b4291744a79dd9011fddc7a1f8ffda61f65d72196aa01d00cae2e2d", id)
  84. as.Nil(err)
  85. typ, id, err = containerByCgroup("/lxc/mysql-primary-db")
  86. as.Equal(typ, ContainerTypeLxc)
  87. as.Equal("mysql-primary-db", id)
  88. as.Nil(err)
  89. typ, id, err = containerByCgroup("/kubepods/poda48c12e8-255a-11e9-8cd9-0007cb0b2cc8/crio-63425c4a8b4291744a79dd9011fddc7a1f8ffda61f65d72196aa01d00cae2e2e")
  90. as.Equal(typ, ContainerTypeCrio)
  91. as.Equal("63425c4a8b4291744a79dd9011fddc7a1f8ffda61f65d72196aa01d00cae2e2e", id)
  92. as.Nil(err)
  93. typ, id, err = containerByCgroup("/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod2942c55e_c9cb_428a_93f4_eaf89c1f3ce0.slice/crio-49f9e8e5395d57c1083996c09e2e6f042d5fe1ec0310facab32f94912b35ce59.scope")
  94. as.Equal(typ, ContainerTypeCrio)
  95. as.Equal("49f9e8e5395d57c1083996c09e2e6f042d5fe1ec0310facab32f94912b35ce59", id)
  96. as.Nil(err)
  97. typ, id, err = containerByCgroup("/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod3e61c214bc3ed9ff81e21474dd6cba17.slice/cri-containerd-c74b0f5062f0bc726cae1e9369ad4a95deed6b298d247f0407475adb23fa3190")
  98. as.Equal(typ, ContainerTypeContainerd)
  99. as.Equal("c74b0f5062f0bc726cae1e9369ad4a95deed6b298d247f0407475adb23fa3190", id)
  100. as.Nil(err)
  101. typ, id, err = containerByCgroup("/system.slice/system-serial\\x2dgetty.slice")
  102. as.Equal(typ, ContainerTypeSystemdService)
  103. as.Equal("/system.slice/system-serial\\x2dgetty.slice", id)
  104. as.Nil(err)
  105. typ, id, err = containerByCgroup("/runtime.slice/kubelet.service")
  106. as.Equal(typ, ContainerTypeSystemdService)
  107. as.Equal("/runtime.slice/kubelet.service", id)
  108. as.Nil(err)
  109. typ, id, err = containerByCgroup("/system.slice/system-postgresql.slice/[email protected]")
  110. as.Equal(typ, ContainerTypeSystemdService)
  111. as.Equal("/system.slice/system-postgresql.slice", id)
  112. as.Nil(err)
  113. typ, id, err = containerByCgroup("/system.slice/containerd.service/kubepods-burstable-pod4ed02c0b_0df8_4d14_a30e_fd589ee4143a.slice:cri-containerd:d4a9f9195eaf7e4a729f24151101e1de61f1398677e7b82acfb936dff0b4ce55")
  114. as.Equal(typ, ContainerTypeContainerd)
  115. as.Equal("d4a9f9195eaf7e4a729f24151101e1de61f1398677e7b82acfb936dff0b4ce55", id)
  116. as.Nil(err)
  117. }