package container import ( "bytes" _ "embed" "io" "testing" "git.netflux.io/rob/octoplex/internal/container/mocks" "git.netflux.io/rob/octoplex/internal/domain" "github.com/docker/docker/api/types/image" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) //go:embed testdata/pull_progress.json var pullProgressJSON []byte func TestHandleImagePull(t *testing.T) { const imageName = "alpine" containerStateC := make(chan domain.Container) var dockerClient mocks.DockerClient defer dockerClient.AssertExpectations(t) dockerClient. EXPECT(). ImagePull(mock.Anything, imageName, image.PullOptions{}). Return(io.NopCloser(bytes.NewReader(pullProgressJSON)), nil) var containerStates []domain.Container go func() { require.NoError(t, handleImagePull(t.Context(), imageName, &dockerClient, containerStateC)) }() const expectedContainerStates = 46 for range expectedContainerStates { containerStates = append(containerStates, <-containerStateC) } assert.Len(t, containerStates, expectedContainerStates) for _, containerState := range containerStates { assert.Equal(t, domain.ContainerStatusPulling, containerState.Status) assert.Equal(t, imageName, containerState.ImageName) assert.NotZero(t, containerState.PullStatus) } }