moby--moby/contrib/crashTest.go

118 lines
2.2 KiB
Go
Raw Normal View History

2013-04-14 18:13:32 -04:00
package main
import (
2013-04-28 06:54:22 -04:00
"fmt"
2013-04-14 18:13:32 -04:00
"io"
"log"
2013-04-28 06:54:22 -04:00
"net"
2013-04-14 18:13:32 -04:00
"os"
"os/exec"
"path"
2013-04-14 18:13:32 -04:00
"time"
)
var DOCKER_PATH string = path.Join(os.Getenv("DOCKERPATH"), "docker")
2013-04-14 18:13:32 -04:00
func runDaemon() (*exec.Cmd, error) {
2013-04-16 18:20:04 -04:00
os.Remove("/var/run/docker.pid")
2013-04-14 18:13:32 -04: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
}
2013-04-28 06:54:22 -04:00
var endpoint string
if ep := os.Getenv("TEST_ENDPOINT"); ep == "" {
endpoint = "192.168.56.1:7979"
} else {
endpoint = ep
}
conn, _ := net.Dial("tcp", endpoint)
restartCount := 0
totalTestCount := 1
2013-04-14 18:13:32 -04:00
for {
daemon, err := runDaemon()
if err != nil {
return err
}
2013-04-28 06:54:22 -04:00
if conn != nil {
fmt.Fprintf(conn, "RESTART: %d\n", restartCount)
}
restartCount++
2013-04-16 18:20:04 -04:00
// time.Sleep(5000 * time.Millisecond)
var stop bool
2013-04-14 18:13:32 -04:00
go func() error {
2013-04-16 18:20:04 -04:00
stop = false
for i := 0; i < 100 && !stop; i++ {
func() error {
2013-04-28 06:54:22 -04:00
if conn != nil {
fmt.Fprintf(conn, "TEST: %d\n", totalTestCount)
}
totalTestCount++
2013-04-14 18:13:32 -04: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 18:20:04 -04:00
stop = true
2013-04-14 18:13:32 -04:00
if err := daemon.Process.Kill(); err != nil {
return err
}
}
return nil
}
func main() {
if err := crashTest(); err != nil {
log.Println(err)
}
}