automation-tests/common/pkg/config/config_local_test.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())
})
})