package worker import ( "os" "testing" "time" "github.com/google/uuid" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "edge-infra.dev/pkg/edge/datasync/internal/config" "edge-infra.dev/pkg/edge/datasync/chirp/model" "edge-infra.dev/pkg/edge/datasync/internal/config/fake" ) type MessageProviderMock struct{ mock.Mock } type MessageSenderMock struct{ mock.Mock } func TestDoWork(t *testing.T) { fake.SetEnv() msgProviderMock := new(MessageProviderMock) messages := make(map[string]model.Message) msgID1 := uuid.New() messages[msgID1.String()] = model.Message{ID: msgID1, Type: "tlog", FilePath: "testdata/xxx"} msgID2 := uuid.New() messages[msgID2.String()] = model.Message{ID: msgID2, Type: "tlog", FilePath: "testdata/xxx"} msgProviderMock.On("GetMessages").Return(messages) sentMessages := []model.Message{ messages[msgID1.String()], messages[msgID2.String()], } msgSenderMock := new(MessageSenderMock) msgSenderMock.On("Send", messages).Return(sentMessages) cfg := &config.Config{ RunMessageWorker: true, WorkerPolling: 6, } worker := NewMessageWorker(1, msgProviderMock, msgSenderMock, cfg) require.NotEmpty(t, worker) go worker.DoWork() time.Sleep(100 * time.Millisecond) os.Setenv("RUN_MESSAGE_WORKER", "false") msgProviderMock.AssertExpectations(t) msgSenderMock.AssertExpectations(t) } func (p *MessageProviderMock) GetMessages() map[string]model.Message { args := p.Called() result := args.Get(0) return result.(map[string]model.Message) } func (s *MessageSenderMock) Send(messages map[string]model.Message) []model.Message { args := s.Called(messages) result := args.Get(0) return result.([]model.Message) }