operatingsystem_test.go 3.2 KB

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