octoplex/internal/container/events_test.go
2025-03-16 15:05:43 +01:00

60 lines
1.4 KiB
Go

package container
import (
"errors"
"io"
"testing"
"git.netflux.io/rob/octoplex/internal/container/mocks"
"git.netflux.io/rob/octoplex/internal/testhelpers"
"github.com/docker/docker/api/types/events"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
func TestHandleEvents(t *testing.T) {
eventsC1 := make(chan events.Message)
eventsC2 := make(chan events.Message)
errC := make(chan error)
containerID := "b905f51b47242090ae504c184c7bc84d6274511ef763c1847039dcaa00a3ad27"
var dockerClient mocks.DockerClient
defer dockerClient.AssertExpectations(t)
dockerClient.
EXPECT().
Events(mock.Anything, mock.Anything).
Return(eventsC1, errC).
Once()
dockerClient.
EXPECT().
Events(mock.Anything, mock.Anything).
Return(eventsC2, errC).
Once()
logger := testhelpers.NewNopLogger()
ch := make(chan events.Message)
done := make(chan struct{})
go func() {
defer close(done)
handleEvents(t.Context(), containerID, &dockerClient, logger, ch)
}()
go func() {
eventsC1 <- events.Message{Action: "start"}
eventsC1 <- events.Message{Action: "stop"}
errC <- errors.New("foo")
eventsC2 <- events.Message{Action: "continue"}
errC <- io.EOF
}()
assert.Equal(t, events.Action("start"), (<-ch).Action)
assert.Equal(t, events.Action("stop"), (<-ch).Action)
assert.Equal(t, events.Action("continue"), (<-ch).Action)
<-done
}