2015-08-05 20:15:14 -04:00
|
|
|
// +build !windows
|
2015-06-03 15:01:53 -04:00
|
|
|
|
2015-08-05 20:15:14 -04:00
|
|
|
package daemon
|
2015-06-03 15:01:53 -04:00
|
|
|
|
|
|
|
import (
|
2015-08-05 20:15:14 -04:00
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
2015-06-03 15:01:53 -04:00
|
|
|
"testing"
|
|
|
|
|
2016-02-01 21:26:47 -05:00
|
|
|
"github.com/docker/docker/container"
|
|
|
|
containertypes "github.com/docker/engine-api/types/container"
|
2015-06-03 15:01:53 -04:00
|
|
|
)
|
|
|
|
|
2016-02-01 21:26:47 -05:00
|
|
|
// Unix test as uses settings which are not available on Windows
|
2015-08-05 20:15:14 -04:00
|
|
|
func TestAdjustCPUShares(t *testing.T) {
|
|
|
|
tmp, err := ioutil.TempDir("", "docker-daemon-unix-test-")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer os.RemoveAll(tmp)
|
|
|
|
daemon := &Daemon{
|
|
|
|
repository: tmp,
|
|
|
|
root: tmp,
|
|
|
|
}
|
|
|
|
|
2016-02-01 21:26:47 -05:00
|
|
|
hostConfig := &containertypes.HostConfig{
|
|
|
|
Resources: containertypes.Resources{CPUShares: linuxMinCPUShares - 1},
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
2015-08-05 20:15:14 -04:00
|
|
|
daemon.adaptContainerSettings(hostConfig, true)
|
2015-07-21 01:15:44 -04:00
|
|
|
if hostConfig.CPUShares != linuxMinCPUShares {
|
|
|
|
t.Errorf("Expected CPUShares to be %d", linuxMinCPUShares)
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
|
|
|
|
2015-07-21 01:15:44 -04:00
|
|
|
hostConfig.CPUShares = linuxMaxCPUShares + 1
|
2015-08-05 20:15:14 -04:00
|
|
|
daemon.adaptContainerSettings(hostConfig, true)
|
2015-07-21 01:15:44 -04:00
|
|
|
if hostConfig.CPUShares != linuxMaxCPUShares {
|
|
|
|
t.Errorf("Expected CPUShares to be %d", linuxMaxCPUShares)
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
|
|
|
|
2015-07-25 05:11:45 -04:00
|
|
|
hostConfig.CPUShares = 0
|
2015-08-05 20:15:14 -04:00
|
|
|
daemon.adaptContainerSettings(hostConfig, true)
|
2015-07-25 05:11:45 -04:00
|
|
|
if hostConfig.CPUShares != 0 {
|
2015-07-21 01:15:44 -04:00
|
|
|
t.Error("Expected CPUShares to be unchanged")
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
|
|
|
|
2015-07-25 05:11:45 -04:00
|
|
|
hostConfig.CPUShares = 1024
|
2015-08-05 20:15:14 -04:00
|
|
|
daemon.adaptContainerSettings(hostConfig, true)
|
2015-07-25 05:11:45 -04:00
|
|
|
if hostConfig.CPUShares != 1024 {
|
2015-07-21 01:15:44 -04:00
|
|
|
t.Error("Expected CPUShares to be unchanged")
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-02-01 21:26:47 -05:00
|
|
|
// Unix test as uses settings which are not available on Windows
|
2015-07-21 01:15:44 -04:00
|
|
|
func TestAdjustCPUSharesNoAdjustment(t *testing.T) {
|
2015-08-05 20:15:14 -04:00
|
|
|
tmp, err := ioutil.TempDir("", "docker-daemon-unix-test-")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer os.RemoveAll(tmp)
|
|
|
|
daemon := &Daemon{
|
|
|
|
repository: tmp,
|
|
|
|
root: tmp,
|
|
|
|
}
|
|
|
|
|
2016-02-01 21:26:47 -05:00
|
|
|
hostConfig := &containertypes.HostConfig{
|
|
|
|
Resources: containertypes.Resources{CPUShares: linuxMinCPUShares - 1},
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
2015-08-05 20:15:14 -04:00
|
|
|
daemon.adaptContainerSettings(hostConfig, false)
|
2015-07-21 01:15:44 -04:00
|
|
|
if hostConfig.CPUShares != linuxMinCPUShares-1 {
|
|
|
|
t.Errorf("Expected CPUShares to be %d", linuxMinCPUShares-1)
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
|
|
|
|
2015-07-21 01:15:44 -04:00
|
|
|
hostConfig.CPUShares = linuxMaxCPUShares + 1
|
2015-08-05 20:15:14 -04:00
|
|
|
daemon.adaptContainerSettings(hostConfig, false)
|
2015-07-21 01:15:44 -04:00
|
|
|
if hostConfig.CPUShares != linuxMaxCPUShares+1 {
|
|
|
|
t.Errorf("Expected CPUShares to be %d", linuxMaxCPUShares+1)
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
|
|
|
|
2015-07-25 05:11:45 -04:00
|
|
|
hostConfig.CPUShares = 0
|
2015-08-05 20:15:14 -04:00
|
|
|
daemon.adaptContainerSettings(hostConfig, false)
|
2015-07-25 05:11:45 -04:00
|
|
|
if hostConfig.CPUShares != 0 {
|
2015-07-21 01:15:44 -04:00
|
|
|
t.Error("Expected CPUShares to be unchanged")
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
|
|
|
|
2015-07-25 05:11:45 -04:00
|
|
|
hostConfig.CPUShares = 1024
|
2015-08-05 20:15:14 -04:00
|
|
|
daemon.adaptContainerSettings(hostConfig, false)
|
2015-07-25 05:11:45 -04:00
|
|
|
if hostConfig.CPUShares != 1024 {
|
2015-07-21 01:15:44 -04:00
|
|
|
t.Error("Expected CPUShares to be unchanged")
|
2015-06-03 15:01:53 -04:00
|
|
|
}
|
|
|
|
}
|
2016-02-01 21:26:47 -05:00
|
|
|
|
|
|
|
// Unix test as uses settings which are not available on Windows
|
2016-03-15 18:34:29 -04:00
|
|
|
func TestParseSecurityOptWithDeprecatedColon(t *testing.T) {
|
2016-02-01 21:26:47 -05:00
|
|
|
container := &container.Container{}
|
|
|
|
config := &containertypes.HostConfig{}
|
|
|
|
|
|
|
|
// test apparmor
|
2016-03-15 18:34:29 -04:00
|
|
|
config.SecurityOpt = []string{"apparmor=test_profile"}
|
2016-02-01 21:26:47 -05:00
|
|
|
if err := parseSecurityOpt(container, config); err != nil {
|
|
|
|
t.Fatalf("Unexpected parseSecurityOpt error: %v", err)
|
|
|
|
}
|
|
|
|
if container.AppArmorProfile != "test_profile" {
|
|
|
|
t.Fatalf("Unexpected AppArmorProfile, expected: \"test_profile\", got %q", container.AppArmorProfile)
|
|
|
|
}
|
|
|
|
|
|
|
|
// test seccomp
|
|
|
|
sp := "/path/to/seccomp_test.json"
|
2016-03-15 18:34:29 -04:00
|
|
|
config.SecurityOpt = []string{"seccomp=" + sp}
|
2016-02-01 21:26:47 -05:00
|
|
|
if err := parseSecurityOpt(container, config); err != nil {
|
|
|
|
t.Fatalf("Unexpected parseSecurityOpt error: %v", err)
|
|
|
|
}
|
|
|
|
if container.SeccompProfile != sp {
|
|
|
|
t.Fatalf("Unexpected AppArmorProfile, expected: %q, got %q", sp, container.SeccompProfile)
|
|
|
|
}
|
|
|
|
|
|
|
|
// test valid label
|
2016-03-15 18:34:29 -04:00
|
|
|
config.SecurityOpt = []string{"label=user:USER"}
|
|
|
|
if err := parseSecurityOpt(container, config); err != nil {
|
|
|
|
t.Fatalf("Unexpected parseSecurityOpt error: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// test invalid label
|
|
|
|
config.SecurityOpt = []string{"label"}
|
|
|
|
if err := parseSecurityOpt(container, config); err == nil {
|
|
|
|
t.Fatal("Expected parseSecurityOpt error, got nil")
|
|
|
|
}
|
|
|
|
|
|
|
|
// test invalid opt
|
|
|
|
config.SecurityOpt = []string{"test"}
|
|
|
|
if err := parseSecurityOpt(container, config); err == nil {
|
|
|
|
t.Fatal("Expected parseSecurityOpt error, got nil")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParseSecurityOpt(t *testing.T) {
|
|
|
|
container := &container.Container{}
|
|
|
|
config := &containertypes.HostConfig{}
|
|
|
|
|
|
|
|
// test apparmor
|
|
|
|
config.SecurityOpt = []string{"apparmor=test_profile"}
|
|
|
|
if err := parseSecurityOpt(container, config); err != nil {
|
|
|
|
t.Fatalf("Unexpected parseSecurityOpt error: %v", err)
|
|
|
|
}
|
|
|
|
if container.AppArmorProfile != "test_profile" {
|
|
|
|
t.Fatalf("Unexpected AppArmorProfile, expected: \"test_profile\", got %q", container.AppArmorProfile)
|
|
|
|
}
|
|
|
|
|
|
|
|
// test seccomp
|
|
|
|
sp := "/path/to/seccomp_test.json"
|
|
|
|
config.SecurityOpt = []string{"seccomp=" + sp}
|
|
|
|
if err := parseSecurityOpt(container, config); err != nil {
|
|
|
|
t.Fatalf("Unexpected parseSecurityOpt error: %v", err)
|
|
|
|
}
|
|
|
|
if container.SeccompProfile != sp {
|
|
|
|
t.Fatalf("Unexpected SeccompProfile, expected: %q, got %q", sp, container.SeccompProfile)
|
|
|
|
}
|
|
|
|
|
|
|
|
// test valid label
|
|
|
|
config.SecurityOpt = []string{"label=user:USER"}
|
2016-02-01 21:26:47 -05:00
|
|
|
if err := parseSecurityOpt(container, config); err != nil {
|
|
|
|
t.Fatalf("Unexpected parseSecurityOpt error: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// test invalid label
|
|
|
|
config.SecurityOpt = []string{"label"}
|
|
|
|
if err := parseSecurityOpt(container, config); err == nil {
|
|
|
|
t.Fatal("Expected parseSecurityOpt error, got nil")
|
|
|
|
}
|
|
|
|
|
|
|
|
// test invalid opt
|
|
|
|
config.SecurityOpt = []string{"test"}
|
|
|
|
if err := parseSecurityOpt(container, config); err == nil {
|
|
|
|
t.Fatal("Expected parseSecurityOpt error, got nil")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNetworkOptions(t *testing.T) {
|
|
|
|
daemon := &Daemon{}
|
|
|
|
dconfigCorrect := &Config{
|
|
|
|
CommonConfig: CommonConfig{
|
|
|
|
ClusterStore: "consul://localhost:8500",
|
|
|
|
ClusterAdvertise: "192.168.0.1:8000",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, err := daemon.networkOptions(dconfigCorrect); err != nil {
|
2016-02-22 14:22:20 -05:00
|
|
|
t.Fatalf("Expect networkOptions success, got error: %v", err)
|
2016-02-01 21:26:47 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
dconfigWrong := &Config{
|
|
|
|
CommonConfig: CommonConfig{
|
|
|
|
ClusterStore: "consul://localhost:8500://test://bbb",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, err := daemon.networkOptions(dconfigWrong); err == nil {
|
|
|
|
t.Fatalf("Expected networkOptions error, got nil")
|
|
|
|
}
|
|
|
|
}
|