moby--moby/contrib/crashTest.go

97 lines
1.8 KiB
Go
Raw Normal View History

2013-04-14 22:13:32 +00:00
package main
import (
"io"
"log"
"os"
"os/exec"
"time"
)
const DOCKER_PATH = "/home/creack/dotcloud/docker/docker/docker"
func runDaemon() (*exec.Cmd, error) {
2013-04-16 22:20:04 +00:00
os.Remove("/var/run/docker.pid")
2013-04-14 22:13:32 +00:00
cmd := exec.Command(DOCKER_PATH, "-d")
outPipe, err := cmd.StdoutPipe()
if err != nil {
return nil, err
}
errPipe, err := cmd.StderrPipe()
if err != nil {
return nil, err
}
if err := cmd.Start(); err != nil {
return nil, err
}
go func() {
io.Copy(os.Stdout, outPipe)
}()
go func() {
io.Copy(os.Stderr, errPipe)
}()
return cmd, nil
}
func crashTest() error {
if err := exec.Command("/bin/bash", "-c", "while true; do true; done").Start(); err != nil {
return err
}
for {
daemon, err := runDaemon()
if err != nil {
return err
}
2013-04-16 22:20:04 +00:00
// time.Sleep(5000 * time.Millisecond)
var stop bool
2013-04-14 22:13:32 +00:00
go func() error {
2013-04-16 22:20:04 +00:00
stop = false
for i := 0; i < 100 && !stop; i++ {
func() error {
2013-04-14 22:13:32 +00:00
cmd := exec.Command(DOCKER_PATH, "run", "base", "echo", "hello", "world")
log.Printf("%d", i)
outPipe, err := cmd.StdoutPipe()
if err != nil {
return err
}
inPipe, err := cmd.StdinPipe()
if err != nil {
return err
}
if err := cmd.Start(); err != nil {
return err
}
go func() {
io.Copy(os.Stdout, outPipe)
}()
// Expecting error, do not check
inPipe.Write([]byte("hello world!!!!!\n"))
go inPipe.Write([]byte("hello world!!!!!\n"))
go inPipe.Write([]byte("hello world!!!!!\n"))
inPipe.Close()
if err := cmd.Wait(); err != nil {
return err
}
outPipe.Close()
return nil
}()
}
return nil
}()
time.Sleep(20 * time.Second)
2013-04-16 22:20:04 +00:00
stop = true
2013-04-14 22:13:32 +00:00
if err := daemon.Process.Kill(); err != nil {
return err
}
}
return nil
}
func main() {
if err := crashTest(); err != nil {
log.Println(err)
}
}