diff --git a/internal/server/runner/poll_test.go b/internal/server/runner/poll_test.go index 2b80dbec..476e4e0e 100644 --- a/internal/server/runner/poll_test.go +++ b/internal/server/runner/poll_test.go @@ -5,10 +5,11 @@ import ( "testing" "time" - queuemock "queryorchestration/mocks/queue" + "queryorchestration/internal/serviceconfig/objectstore" + "queryorchestration/internal/serviceconfig/queue" + "queryorchestration/internal/test" runnermock "queryorchestration/mocks/runner" - "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/aws/aws-sdk-go-v2/service/sqs/types" "github.com/go-playground/validator/v10" "github.com/stretchr/testify/assert" @@ -19,29 +20,20 @@ import ( type MockStruct struct{} func TestPollMessages(t *testing.T) { - ctx := context.Background() + cfg := &struct { + BaseConfig[MockStruct] + objectstore.ObjectStoreConfig + }{} + acfg := test.CreateAWSContainer(t, cfg) + + test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint) + cfg.QueueURL = test.CreateQueue(t, cfg, test.QueryRunnerName) - cfg := &BaseConfig[MockStruct]{} - mockSQS := queuemock.NewMockSQSClient(t) - cfg.QueueClient = mockSQS mockController := runnermock.NewMockController[MockStruct](t) cfg.Controller = mockController - cfg.QueueURL = "/i/am/here" cfg.Validator = validator.New() - res := sqs.ReceiveMessageOutput{Messages: []types.Message{}} - - mockSQS.EXPECT(). - ReceiveMessage( - mock.Anything, - mock.MatchedBy(func(in *sqs.ReceiveMessageInput) bool { - return *in.QueueUrl == cfg.QueueURL - }), - mock.Anything, - ). - Return(&res, nil) - - ctx, cancel := context.WithTimeout(ctx, time.Second) + ctx, cancel := context.WithTimeout(t.Context(), time.Second) defer cancel() scfg := &Server[MockStruct]{ @@ -52,14 +44,17 @@ func TestPollMessages(t *testing.T) { } func TestPollMessage(t *testing.T) { - ctx := context.Background() + cfg := &struct { + BaseConfig[MockStruct] + objectstore.ObjectStoreConfig + }{} + acfg := test.CreateAWSContainer(t, cfg) + + test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint) + cfg.QueueURL = test.CreateQueue(t, cfg, test.QueryRunnerName) - cfg := &BaseConfig[MockStruct]{} - mockSQS := queuemock.NewMockSQSClient(t) - cfg.QueueClient = mockSQS mockController := runnermock.NewMockController[MockStruct](t) cfg.Controller = mockController - cfg.QueueURL = "/i/am/here" cfg.Validator = validator.New() ser := &Server[MockStruct]{ @@ -67,28 +62,6 @@ func TestPollMessage(t *testing.T) { cleanup: func() error { return nil }, } - id := "example_id" - body := "{}" - receipt := "receipts" - - mockSQS.EXPECT(). - ReceiveMessage( - mock.Anything, - mock.MatchedBy(func(in *sqs.ReceiveMessageInput) bool { - return *in.QueueUrl == cfg.QueueURL - }), - mock.Anything, - ). - Return(&sqs.ReceiveMessageOutput{ - Messages: []types.Message{ - { - MessageId: &id, - Body: &body, - ReceiptHandle: &receipt, - }, - }, - }, nil) - mockController.EXPECT(). Process( mock.Anything, @@ -98,29 +71,34 @@ func TestPollMessage(t *testing.T) { ). Return(true) - mockSQS.EXPECT(). - DeleteMessage( - mock.Anything, - mock.MatchedBy(func(in *sqs.DeleteMessageInput) bool { - return *in.QueueUrl == cfg.QueueURL && *in.ReceiptHandle == receipt - }), - mock.Anything, - ). - Return(&sqs.DeleteMessageOutput{}, nil) - - err := ser.pollMessage(ctx) + err := cfg.SendToQueue(t.Context(), &queue.SendParams{ + QueueURL: cfg.GetQueueURL(), + Body: struct{}{}, + }) require.NoError(t, err) + + err = ser.pollMessage(t.Context()) + require.NoError(t, err) + + ares, err := cfg.ReceiveFromQueue(t.Context(), &queue.ReceiveParams{ + QueueURL: cfg.GetQueueURL(), + }) + require.NoError(t, err) + require.Len(t, ares.Messages, 0) } func TestProcessMessage(t *testing.T) { - ctx := context.Background() + cfg := &struct { + BaseConfig[MockStruct] + objectstore.ObjectStoreConfig + }{} + acfg := test.CreateAWSContainer(t, cfg) + + test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint) + cfg.QueueURL = test.CreateQueue(t, cfg, test.QueryRunnerName) - cfg := &BaseConfig[MockStruct]{} - mockSQS := queuemock.NewMockSQSClient(t) - cfg.QueueClient = mockSQS mockController := runnermock.NewMockController[MockStruct](t) cfg.Controller = mockController - cfg.QueueURL = "/i/am/here" cfg.Validator = validator.New() ser := &Server[MockStruct]{ @@ -128,15 +106,6 @@ func TestProcessMessage(t *testing.T) { cleanup: func() error { return nil }, } - id := "example_id" - body := "{}" - receipt := "receipts" - msg := &types.Message{ - MessageId: &id, - Body: &body, - ReceiptHandle: &receipt, - } - mockController.EXPECT(). Process( mock.Anything, @@ -146,18 +115,24 @@ func TestProcessMessage(t *testing.T) { ). Return(true) - mockSQS.EXPECT(). - DeleteMessage( - mock.Anything, - mock.MatchedBy(func(in *sqs.DeleteMessageInput) bool { - return *in.QueueUrl == cfg.QueueURL && *in.ReceiptHandle == receipt - }), - mock.Anything, - ). - Return(&sqs.DeleteMessageOutput{}, nil) - - err := ser.processMessage(ctx, msg) + err := cfg.SendToQueue(t.Context(), &queue.SendParams{ + QueueURL: cfg.GetQueueURL(), + Body: struct{}{}, + }) require.NoError(t, err) + + msg := test.AssertMessage(t, cfg, &queue.ReceiveParams{ + QueueURL: cfg.GetQueueURL(), + }) + + err = ser.processMessage(t.Context(), &msg) + require.NoError(t, err) + + ares, err := cfg.ReceiveFromQueue(t.Context(), &queue.ReceiveParams{ + QueueURL: cfg.GetQueueURL(), + }) + require.NoError(t, err) + require.Len(t, ares.Messages, 0) } func TestProcessBody(t *testing.T) { diff --git a/internal/serviceconfig/queue/config_test.go b/internal/serviceconfig/queue/config_test.go index 4c9e653d..93dfe995 100644 --- a/internal/serviceconfig/queue/config_test.go +++ b/internal/serviceconfig/queue/config_test.go @@ -6,11 +6,10 @@ import ( "testing" "queryorchestration/internal/serviceconfig/queue" - queuemock "queryorchestration/mocks/queue" + "queryorchestration/internal/test" "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) @@ -31,24 +30,13 @@ func TestSetQueueClient(t *testing.T) { } func TestPingQueueByURL(t *testing.T) { - ctx := context.Background() - mockSQS := queuemock.NewMockSQSClient(t) - c := queue.QueueConfig{ - QueueClient: mockSQS, - } - url := "i/am/here" + cfg := &AWSConfig{} + acfg := test.CreateAWSContainer(t, cfg) - mockSQS.EXPECT(). - GetQueueAttributes( - mock.Anything, - mock.MatchedBy(func(in *sqs.GetQueueAttributesInput) bool { - return *in.QueueUrl == url - }), - mock.Anything, - ). - Return(&sqs.GetQueueAttributesOutput{}, nil) + test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint) + cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName) - err := c.PingQueueByURL(ctx, url) + err := cfg.PingQueueByURL(t.Context(), cfg.QueryURL) require.NoError(t, err) } func TestGetSQSEndpoint(t *testing.T) { diff --git a/internal/serviceconfig/queue/delete_test.go b/internal/serviceconfig/queue/delete_test.go index 22801f1f..8772ad35 100644 --- a/internal/serviceconfig/queue/delete_test.go +++ b/internal/serviceconfig/queue/delete_test.go @@ -1,39 +1,43 @@ package queue_test import ( - "context" "testing" "queryorchestration/internal/serviceconfig/queue" - queuemock "queryorchestration/mocks/queue" + "queryorchestration/internal/test" "github.com/stretchr/testify/require" - - "github.com/aws/aws-sdk-go-v2/service/sqs" - "github.com/stretchr/testify/mock" ) func TestDelete(t *testing.T) { - ctx := context.Background() - mockSQS := queuemock.NewMockSQSClient(t) - cfg := queue.QueueConfig{} - cfg.QueueClient = mockSQS - handle := "iamahandler" + cfg := &AWSConfig{} + acfg := test.CreateAWSContainer(t, cfg) + + test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint) + cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName) + + err := cfg.SendToQueue(t.Context(), &queue.SendParams{ + QueueURL: cfg.GetQueryURL(), + Body: struct { + }{}, + }) + require.NoError(t, err) + + msg := test.AssertMessage(t, cfg, &queue.ReceiveParams{ + QueueURL: cfg.GetQueryURL(), + }) + params := &queue.DeleteParams{ - ReceiptHandle: &handle, - QueueURL: "/i/am/here", + ReceiptHandle: msg.ReceiptHandle, + QueueURL: cfg.GetQueryURL(), } - mockSQS.EXPECT(). - DeleteMessage( - mock.Anything, - mock.MatchedBy(func(in *sqs.DeleteMessageInput) bool { - return *in.QueueUrl == params.QueueURL && *in.ReceiptHandle == handle - }), - mock.Anything, - ). - Return(&sqs.DeleteMessageOutput{}, nil) - - err := cfg.DeleteFromQueue(ctx, params) + err = cfg.DeleteFromQueue(t.Context(), params) require.NoError(t, err) + + ares, err := cfg.ReceiveFromQueue(t.Context(), &queue.ReceiveParams{ + QueueURL: cfg.GetQueryURL(), + }) + require.NoError(t, err) + require.Len(t, ares.Messages, 0) } diff --git a/internal/serviceconfig/queue/receive_test.go b/internal/serviceconfig/queue/receive_test.go index 77175a55..d764c7bb 100644 --- a/internal/serviceconfig/queue/receive_test.go +++ b/internal/serviceconfig/queue/receive_test.go @@ -1,41 +1,38 @@ package queue_test import ( - "context" "testing" "queryorchestration/internal/serviceconfig/queue" - queuemock "queryorchestration/mocks/queue" + "queryorchestration/internal/test" - "github.com/aws/aws-sdk-go-v2/service/sqs" - "github.com/aws/aws-sdk-go-v2/service/sqs/types" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) func TestReceive(t *testing.T) { - ctx := context.Background() - mockSQS := queuemock.NewMockSQSClient(t) - cfg := queue.QueueConfig{} - cfg.QueueClient = mockSQS + cfg := &AWSConfig{} + acfg := test.CreateAWSContainer(t, cfg) + + test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint) + cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName) + + err := cfg.SendToQueue(t.Context(), &queue.SendParams{ + QueueURL: cfg.GetQueryURL(), + Body: struct { + Field string + }{ + Field: "value", + }, + }) + require.NoError(t, err) + params := &queue.ReceiveParams{ - QueueURL: "/i/am/here", + QueueURL: cfg.GetQueryURL(), } - res := sqs.ReceiveMessageOutput{Messages: []types.Message{}} - - mockSQS.EXPECT(). - ReceiveMessage( - mock.Anything, - mock.MatchedBy(func(in *sqs.ReceiveMessageInput) bool { - return *in.QueueUrl == params.QueueURL - }), - mock.Anything, - ). - Return(&res, nil) - - ares, err := cfg.ReceiveFromQueue(ctx, params) + ares, err := cfg.ReceiveFromQueue(t.Context(), params) require.NoError(t, err) - assert.EqualExportedValues(t, res, *ares) + require.Len(t, ares.Messages, 1) + assert.Equal(t, *ares.Messages[0].Body, `{"Field":"value"}`) } diff --git a/internal/serviceconfig/queue/send_test.go b/internal/serviceconfig/queue/send_test.go index f17c67f7..7a61ab24 100644 --- a/internal/serviceconfig/queue/send_test.go +++ b/internal/serviceconfig/queue/send_test.go @@ -1,37 +1,39 @@ package queue_test import ( - "context" + "regexp" "testing" + "queryorchestration/internal/serviceconfig" + "queryorchestration/internal/serviceconfig/objectstore" "queryorchestration/internal/serviceconfig/queue" - queuemock "queryorchestration/mocks/queue" + "queryorchestration/internal/serviceconfig/queue/query" + "queryorchestration/internal/test" - "github.com/aws/aws-sdk-go-v2/service/sqs" - "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) +type AWSConfig struct { + serviceconfig.BaseConfig + queue.QueueConfig + objectstore.ObjectStoreConfig + query.QueryConfig +} + func TestSend(t *testing.T) { - ctx := context.Background() - mockSQS := queuemock.NewMockSQSClient(t) - cfg := queue.QueueConfig{} - cfg.QueueClient = mockSQS + cfg := &AWSConfig{} + acfg := test.CreateAWSContainer(t, cfg) + + test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint) + cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName) + params := &queue.SendParams{ - QueueURL: "/i/am/here", + QueueURL: cfg.GetQueryURL(), Body: struct{}{}, } - mockSQS.EXPECT(). - SendMessage( - mock.Anything, - mock.MatchedBy(func(in *sqs.SendMessageInput) bool { - return *in.QueueUrl == params.QueueURL && *in.MessageBody == "{}" - }), - mock.Anything, - ). - Return(&sqs.SendMessageOutput{}, nil) - - err := cfg.SendToQueue(ctx, params) + err := cfg.SendToQueue(t.Context(), params) require.NoError(t, err) + + test.AssertMessageBody(t, cfg, cfg.GetQueryURL(), regexp.MustCompile("{}")) }