60 lines
1.4 KiB
Go
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
|
|
}
|