lxc_template_unit_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package lxc
  2. import (
  3. "bufio"
  4. "fmt"
  5. "github.com/dotcloud/docker/daemon/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{
  70. "lxc": {
  71. "lxc.utsname = docker",
  72. "lxc.cgroup.cpuset.cpus = 0,1",
  73. },
  74. },
  75. Network: &execdriver.Network{
  76. Mtu: 1500,
  77. Interface: nil,
  78. },
  79. }
  80. p, err := driver.generateLXCConfig(command)
  81. if err != nil {
  82. t.Fatal(err)
  83. }
  84. grepFile(t, p, "lxc.utsname = docker")
  85. grepFile(t, p, "lxc.cgroup.cpuset.cpus = 0,1")
  86. }
  87. func grepFile(t *testing.T, path string, pattern string) {
  88. f, err := os.Open(path)
  89. if err != nil {
  90. t.Fatal(err)
  91. }
  92. defer f.Close()
  93. r := bufio.NewReader(f)
  94. var (
  95. line string
  96. )
  97. err = nil
  98. for err == nil {
  99. line, err = r.ReadString('\n')
  100. if strings.Contains(line, pattern) == true {
  101. return
  102. }
  103. }
  104. t.Fatalf("grepFile: pattern \"%s\" not found in \"%s\"", pattern, path)
  105. }
  106. func TestEscapeFstabSpaces(t *testing.T) {
  107. var testInputs = map[string]string{
  108. " ": "\\040",
  109. "": "",
  110. "/double space": "/double\\040\\040space",
  111. "/some long test string": "/some\\040long\\040test\\040string",
  112. "/var/lib/docker": "/var/lib/docker",
  113. " leading": "\\040leading",
  114. "trailing ": "trailing\\040",
  115. }
  116. for in, exp := range testInputs {
  117. if out := escapeFstabSpaces(in); exp != out {
  118. t.Logf("Expected %s got %s", exp, out)
  119. t.Fail()
  120. }
  121. }
  122. }