lxc_template_unit_test.go 2.9 KB

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