lxc_template_unit_test.go 2.6 KB

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