operatingsystem_unix_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // +build linux freebsd
  2. package operatingsystem
  3. import (
  4. "io/ioutil"
  5. "os"
  6. "path/filepath"
  7. "testing"
  8. )
  9. func TestGetOperatingSystem(t *testing.T) {
  10. var (
  11. backup = etcOsRelease
  12. ubuntuTrusty = []byte(`NAME="Ubuntu"
  13. VERSION="14.04, Trusty Tahr"
  14. ID=ubuntu
  15. ID_LIKE=debian
  16. PRETTY_NAME="Ubuntu 14.04 LTS"
  17. VERSION_ID="14.04"
  18. HOME_URL="http://www.ubuntu.com/"
  19. SUPPORT_URL="http://help.ubuntu.com/"
  20. BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"`)
  21. gentoo = []byte(`NAME=Gentoo
  22. ID=gentoo
  23. PRETTY_NAME="Gentoo/Linux"
  24. ANSI_COLOR="1;32"
  25. HOME_URL="http://www.gentoo.org/"
  26. SUPPORT_URL="http://www.gentoo.org/main/en/support.xml"
  27. BUG_REPORT_URL="https://bugs.gentoo.org/"
  28. `)
  29. noPrettyName = []byte(`NAME="Ubuntu"
  30. VERSION="14.04, Trusty Tahr"
  31. ID=ubuntu
  32. ID_LIKE=debian
  33. VERSION_ID="14.04"
  34. HOME_URL="http://www.ubuntu.com/"
  35. SUPPORT_URL="http://help.ubuntu.com/"
  36. BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"`)
  37. )
  38. dir := os.TempDir()
  39. etcOsRelease = filepath.Join(dir, "etcOsRelease")
  40. defer func() {
  41. os.Remove(etcOsRelease)
  42. etcOsRelease = backup
  43. }()
  44. for expect, osRelease := range map[string][]byte{
  45. "Ubuntu 14.04 LTS": ubuntuTrusty,
  46. "Gentoo/Linux": gentoo,
  47. "": noPrettyName,
  48. } {
  49. if err := ioutil.WriteFile(etcOsRelease, osRelease, 0600); err != nil {
  50. t.Fatalf("failed to write to %s: %v", etcOsRelease, err)
  51. }
  52. s, err := GetOperatingSystem()
  53. if s != expect {
  54. if expect == "" {
  55. t.Fatalf("Expected error 'PRETTY_NAME not found', but got %v", err)
  56. } else {
  57. t.Fatalf("Expected '%s', but got '%s'. Err=%v", expect, s, err)
  58. }
  59. }
  60. }
  61. }
  62. func TestIsContainerized(t *testing.T) {
  63. var (
  64. backup = proc1Cgroup
  65. nonContainerizedProc1Cgroupsystemd226 = []byte(`9:memory:/init.scope
  66. 8:net_cls,net_prio:/
  67. 7:cpuset:/
  68. 6:freezer:/
  69. 5:devices:/init.scope
  70. 4:blkio:/init.scope
  71. 3:cpu,cpuacct:/init.scope
  72. 2:perf_event:/
  73. 1:name=systemd:/init.scope
  74. `)
  75. nonContainerizedProc1Cgroup = []byte(`14:name=systemd:/
  76. 13:hugetlb:/
  77. 12:net_prio:/
  78. 11:perf_event:/
  79. 10:bfqio:/
  80. 9:blkio:/
  81. 8:net_cls:/
  82. 7:freezer:/
  83. 6:devices:/
  84. 5:memory:/
  85. 4:cpuacct:/
  86. 3:cpu:/
  87. 2:cpuset:/
  88. `)
  89. containerizedProc1Cgroup = []byte(`9:perf_event:/docker/3cef1b53c50b0fa357d994f8a1a8cd783c76bbf4f5dd08b226e38a8bd331338d
  90. 8:blkio:/docker/3cef1b53c50b0fa357d994f8a1a8cd783c76bbf4f5dd08b226e38a8bd331338d
  91. 7:net_cls:/
  92. 6:freezer:/docker/3cef1b53c50b0fa357d994f8a1a8cd783c76bbf4f5dd08b226e38a8bd331338d
  93. 5:devices:/docker/3cef1b53c50b0fa357d994f8a1a8cd783c76bbf4f5dd08b226e38a8bd331338d
  94. 4:memory:/docker/3cef1b53c50b0fa357d994f8a1a8cd783c76bbf4f5dd08b226e38a8bd331338d
  95. 3:cpuacct:/docker/3cef1b53c50b0fa357d994f8a1a8cd783c76bbf4f5dd08b226e38a8bd331338d
  96. 2:cpu:/docker/3cef1b53c50b0fa357d994f8a1a8cd783c76bbf4f5dd08b226e38a8bd331338d
  97. 1:cpuset:/`)
  98. )
  99. dir := os.TempDir()
  100. proc1Cgroup = filepath.Join(dir, "proc1Cgroup")
  101. defer func() {
  102. os.Remove(proc1Cgroup)
  103. proc1Cgroup = backup
  104. }()
  105. if err := ioutil.WriteFile(proc1Cgroup, nonContainerizedProc1Cgroup, 0600); err != nil {
  106. t.Fatalf("failed to write to %s: %v", proc1Cgroup, err)
  107. }
  108. inContainer, err := IsContainerized()
  109. if err != nil {
  110. t.Fatal(err)
  111. }
  112. if inContainer {
  113. t.Fatal("Wrongly assuming containerized")
  114. }
  115. if err := ioutil.WriteFile(proc1Cgroup, nonContainerizedProc1Cgroupsystemd226, 0600); err != nil {
  116. t.Fatalf("failed to write to %s: %v", proc1Cgroup, err)
  117. }
  118. inContainer, err = IsContainerized()
  119. if err != nil {
  120. t.Fatal(err)
  121. }
  122. if inContainer {
  123. t.Fatal("Wrongly assuming containerized for systemd /init.scope cgroup layout")
  124. }
  125. if err := ioutil.WriteFile(proc1Cgroup, containerizedProc1Cgroup, 0600); err != nil {
  126. t.Fatalf("failed to write to %s: %v", proc1Cgroup, err)
  127. }
  128. inContainer, err = IsContainerized()
  129. if err != nil {
  130. t.Fatal(err)
  131. }
  132. if !inContainer {
  133. t.Fatal("Wrongly assuming non-containerized")
  134. }
  135. }