Port volumes and exit code tests
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
This commit is contained in:
parent
6beb858fb0
commit
03993eb534
|
@ -408,3 +408,31 @@ func TestVerifyContainerID(t *testing.T) {
|
||||||
|
|
||||||
logDone("run - verify container ID")
|
logDone("run - verify container ID")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test that creating a container with a volume doesn't crash. Regression test for #995.
|
||||||
|
func TestCreateVolume(t *testing.T) {
|
||||||
|
cmd := exec.Command(dockerBinary, "run", "-v", "/var/lib/data", "busybox", "true")
|
||||||
|
if _, err := runCommand(cmd); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteAllContainers()
|
||||||
|
|
||||||
|
logDone("run - create docker mangaed volume")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExitCode(t *testing.T) {
|
||||||
|
cmd := exec.Command(dockerBinary, "run", "busybox", "/bin/sh", "-c", "exit 72")
|
||||||
|
|
||||||
|
exit, err := runCommand(cmd)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("should not have a non nil error")
|
||||||
|
}
|
||||||
|
if exit != 72 {
|
||||||
|
t.Fatalf("expected exit code 72 received %d", exit)
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteAllContainers()
|
||||||
|
|
||||||
|
logDone("run - correct exit code")
|
||||||
|
}
|
||||||
|
|
|
@ -16,36 +16,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestStart(t *testing.T) {
|
|
||||||
daemon := mkDaemon(t)
|
|
||||||
defer nuke(daemon)
|
|
||||||
container, _, _ := mkContainer(daemon, []string{"-i", "_", "/bin/cat"}, t)
|
|
||||||
defer daemon.Destroy(container)
|
|
||||||
|
|
||||||
cStdin, err := container.StdinPipe()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := container.Start(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Give some time to the process to start
|
|
||||||
container.WaitTimeout(500 * time.Millisecond)
|
|
||||||
|
|
||||||
if !container.State.IsRunning() {
|
|
||||||
t.Errorf("Container should be running")
|
|
||||||
}
|
|
||||||
if err := container.Start(); err != nil {
|
|
||||||
t.Fatalf("A running container should be able to be started")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to avoid the timeout in destroy. Best effort, don't check error
|
|
||||||
cStdin.Close()
|
|
||||||
container.WaitTimeout(2 * time.Second)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCpuShares(t *testing.T) {
|
func TestCpuShares(t *testing.T) {
|
||||||
_, err1 := os.Stat("/sys/fs/cgroup/cpuacct,cpu")
|
_, err1 := os.Stat("/sys/fs/cgroup/cpuacct,cpu")
|
||||||
_, err2 := os.Stat("/sys/fs/cgroup/cpu,cpuacct")
|
_, err2 := os.Stat("/sys/fs/cgroup/cpu,cpuacct")
|
||||||
|
@ -81,46 +51,6 @@ func TestCpuShares(t *testing.T) {
|
||||||
container.WaitTimeout(2 * time.Second)
|
container.WaitTimeout(2 * time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRun(t *testing.T) {
|
|
||||||
daemon := mkDaemon(t)
|
|
||||||
defer nuke(daemon)
|
|
||||||
container, _, _ := mkContainer(daemon, []string{"_", "ls", "-al"}, t)
|
|
||||||
defer daemon.Destroy(container)
|
|
||||||
|
|
||||||
if container.State.IsRunning() {
|
|
||||||
t.Errorf("Container shouldn't be running")
|
|
||||||
}
|
|
||||||
if err := container.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if container.State.IsRunning() {
|
|
||||||
t.Errorf("Container shouldn't be running")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOutput(t *testing.T) {
|
|
||||||
daemon := mkDaemon(t)
|
|
||||||
defer nuke(daemon)
|
|
||||||
container, _, err := daemon.Create(
|
|
||||||
&runconfig.Config{
|
|
||||||
Image: GetTestImage(daemon).ID,
|
|
||||||
Cmd: []string{"echo", "-n", "foobar"},
|
|
||||||
},
|
|
||||||
"",
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer daemon.Destroy(container)
|
|
||||||
output, err := container.Output()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if string(output) != "foobar" {
|
|
||||||
t.Fatalf("%s != %s", string(output), "foobar")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestKillDifferentUser(t *testing.T) {
|
func TestKillDifferentUser(t *testing.T) {
|
||||||
daemon := mkDaemon(t)
|
daemon := mkDaemon(t)
|
||||||
defer nuke(daemon)
|
defer nuke(daemon)
|
||||||
|
@ -179,119 +109,6 @@ func TestKillDifferentUser(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test that creating a container with a volume doesn't crash. Regression test for #995.
|
|
||||||
func TestCreateVolume(t *testing.T) {
|
|
||||||
eng := NewTestEngine(t)
|
|
||||||
daemon := mkDaemonFromEngine(eng, t)
|
|
||||||
defer nuke(daemon)
|
|
||||||
|
|
||||||
config, hc, _, err := runconfig.Parse([]string{"-v", "/var/lib/data", unitTestImageID, "echo", "hello", "world"}, nil)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
jobCreate := eng.Job("create")
|
|
||||||
if err := jobCreate.ImportEnv(config); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
var id string
|
|
||||||
jobCreate.Stdout.AddString(&id)
|
|
||||||
if err := jobCreate.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
jobStart := eng.Job("start", id)
|
|
||||||
if err := jobStart.ImportEnv(hc); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if err := jobStart.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
// FIXME: this hack can be removed once Wait is a job
|
|
||||||
c := daemon.Get(id)
|
|
||||||
if c == nil {
|
|
||||||
t.Fatalf("Couldn't retrieve container %s from daemon", id)
|
|
||||||
}
|
|
||||||
c.WaitTimeout(500 * time.Millisecond)
|
|
||||||
c.Wait()
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestKill(t *testing.T) {
|
|
||||||
daemon := mkDaemon(t)
|
|
||||||
defer nuke(daemon)
|
|
||||||
container, _, err := daemon.Create(&runconfig.Config{
|
|
||||||
Image: GetTestImage(daemon).ID,
|
|
||||||
Cmd: []string{"sleep", "2"},
|
|
||||||
},
|
|
||||||
"",
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer daemon.Destroy(container)
|
|
||||||
|
|
||||||
if container.State.IsRunning() {
|
|
||||||
t.Errorf("Container shouldn't be running")
|
|
||||||
}
|
|
||||||
if err := container.Start(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Give some time to lxc to spawn the process
|
|
||||||
container.WaitTimeout(500 * time.Millisecond)
|
|
||||||
|
|
||||||
if !container.State.IsRunning() {
|
|
||||||
t.Errorf("Container should be running")
|
|
||||||
}
|
|
||||||
if err := container.Kill(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if container.State.IsRunning() {
|
|
||||||
t.Errorf("Container shouldn't be running")
|
|
||||||
}
|
|
||||||
container.Wait()
|
|
||||||
if container.State.IsRunning() {
|
|
||||||
t.Errorf("Container shouldn't be running")
|
|
||||||
}
|
|
||||||
// Try stopping twice
|
|
||||||
if err := container.Kill(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestExitCode(t *testing.T) {
|
|
||||||
daemon := mkDaemon(t)
|
|
||||||
defer nuke(daemon)
|
|
||||||
|
|
||||||
trueContainer, _, err := daemon.Create(&runconfig.Config{
|
|
||||||
Image: GetTestImage(daemon).ID,
|
|
||||||
Cmd: []string{"/bin/true"},
|
|
||||||
}, "")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer daemon.Destroy(trueContainer)
|
|
||||||
if err := trueContainer.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if code := trueContainer.State.GetExitCode(); code != 0 {
|
|
||||||
t.Fatalf("Unexpected exit code %d (expected 0)", code)
|
|
||||||
}
|
|
||||||
|
|
||||||
falseContainer, _, err := daemon.Create(&runconfig.Config{
|
|
||||||
Image: GetTestImage(daemon).ID,
|
|
||||||
Cmd: []string{"/bin/false"},
|
|
||||||
}, "")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer daemon.Destroy(falseContainer)
|
|
||||||
if err := falseContainer.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if code := falseContainer.State.GetExitCode(); code != 1 {
|
|
||||||
t.Fatalf("Unexpected exit code %d (expected 1)", code)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRestart(t *testing.T) {
|
func TestRestart(t *testing.T) {
|
||||||
daemon := mkDaemon(t)
|
daemon := mkDaemon(t)
|
||||||
defer nuke(daemon)
|
defer nuke(daemon)
|
||||||
|
|
Loading…
Reference in New Issue