octoplex/container/runner_test.go
2025-01-22 06:52:15 +01:00

60 lines
1.5 KiB
Go

package container_test
import (
"context"
"testing"
"time"
"git.netflux.io/rob/termstream/container"
"git.netflux.io/rob/termstream/testhelpers"
"github.com/docker/docker/client"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestRunnerStartStop(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)
apiClient, err := client.NewClientWithOpts(client.FromEnv)
require.NoError(t, err)
defer apiClient.Close()
logger := testhelpers.NewTestLogger()
containerName := "termstream-test-" + uuid.NewString()
component := "test-start-stop"
runner, err := container.NewRunner(logger)
require.NoError(t, err)
running, err := runner.ContainerRunning(ctx, map[string]string{"component": component})
require.NoError(t, err)
assert.False(t, running)
_, err = runner.RunContainer(ctx, container.RunContainerParams{
Name: containerName,
Image: "bluenviron/mediamtx",
Labels: map[string]string{"component": component},
NetworkMode: "default",
})
require.NoError(t, err)
require.Eventually(
t,
func() bool {
running, err = runner.ContainerRunning(ctx, map[string]string{"component": component})
return err == nil && running
},
5*time.Second,
250*time.Millisecond,
"container not in RUNNING state",
)
runner.Close()
running, err = runner.ContainerRunning(ctx, map[string]string{"component": component})
require.NoError(t, err)
assert.False(t, running)
}