contrib/crashTest.go
1ec6c223
 package main
 
 import (
 	"io"
 	"log"
 	"os"
 	"os/exec"
 	"time"
 )
 
 const DOCKER_PATH = "/home/creack/dotcloud/docker/docker/docker"
 
 func runDaemon() (*exec.Cmd, error) {
c4cd224d
 	os.Remove("/var/run/docker.pid")
1ec6c223
 	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
 		}
c4cd224d
 		//		time.Sleep(5000 * time.Millisecond)
 		var stop bool
1ec6c223
 		go func() error {
c4cd224d
 			stop = false
 			for i := 0; i < 100 && !stop; i++ {
 				func() error {
1ec6c223
 					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)
c4cd224d
 		stop = true
1ec6c223
 		if err := daemon.Process.Kill(); err != nil {
 			return err
 		}
 	}
 	return nil
 }
 
 func main() {
 	if err := crashTest(); err != nil {
 		log.Println(err)
 	}
 }