308 lines
7.0 KiB
Go
308 lines
7.0 KiB
Go
// +build !remote
|
|
|
|
package config
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
|
|
. "github.com/onsi/ginkgo"
|
|
"github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("Config Local", func() {
|
|
BeforeEach(beforeEach)
|
|
|
|
It("should fail on invalid NetworkConfigDir", func() {
|
|
// Given
|
|
tmpfile := path.Join(os.TempDir(), "wrong-file")
|
|
file, err := os.Create(tmpfile)
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
file.Close()
|
|
defer os.Remove(tmpfile)
|
|
sut.Network.NetworkConfigDir = tmpfile
|
|
sut.Network.CNIPluginDirs = []string{}
|
|
|
|
// When
|
|
err = sut.Network.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on invalid CNIPluginDirs", func() {
|
|
validDirPath, err := ioutil.TempDir("", "config-empty")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer os.RemoveAll(validDirPath)
|
|
// Given
|
|
sut.Network.NetworkConfigDir = validDirPath
|
|
sut.Network.CNIPluginDirs = []string{invalidPath}
|
|
|
|
// When
|
|
err = sut.Network.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail in validating invalid PluginDir", func() {
|
|
validDirPath, err := ioutil.TempDir("", "config-empty")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer os.RemoveAll(validDirPath)
|
|
// Given
|
|
sut.Network.NetworkConfigDir = validDirPath
|
|
sut.Network.CNIPluginDirs = []string{invalidPath}
|
|
|
|
// When
|
|
err = sut.Network.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).ToNot(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on invalid CNIPluginDirs", func() {
|
|
validDirPath, err := ioutil.TempDir("", "config-empty")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer os.RemoveAll(validDirPath)
|
|
// Given
|
|
sut.Network.NetworkConfigDir = validDirPath
|
|
sut.Network.CNIPluginDirs = []string{invalidPath}
|
|
|
|
// When
|
|
err = sut.Network.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail during runtime", func() {
|
|
validDirPath, err := ioutil.TempDir("", "config-empty")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer os.RemoveAll(validDirPath)
|
|
// Given
|
|
sut.Network.NetworkConfigDir = validDirPath
|
|
tmpDir := path.Join(os.TempDir(), "cni-test")
|
|
sut.Network.CNIPluginDirs = []string{tmpDir}
|
|
defer os.RemoveAll(tmpDir)
|
|
|
|
// When
|
|
err = sut.Network.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).ToNot(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on invalid device mode", func() {
|
|
// Given
|
|
sut.Containers.Devices = []string{"/dev/null:/dev/null:abc"}
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on invalid first device", func() {
|
|
// Given
|
|
sut.Containers.Devices = []string{"wrong:/dev/null:rw"}
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on invalid second device", func() {
|
|
// Given
|
|
sut.Containers.Devices = []string{"/dev/null:wrong:rw"}
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on invalid device", func() {
|
|
// Given
|
|
sut.Containers.Devices = []string{invalidPath}
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on wrong invalid device specification", func() {
|
|
// Given
|
|
sut.Containers.Devices = []string{"::::"}
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on bad timezone", func() {
|
|
// Given
|
|
sut.Containers.TZ = "foo"
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should succeed on good timezone", func() {
|
|
// Given
|
|
sut.Containers.TZ = "US/Eastern"
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
})
|
|
|
|
It("should succeed on local timezone", func() {
|
|
// Given
|
|
sut.Containers.TZ = "local"
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
})
|
|
|
|
It("should fail on wrong DefaultUlimits", func() {
|
|
// Given
|
|
sut.Containers.DefaultUlimits = []string{invalidPath}
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
|
|
It("should return containers engine env", func() {
|
|
// Given
|
|
expectedEnv := []string{"http_proxy=internal.proxy.company.com", "foo=bar"}
|
|
// When
|
|
config, err := NewConfig("testdata/containers_default.conf")
|
|
// Then
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
gomega.Expect(config.Engine.Env).To(gomega.BeEquivalentTo(expectedEnv))
|
|
})
|
|
|
|
It("Expect Remote to be False", func() {
|
|
// Given
|
|
// When
|
|
config, err := NewConfig("")
|
|
// Then
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
gomega.Expect(config.Engine.Remote).To(gomega.BeFalse())
|
|
})
|
|
|
|
It("verify getDefaultEnv", func() {
|
|
envs := []string{
|
|
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
|
"TERM=xterm",
|
|
}
|
|
// Given we do
|
|
oldContainersConf, envSet := os.LookupEnv("CONTAINERS_CONF")
|
|
os.Setenv("CONTAINERS_CONF", "/dev/null")
|
|
|
|
// When
|
|
config, err := Default()
|
|
|
|
// Undo that
|
|
if envSet {
|
|
os.Setenv("CONTAINERS_CONF", oldContainersConf)
|
|
} else {
|
|
os.Unsetenv("CONTAINERS_CONF")
|
|
}
|
|
// Then
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
gomega.Expect(config.GetDefaultEnv()).To(gomega.BeEquivalentTo(envs))
|
|
config.Containers.HTTPProxy = true
|
|
gomega.Expect(config.GetDefaultEnv()).To(gomega.BeEquivalentTo(envs))
|
|
os.Setenv("HTTP_PROXY", "localhost")
|
|
os.Setenv("FOO", "BAR")
|
|
newenvs := []string{"HTTP_PROXY=localhost"}
|
|
envs = append(newenvs, envs...)
|
|
gomega.Expect(config.GetDefaultEnv()).To(gomega.BeEquivalentTo(envs))
|
|
config.Containers.HTTPProxy = false
|
|
config.Containers.EnvHost = true
|
|
envString := strings.Join(config.GetDefaultEnv(), ",")
|
|
gomega.Expect(envString).To(gomega.ContainSubstring("FOO=BAR"))
|
|
gomega.Expect(envString).To(gomega.ContainSubstring("HTTP_PROXY=localhost"))
|
|
})
|
|
|
|
It("write", func() {
|
|
tmpfile := "containers.conf.test"
|
|
oldContainersConf, envSet := os.LookupEnv("CONTAINERS_CONF")
|
|
os.Setenv("CONTAINERS_CONF", tmpfile)
|
|
config, err := ReadCustomConfig()
|
|
// Undo that
|
|
if envSet {
|
|
os.Setenv("CONTAINERS_CONF", oldContainersConf)
|
|
} else {
|
|
os.Unsetenv("CONTAINERS_CONF")
|
|
}
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
config.Containers.Devices = []string{"/dev/null:/dev/null:rw",
|
|
"/dev/sdc/",
|
|
"/dev/sdc:/dev/xvdc",
|
|
"/dev/sdc:rm",
|
|
}
|
|
|
|
err = config.Write()
|
|
// Then
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
defer os.Remove(tmpfile)
|
|
})
|
|
It("Default Umask", func() {
|
|
// Given
|
|
// When
|
|
config, err := NewConfig("")
|
|
// Then
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
gomega.Expect(config.Containers.Umask).To(gomega.Equal("0022"))
|
|
})
|
|
It("Set Umask", func() {
|
|
// Given
|
|
// When
|
|
config, err := NewConfig("testdata/containers_default.conf")
|
|
// Then
|
|
gomega.Expect(err).To(gomega.BeNil())
|
|
gomega.Expect(config.Containers.Umask).To(gomega.Equal("0002"))
|
|
})
|
|
It("Should fail on bad Umask", func() {
|
|
// Given
|
|
sut.Containers.Umask = "88888"
|
|
|
|
// When
|
|
err := sut.Containers.Validate()
|
|
|
|
// Then
|
|
gomega.Expect(err).NotTo(gomega.BeNil())
|
|
})
|
|
})
|