1//go:build example 2// +build example 3 4package main 5 6import ( 7 "fmt" 8 "testing" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/service/sqs" 12 "github.com/aws/aws-sdk-go/service/sqs/sqsiface" 13) 14 15type mockedReceiveMsgs struct { 16 sqsiface.SQSAPI 17 Resp sqs.ReceiveMessageOutput 18} 19 20func (m mockedReceiveMsgs) ReceiveMessage(in *sqs.ReceiveMessageInput) (*sqs.ReceiveMessageOutput, error) { 21 // Only need to return mocked response output 22 return &m.Resp, nil 23} 24 25func TestQueueGetMessage(t *testing.T) { 26 cases := []struct { 27 Resp sqs.ReceiveMessageOutput 28 Expected []Message 29 }{ 30 { // Case 1, expect parsed responses 31 Resp: sqs.ReceiveMessageOutput{ 32 Messages: []*sqs.Message{ 33 {Body: aws.String(`{"from":"user_1","to":"room_1","msg":"Hello!"}`)}, 34 {Body: aws.String(`{"from":"user_2","to":"room_1","msg":"Hi user_1 :)"}`)}, 35 }, 36 }, 37 Expected: []Message{ 38 {From: "user_1", To: "room_1", Msg: "Hello!"}, 39 {From: "user_2", To: "room_1", Msg: "Hi user_1 :)"}, 40 }, 41 }, 42 { // Case 2, not messages returned 43 Resp: sqs.ReceiveMessageOutput{}, 44 Expected: []Message{}, 45 }, 46 } 47 48 for i, c := range cases { 49 q := Queue{ 50 Client: mockedReceiveMsgs{Resp: c.Resp}, 51 URL: fmt.Sprintf("mockURL_%d", i), 52 } 53 msgs, err := q.GetMessages(20) 54 if err != nil { 55 t.Fatalf("%d, unexpected error, %v", i, err) 56 } 57 if a, e := len(msgs), len(c.Expected); a != e { 58 t.Fatalf("%d, expected %d messages, got %d", i, e, a) 59 } 60 for j, msg := range msgs { 61 if a, e := msg, c.Expected[j]; a != e { 62 t.Errorf("%d, expected %v message, got %v", i, e, a) 63 } 64 } 65 } 66} 67