github.com/etecs-ru/gnomock@v0.13.2/preset_test.go (about)

     1  package gnomock_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/etecs-ru/gnomock"
     9  	"github.com/etecs-ru/gnomock/internal/health"
    10  	"github.com/etecs-ru/gnomock/internal/testutil"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestPreset_parallel(t *testing.T) {
    15  	t.Parallel()
    16  
    17  	containers, err := gnomock.InParallel().
    18  		Start(&testutil.TestPreset{Img: testutil.TestImage}).
    19  		Start(&testutil.TestPreset{Img: testutil.TestImage}).
    20  		Start(&testutil.TestPreset{Img: testutil.TestImage}).
    21  		Start(&testutil.TestPreset{Img: testutil.TestImage}).
    22  		Start(&testutil.TestPreset{Img: testutil.TestImage}).
    23  		Go()
    24  
    25  	defer func() { require.NoError(t, gnomock.Stop(containers...)) }()
    26  
    27  	require.NoError(t, err)
    28  	require.Len(t, containers, 5)
    29  
    30  	ctx := context.Background()
    31  
    32  	for _, c := range containers {
    33  		require.NoError(t, health.HTTPGet(ctx, c.Address("web80")))
    34  		require.NoError(t, health.HTTPGet(ctx, c.Address("web8080")))
    35  	}
    36  }
    37  
    38  func TestPreset(t *testing.T) {
    39  	t.Parallel()
    40  
    41  	p := &testutil.TestPreset{Img: testutil.TestImage}
    42  	container, err := gnomock.Start(p)
    43  
    44  	defer func(c *gnomock.Container) {
    45  		require.NoError(t, gnomock.Stop(c))
    46  	}(container)
    47  
    48  	require.NoError(t, err)
    49  }
    50  
    51  func TestPreset_containerRemainsIfDebug(t *testing.T) {
    52  	t.Parallel()
    53  
    54  	p := &testutil.TestPreset{Img: testutil.TestImage}
    55  	container, err := gnomock.Start(
    56  		p,
    57  		gnomock.WithTimeout(time.Second*10),
    58  		gnomock.WithDebugMode(),
    59  		gnomock.WithHealthCheck(failingHealthcheck),
    60  	)
    61  
    62  	require.Error(t, err)
    63  	require.Contains(t, err.Error(), "this container should not start")
    64  	require.NotNil(t, container)
    65  
    66  	// if stopped without error, container existed at this point
    67  	err = gnomock.Stop(container)
    68  	require.NoError(t, err)
    69  
    70  	// allow the container to actually stop
    71  	time.Sleep(time.Second)
    72  
    73  	// confirm it doesn't exist anymore
    74  	err = gnomock.Stop(container)
    75  	require.Error(t, err)
    76  }
    77  
    78  func TestPreset_duplicateContainerName(t *testing.T) {
    79  	t.Parallel()
    80  
    81  	p := &testutil.TestPreset{Img: testutil.TestImage}
    82  	originalContainer, err := gnomock.Start(
    83  		p,
    84  		gnomock.WithTimeout(time.Second*15),
    85  		gnomock.WithContainerName("gnomock"),
    86  		gnomock.WithDebugMode(),
    87  	)
    88  	require.NoError(t, err)
    89  
    90  	newContainer, err := gnomock.Start(
    91  		p,
    92  		gnomock.WithTimeout(time.Second*15),
    93  		gnomock.WithContainerName("gnomock"),
    94  		gnomock.WithDebugMode(),
    95  	)
    96  	require.NoError(t, err)
    97  
    98  	require.Error(t, gnomock.Stop(originalContainer))
    99  	require.NoError(t, gnomock.Stop(newContainer))
   100  }