github.com/davidmanzanares/dsd@v0.1.2-0.20210106152357-a35988f5d245/dsdl/run_test.go (about) 1 package dsdl 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "runtime" 7 "strings" 8 "testing" 9 "time" 10 11 "github.com/davidmanzanares/dsd/types" 12 ) 13 14 var testPatterns []string = []string{"test-asset*", "*/*", "*/*/*"} 15 16 func TestRunBasic(t *testing.T) { 17 createTestAssets() 18 defer deleteTestAssets() 19 20 service := "s3://dsd-s3-test/tests" 21 v, err := Deploy(Target{Name: "test", Service: service, Patterns: testPatterns}) 22 if err != nil { 23 t.Fatal(err) 24 } 25 r, err := Run("s3://dsd-s3-test/tests", RunConf{}) 26 if err != nil { 27 t.Fatal(err) 28 } 29 ev := r.WaitForEvent() 30 if ev.Type != AppStarted { 31 t.Fatal(ev) 32 } 33 ev = r.WaitForEvent() 34 if ev.Type != AppExit { 35 t.Fatal(ev) 36 } 37 ev = r.WaitForEvent() 38 if ev.Type != Stopped { 39 t.Fatal(ev) 40 } 41 checkFiles(v, t) 42 checkExecution(t, v, 1) 43 } 44 45 func TestRunFailureRestart(t *testing.T) { 46 var testPatterns []string = []string{"test-asset-failure-script", "*/*", "*/*/*"} 47 createTestAssets() 48 defer deleteTestAssets() 49 50 service := "s3://dsd-s3-test/tests" 51 v, err := Deploy(Target{Name: "test", Service: service, Patterns: testPatterns}) 52 if err != nil { 53 t.Fatal(err) 54 } 55 r, err := Run("s3://dsd-s3-test/tests", RunConf{OnFailure: Restart}) 56 if err != nil { 57 t.Fatal(err) 58 } 59 60 // First execution 61 ev := r.WaitForEvent() 62 if ev.Type != AppStarted { 63 t.Fatal(ev) 64 } 65 ev = r.WaitForEvent() 66 if ev.Type != AppExit { 67 t.Fatal(ev) 68 } 69 70 // Second execution 71 ev = r.WaitForEvent() 72 if ev.Type != AppStarted { 73 t.Fatal(ev) 74 } 75 ev = r.WaitForEvent() 76 if ev.Type != AppExit { 77 t.Fatal(ev) 78 } 79 r.Stop() 80 execs := 2 81 for { 82 ev := r.WaitForEvent() 83 if ev.Type == Stopped { 84 break 85 } 86 if ev.Type == AppExit { 87 execs++ 88 } 89 } 90 checkExecution(t, v, execs) 91 } 92 93 func TestRunHotReload(t *testing.T) { 94 var testPatterns []string = []string{"test-asset-sleep-script", "*/*", "*/*/*"} 95 createTestAssets() 96 defer deleteTestAssets() 97 98 service := "s3://dsd-s3-test/tests" 99 v, err := Deploy(Target{Name: "test", Service: service, Patterns: testPatterns}) 100 if err != nil { 101 t.Fatal(err) 102 } 103 r, err := Run("s3://dsd-s3-test/tests", RunConf{HotReload: true, Polling: 50 * time.Millisecond}) 104 if err != nil { 105 t.Fatal(err) 106 } 107 ev := r.WaitForEvent() 108 if ev.Type != AppStarted { 109 t.Fatal(ev) 110 } 111 time.Sleep(50 * time.Millisecond) 112 checkExecution(t, v, 1) 113 v, err = Deploy(Target{Name: "test", Service: service, Patterns: testPatterns}) 114 if err != nil { 115 t.Fatal(err) 116 } 117 ev = r.WaitForEvent() 118 if ev.Type != AppStarted { 119 t.Fatal(ev) 120 } 121 time.Sleep(50 * time.Millisecond) 122 checkExecution(t, v, 2) 123 r.Stop() 124 ev = r.WaitForEvent() 125 if ev.Type != Stopped { 126 t.Fatal(ev) 127 } 128 } 129 130 func TestRunSuccessWait(t *testing.T) { 131 createTestAssets() 132 defer deleteTestAssets() 133 134 service := "s3://dsd-s3-test/tests" 135 v, err := Deploy(Target{Name: "test", Service: service, Patterns: testPatterns}) 136 if err != nil { 137 t.Fatal(err) 138 } 139 r, err := Run("s3://dsd-s3-test/tests", RunConf{OnSuccess: Wait}) 140 if err != nil { 141 t.Fatal(err) 142 } 143 ev := r.WaitForEvent() 144 if ev.Type != AppStarted { 145 t.Fatal(ev) 146 } 147 ev = r.WaitForEvent() 148 if ev.Type != AppExit { 149 t.Fatal(ev) 150 } 151 checkFiles(v, t) 152 checkExecution(t, v, 1) 153 v, err = Deploy(Target{Name: "test", Service: service, Patterns: testPatterns}) 154 if err != nil { 155 t.Fatal(err) 156 } 157 r.commands <- "update" 158 ev = r.WaitForEvent() 159 if ev.Type != AppStarted { 160 t.Fatal(ev) 161 } 162 ev = r.WaitForEvent() 163 if ev.Type != AppExit { 164 t.Fatal(ev) 165 } 166 checkFiles(v, t) 167 checkExecution(t, v, 2) 168 r.Stop() 169 ev = r.WaitForEvent() 170 if ev.Type != Stopped { 171 t.Fatal(ev) 172 } 173 } 174 175 func TestDefaultPolling(t *testing.T) { 176 r, err := Run("s3://dsd-s3-test/tests", RunConf{OnSuccess: Wait}) 177 if err != nil { 178 t.Fatal(err) 179 } 180 if r.conf.Polling != DefaultPolling { 181 t.Fatal("Wrong polling time") 182 } 183 r.Stop() 184 } 185 func TestCustomPolling(t *testing.T) { 186 r, err := Run("s3://dsd-s3-test/tests", RunConf{OnSuccess: Wait, Polling: time.Minute}) 187 if err != nil { 188 t.Fatal(err) 189 } 190 if r.conf.Polling != time.Minute { 191 t.Fatal("Wrong polling time") 192 } 193 r.Stop() 194 } 195 196 func checkExecution(t *testing.T, v types.Version, executionTimes int) { 197 d, err := ioutil.ReadFile("./assets/test-script-output") 198 if err != nil { 199 _, file, no, ok := runtime.Caller(1) 200 if ok { 201 fmt.Printf("called from %s#%d\n", file, no) 202 } 203 t.Fatal(err) 204 } 205 expected := strings.Repeat("I ran\n", executionTimes) 206 if string(d) != expected { 207 _, file, no, ok := runtime.Caller(1) 208 if ok { 209 fmt.Printf("called from %s#%d\n", file, no) 210 } 211 fmt.Println(executionTimes) 212 t.Fatal("test-script-output unexpected result:", string(d), string(expected), d, []byte(expected)) 213 } 214 }