lxc_template_unit_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. Network: &execdriver.Network{
  42. Mtu: 1500,
  43. Interface: nil,
  44. },
  45. }
  46. p, err := driver.generateLXCConfig(command)
  47. if err != nil {
  48. t.Fatal(err)
  49. }
  50. grepFile(t, p,
  51. fmt.Sprintf("lxc.cgroup.memory.limit_in_bytes = %d", mem))
  52. grepFile(t, p,
  53. fmt.Sprintf("lxc.cgroup.memory.memsw.limit_in_bytes = %d", mem*2))
  54. }
  55. func TestCustomLxcConfig(t *testing.T) {
  56. root, err := ioutil.TempDir("", "TestCustomLxcConfig")
  57. if err != nil {
  58. t.Fatal(err)
  59. }
  60. defer os.RemoveAll(root)
  61. os.MkdirAll(path.Join(root, "containers", "1"), 0777)
  62. driver, err := NewDriver(root, false)
  63. if err != nil {
  64. t.Fatal(err)
  65. }
  66. command := &execdriver.Command{
  67. ID: "1",
  68. Privileged: false,
  69. Config: map[string][]string{"lxc": {
  70. "lxc.utsname = docker",
  71. "lxc.cgroup.cpuset.cpus = 0,1",
  72. },
  73. },
  74. Network: &execdriver.Network{
  75. Mtu: 1500,
  76. Interface: nil,
  77. },
  78. }
  79. p, err := driver.generateLXCConfig(command)
  80. if err != nil {
  81. t.Fatal(err)
  82. }
  83. grepFile(t, p, "lxc.utsname = docker")
  84. grepFile(t, p, "lxc.cgroup.cpuset.cpus = 0,1")
  85. }
  86. func grepFile(t *testing.T, path string, pattern string) {
  87. f, err := os.Open(path)
  88. if err != nil {
  89. t.Fatal(err)
  90. }
  91. defer f.Close()
  92. r := bufio.NewReader(f)
  93. var (
  94. line string
  95. )
  96. err = nil
  97. for err == nil {
  98. line, err = r.ReadString('\n')
  99. if strings.Contains(line, pattern) == true {
  100. return
  101. }
  102. }
  103. t.Fatalf("grepFile: pattern \"%s\" not found in \"%s\"", pattern, path)
  104. }
  105. func TestEscapeFstabSpaces(t *testing.T) {
  106. var testInputs = map[string]string{
  107. " ": "\\040",
  108. "": "",
  109. "/double space": "/double\\040\\040space",
  110. "/some long test string": "/some\\040long\\040test\\040string",
  111. "/var/lib/docker": "/var/lib/docker",
  112. " leading": "\\040leading",
  113. "trailing ": "trailing\\040",
  114. }
  115. for in, exp := range testInputs {
  116. if out := escapeFstabSpaces(in); exp != out {
  117. t.Logf("Expected %s got %s", exp, out)
  118. t.Fail()
  119. }
  120. }
  121. }