github.com/bkosm/gompose/v2@v2.3.1/integration_test.go (about) 1 package gompose 2 3 import ( 4 "io" 5 "net/http" 6 "os" 7 "syscall" 8 "testing" 9 "time" 10 ) 11 12 func TestIntegration(t *testing.T) { 13 goBack := goIntoTestDataDir(t) 14 defer goBack() 15 16 setup := func() { 17 err := Up( 18 Wait( 19 ReadyOnLog(expectedLogLine), 20 ), 21 SignalCallback(func(_ os.Signal) { 22 _ = Down() 23 }), 24 RetryCommand(3, time.Second), 25 ) 26 assertNoError(t, err) 27 assertServiceIsUp(t) 28 } 29 30 teardown := func() { 31 err := Down() 32 assertNoError(t, err) 33 assertServiceIsDown(t) 34 } 35 36 t.Run("sets up the services", func(t *testing.T) { 37 setup() 38 }) 39 40 t.Run("cleans up on system signals", func(t *testing.T) { 41 doSignal(t, syscall.SIGINT) 42 assertEventually(t, serviceIsDown, 5*time.Second, 100*time.Millisecond) 43 }) 44 45 t.Run("sets up again after a forced exit", func(t *testing.T) { 46 setup() 47 }) 48 49 t.Run("cleans up on direct request", func(t *testing.T) { 50 teardown() 51 }) 52 53 t.Run("allows for waiting on healthy http", func(t *testing.T) { 54 req := validRequest(t) 55 56 err := Up(Wait(ReadyOnHttp(req))) 57 assertNoError(t, err) 58 assertServiceIsUp(t) 59 60 teardown() 61 }) 62 63 t.Run("allows customising the response verifiers", func(t *testing.T) { 64 req := validRequest(t) 65 66 verifier := ResponseVerifier(func(res *http.Response) (bool, error) { 67 b, err := io.ReadAll(res.Body) 68 if err != nil { 69 return false, err 70 } 71 72 return string(b) == "ok\n", nil 73 }) 74 75 err := Up(Wait(ReadyOnHttp(req, verifier, Timeout(3*time.Second)))) 76 assertNoError(t, err) 77 assertServiceIsUp(t) 78 79 teardown() 80 }) 81 82 t.Run("skips Down when an environment flag is present", func(t *testing.T) { 83 err := os.Setenv(SkipEnv, "DOWN,IGNORE") 84 assertNoError(t, err) 85 86 setup() 87 88 err = Down() 89 assertNoError(t, err) 90 assertServiceIsUp(t) 91 92 err = os.Unsetenv(SkipEnv) 93 assertNoError(t, err) 94 teardown() 95 }) 96 }