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  }