github.com/golazy/golazy@v0.0.7-0.20221012133820-968fe65a0b65/lazydev/runner/runner_test.go (about) 1 package runner 2 3 import ( 4 "os/exec" 5 "strings" 6 "testing" 7 ) 8 9 func TestReadEvent(t *testing.T) { 10 11 r := New(exec.Command("echo", "Listening 127.0.0.1:80"), nil) 12 defer r.Close() 13 14 r.Start() 15 16 if _, ok := (<-r.Events).(EventStart); !ok { 17 t.Fatal("Expected a EventSTart") 18 } 19 eventReady, ok := (<-r.Events).(EventReady) 20 if !ok { 21 t.Fatal("Expected a EventSTart") 22 } 23 24 if string(eventReady.Data) != "Listening 127.0.0.1:80\n" { 25 t.Fatalf("%q", string(eventReady.Data)) 26 } 27 28 if _, ok := (<-r.Events).(EventStopped); !ok { 29 t.Fatal("Expected a EventSTart") 30 } 31 32 } 33 34 func TestLifecycle(t *testing.T) { 35 36 r := New(exec.Command("echo", "hello"), nil) 37 defer r.Close() 38 39 // Check defaults 40 err := r.Stop() 41 if err != ErrNotRunning { 42 t.Fatal("expected some error") 43 } 44 45 // Start the programm 46 go func() { 47 err := r.Start() 48 if err != nil { 49 panic(err) 50 } 51 }() 52 53 // Did we receive start? 54 if event, ok := (<-r.Events).(EventStart); !ok { 55 t.Fatal("Expected EventStart. Got:", event) 56 } 57 58 // Did we receive stop? 59 event, ok := (<-r.Events).(EventStopped) 60 if !ok { 61 t.Fatal("expected EventStopped, got:", event) 62 } 63 if event.ExitCode != 0 { 64 t.Error(event.ExitCode) 65 } 66 if string(strings.Join(event.Output, "\n")) != "hello" { 67 t.Error(event.Output) 68 } 69 70 // Now lets tests restart 71 r.cmd = exec.Command("sleep", "10") 72 73 // As it is stopped, it behaves like start 74 err = r.Restart() 75 if err != nil { 76 t.Fatal(err) 77 } 78 ev := <-r.Events 79 if _, ok := (ev).(EventRestart); !ok { 80 t.Fatalf("expected EventRestart, got: %T", ev) 81 } 82 83 err = r.Restart() 84 if err != nil { 85 t.Fatal(err) 86 } 87 88 ev = <-r.Events 89 if _, ok := (ev).(EventRestart); !ok { 90 t.Fatalf("expected EventRestart, got: %T", ev) 91 } 92 93 ev = <-r.Events 94 evStopped, ok := (ev).(EventStopped) 95 96 if !ok { 97 t.Fatalf("expected EventStop, got: %T", ev) 98 } 99 100 if evStopped.ExitCode != -1 { 101 t.Fatal(ev) 102 } 103 104 err = r.Stop() 105 if err != nil { 106 t.Fatal(err) 107 } 108 109 ev = <-r.Events 110 _, ok = (ev).(EventStop) 111 112 if !ok { 113 t.Fatalf("expected EventStop, got: %T", ev) 114 } 115 116 ev = <-r.Events 117 evStopped, ok = (ev).(EventStopped) 118 119 if !ok { 120 t.Fatalf("expected EventStop, got: %T", ev) 121 } 122 123 if evStopped.ExitCode != -1 { 124 t.Fatal(ev) 125 } 126 127 }