Signed-off-by: Andrew Page <admwiggin@gmail.com>
| 1 | 1 |
deleted file mode 100644 |
| ... | ... |
@@ -1,125 +0,0 @@ |
| 1 |
-package main |
|
| 2 |
- |
|
| 3 |
-import ( |
|
| 4 |
- "fmt" |
|
| 5 |
- "io" |
|
| 6 |
- "log" |
|
| 7 |
- "net" |
|
| 8 |
- "os" |
|
| 9 |
- "os/exec" |
|
| 10 |
- "path" |
|
| 11 |
- "time" |
|
| 12 |
-) |
|
| 13 |
- |
|
| 14 |
-var DOCKERPATH = path.Join(os.Getenv("DOCKERPATH"), "docker")
|
|
| 15 |
- |
|
| 16 |
-// WARNING: this crashTest will 1) crash your host, 2) remove all containers |
|
| 17 |
-func runDaemon() (*exec.Cmd, error) {
|
|
| 18 |
- os.Remove("/var/run/docker.pid")
|
|
| 19 |
- exec.Command("rm", "-rf", "/var/lib/docker/containers").Run()
|
|
| 20 |
- cmd := exec.Command(DOCKERPATH, "-d") |
|
| 21 |
- outPipe, err := cmd.StdoutPipe() |
|
| 22 |
- if err != nil {
|
|
| 23 |
- return nil, err |
|
| 24 |
- } |
|
| 25 |
- errPipe, err := cmd.StderrPipe() |
|
| 26 |
- if err != nil {
|
|
| 27 |
- return nil, err |
|
| 28 |
- } |
|
| 29 |
- if err := cmd.Start(); err != nil {
|
|
| 30 |
- return nil, err |
|
| 31 |
- } |
|
| 32 |
- go func() {
|
|
| 33 |
- io.Copy(os.Stdout, outPipe) |
|
| 34 |
- }() |
|
| 35 |
- go func() {
|
|
| 36 |
- io.Copy(os.Stderr, errPipe) |
|
| 37 |
- }() |
|
| 38 |
- return cmd, nil |
|
| 39 |
-} |
|
| 40 |
- |
|
| 41 |
-func crashTest() error {
|
|
| 42 |
- if err := exec.Command("/bin/bash", "-c", "while true; do true; done").Start(); err != nil {
|
|
| 43 |
- return err |
|
| 44 |
- } |
|
| 45 |
- |
|
| 46 |
- var endpoint string |
|
| 47 |
- if ep := os.Getenv("TEST_ENDPOINT"); ep == "" {
|
|
| 48 |
- endpoint = "192.168.56.1:7979" |
|
| 49 |
- } else {
|
|
| 50 |
- endpoint = ep |
|
| 51 |
- } |
|
| 52 |
- |
|
| 53 |
- c := make(chan bool) |
|
| 54 |
- var conn io.Writer |
|
| 55 |
- |
|
| 56 |
- go func() {
|
|
| 57 |
- conn, _ = net.Dial("tcp", endpoint)
|
|
| 58 |
- c <- false |
|
| 59 |
- }() |
|
| 60 |
- go func() {
|
|
| 61 |
- time.Sleep(2 * time.Second) |
|
| 62 |
- c <- true |
|
| 63 |
- }() |
|
| 64 |
- <-c |
|
| 65 |
- |
|
| 66 |
- restartCount := 0 |
|
| 67 |
- totalTestCount := 1 |
|
| 68 |
- for {
|
|
| 69 |
- daemon, err := runDaemon() |
|
| 70 |
- if err != nil {
|
|
| 71 |
- return err |
|
| 72 |
- } |
|
| 73 |
- restartCount++ |
|
| 74 |
- // time.Sleep(5000 * time.Millisecond) |
|
| 75 |
- var stop bool |
|
| 76 |
- go func() error {
|
|
| 77 |
- stop = false |
|
| 78 |
- for i := 0; i < 100 && !stop; {
|
|
| 79 |
- func() error {
|
|
| 80 |
- cmd := exec.Command(DOCKERPATH, "run", "ubuntu", "echo", fmt.Sprintf("%d", totalTestCount))
|
|
| 81 |
- i++ |
|
| 82 |
- totalTestCount++ |
|
| 83 |
- outPipe, err := cmd.StdoutPipe() |
|
| 84 |
- if err != nil {
|
|
| 85 |
- return err |
|
| 86 |
- } |
|
| 87 |
- inPipe, err := cmd.StdinPipe() |
|
| 88 |
- if err != nil {
|
|
| 89 |
- return err |
|
| 90 |
- } |
|
| 91 |
- if err := cmd.Start(); err != nil {
|
|
| 92 |
- return err |
|
| 93 |
- } |
|
| 94 |
- if conn != nil {
|
|
| 95 |
- go io.Copy(conn, outPipe) |
|
| 96 |
- } |
|
| 97 |
- |
|
| 98 |
- // Expecting error, do not check |
|
| 99 |
- inPipe.Write([]byte("hello world!!!!!\n"))
|
|
| 100 |
- go inPipe.Write([]byte("hello world!!!!!\n"))
|
|
| 101 |
- go inPipe.Write([]byte("hello world!!!!!\n"))
|
|
| 102 |
- inPipe.Close() |
|
| 103 |
- |
|
| 104 |
- if err := cmd.Wait(); err != nil {
|
|
| 105 |
- return err |
|
| 106 |
- } |
|
| 107 |
- outPipe.Close() |
|
| 108 |
- return nil |
|
| 109 |
- }() |
|
| 110 |
- } |
|
| 111 |
- return nil |
|
| 112 |
- }() |
|
| 113 |
- time.Sleep(20 * time.Second) |
|
| 114 |
- stop = true |
|
| 115 |
- if err := daemon.Process.Kill(); err != nil {
|
|
| 116 |
- return err |
|
| 117 |
- } |
|
| 118 |
- } |
|
| 119 |
-} |
|
| 120 |
- |
|
| 121 |
-func main() {
|
|
| 122 |
- if err := crashTest(); err != nil {
|
|
| 123 |
- log.Println(err) |
|
| 124 |
- } |
|
| 125 |
-} |