lxc_template_unit_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // +build linux
  2. package lxc
  3. import (
  4. "bufio"
  5. "fmt"
  6. "io/ioutil"
  7. "math/rand"
  8. "os"
  9. "path"
  10. "strings"
  11. "testing"
  12. "time"
  13. "github.com/docker/libcontainer/devices"
  14. "github.com/dotcloud/docker/daemon/execdriver"
  15. )
  16. func TestLXCConfig(t *testing.T) {
  17. root, err := ioutil.TempDir("", "TestLXCConfig")
  18. if err != nil {
  19. t.Fatal(err)
  20. }
  21. defer os.RemoveAll(root)
  22. os.MkdirAll(path.Join(root, "containers", "1"), 0777)
  23. // Memory is allocated randomly for testing
  24. rand.Seed(time.Now().UTC().UnixNano())
  25. var (
  26. memMin = 33554432
  27. memMax = 536870912
  28. mem = memMin + rand.Intn(memMax-memMin)
  29. cpuMin = 100
  30. cpuMax = 10000
  31. cpu = cpuMin + rand.Intn(cpuMax-cpuMin)
  32. )
  33. driver, err := NewDriver(root, false)
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. command := &execdriver.Command{
  38. ID: "1",
  39. Resources: &execdriver.Resources{
  40. Memory: int64(mem),
  41. CpuShares: int64(cpu),
  42. },
  43. Network: &execdriver.Network{
  44. Mtu: 1500,
  45. Interface: nil,
  46. },
  47. AllowedDevices: make([]*devices.Device, 0),
  48. }
  49. p, err := driver.generateLXCConfig(command)
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. grepFile(t, p,
  54. fmt.Sprintf("lxc.cgroup.memory.limit_in_bytes = %d", mem))
  55. grepFile(t, p,
  56. fmt.Sprintf("lxc.cgroup.memory.memsw.limit_in_bytes = %d", mem*2))
  57. }
  58. func TestCustomLxcConfig(t *testing.T) {
  59. root, err := ioutil.TempDir("", "TestCustomLxcConfig")
  60. if err != nil {
  61. t.Fatal(err)
  62. }
  63. defer os.RemoveAll(root)
  64. os.MkdirAll(path.Join(root, "containers", "1"), 0777)
  65. driver, err := NewDriver(root, false)
  66. if err != nil {
  67. t.Fatal(err)
  68. }
  69. command := &execdriver.Command{
  70. ID: "1",
  71. Privileged: false,
  72. Config: map[string][]string{
  73. "lxc": {
  74. "lxc.utsname = docker",
  75. "lxc.cgroup.cpuset.cpus = 0,1",
  76. },
  77. },
  78. Network: &execdriver.Network{
  79. Mtu: 1500,
  80. Interface: nil,
  81. },
  82. }
  83. p, err := driver.generateLXCConfig(command)
  84. if err != nil {
  85. t.Fatal(err)
  86. }
  87. grepFile(t, p, "lxc.utsname = docker")
  88. grepFile(t, p, "lxc.cgroup.cpuset.cpus = 0,1")
  89. }
  90. func grepFile(t *testing.T, path string, pattern string) {
  91. f, err := os.Open(path)
  92. if err != nil {
  93. t.Fatal(err)
  94. }
  95. defer f.Close()
  96. r := bufio.NewReader(f)
  97. var (
  98. line string
  99. )
  100. err = nil
  101. for err == nil {
  102. line, err = r.ReadString('\n')
  103. if strings.Contains(line, pattern) == true {
  104. return
  105. }
  106. }
  107. t.Fatalf("grepFile: pattern \"%s\" not found in \"%s\"", pattern, path)
  108. }
  109. func TestEscapeFstabSpaces(t *testing.T) {
  110. var testInputs = map[string]string{
  111. " ": "\\040",
  112. "": "",
  113. "/double space": "/double\\040\\040space",
  114. "/some long test string": "/some\\040long\\040test\\040string",
  115. "/var/lib/docker": "/var/lib/docker",
  116. " leading": "\\040leading",
  117. "trailing ": "trailing\\040",
  118. }
  119. for in, exp := range testInputs {
  120. if out := escapeFstabSpaces(in); exp != out {
  121. t.Logf("Expected %s got %s", exp, out)
  122. t.Fail()
  123. }
  124. }
  125. }