github.com/aavshr/aws-sdk-go@v1.41.3/service/sqs/checksums_test.go (about) 1 package sqs_test 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "net/http" 7 "strings" 8 "testing" 9 10 "github.com/aavshr/aws-sdk-go/aws" 11 "github.com/aavshr/aws-sdk-go/aws/awserr" 12 "github.com/aavshr/aws-sdk-go/aws/request" 13 "github.com/aavshr/aws-sdk-go/awstesting/unit" 14 "github.com/aavshr/aws-sdk-go/service/sqs" 15 ) 16 17 var svc = func() *sqs.SQS { 18 s := sqs.New(unit.Session, &aws.Config{ 19 DisableParamValidation: aws.Bool(true), 20 }) 21 s.Handlers.Send.Clear() 22 return s 23 }() 24 25 func TestSendMessageChecksum(t *testing.T) { 26 req, _ := svc.SendMessageRequest(&sqs.SendMessageInput{ 27 MessageBody: aws.String("test"), 28 }) 29 req.Handlers.Send.PushBack(func(r *request.Request) { 30 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 31 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 32 r.Data = &sqs.SendMessageOutput{ 33 MD5OfMessageBody: aws.String("098f6bcd4621d373cade4e832627b4f6"), 34 MessageId: aws.String("12345"), 35 } 36 }) 37 err := req.Send() 38 if err != nil { 39 t.Errorf("expect no error, got %v", err) 40 } 41 } 42 43 func TestSendMessageChecksumInvalid(t *testing.T) { 44 req, _ := svc.SendMessageRequest(&sqs.SendMessageInput{ 45 MessageBody: aws.String("test"), 46 }) 47 req.Handlers.Send.PushBack(func(r *request.Request) { 48 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 49 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 50 r.Data = &sqs.SendMessageOutput{ 51 MD5OfMessageBody: aws.String("000"), 52 MessageId: aws.String("12345"), 53 } 54 }) 55 err := req.Send() 56 if err == nil { 57 t.Fatalf("expect error, got nil") 58 } 59 60 if e, a := "InvalidChecksum", err.(awserr.Error).Code(); e != a { 61 t.Errorf("expect %v, got %v", e, a) 62 } 63 if e, a := err.(awserr.Error).Message(), "expected MD5 checksum '000', got '098f6bcd4621d373cade4e832627b4f6'"; !strings.Contains(a, e) { 64 t.Errorf("expect %v to be in %v, was not", e, a) 65 } 66 } 67 68 func TestSendMessageChecksumInvalidNoValidation(t *testing.T) { 69 s := sqs.New(unit.Session, &aws.Config{ 70 DisableParamValidation: aws.Bool(true), 71 DisableComputeChecksums: aws.Bool(true), 72 }) 73 s.Handlers.Send.Clear() 74 75 req, _ := s.SendMessageRequest(&sqs.SendMessageInput{ 76 MessageBody: aws.String("test"), 77 }) 78 req.Handlers.Send.PushBack(func(r *request.Request) { 79 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 80 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 81 r.Data = &sqs.SendMessageOutput{ 82 MD5OfMessageBody: aws.String("000"), 83 MessageId: aws.String("12345"), 84 } 85 }) 86 err := req.Send() 87 if err != nil { 88 t.Errorf("expect no error, got %v", err) 89 } 90 } 91 92 func TestSendMessageChecksumNoInput(t *testing.T) { 93 req, _ := svc.SendMessageRequest(&sqs.SendMessageInput{}) 94 req.Handlers.Send.PushBack(func(r *request.Request) { 95 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 96 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 97 r.Data = &sqs.SendMessageOutput{} 98 }) 99 err := req.Send() 100 if err == nil { 101 t.Fatalf("expect error, got nil") 102 } 103 104 if e, a := "InvalidChecksum", err.(awserr.Error).Code(); e != a { 105 t.Errorf("expect %v, got %v", e, a) 106 } 107 if e, a := err.(awserr.Error).Message(), "cannot compute checksum. missing body"; !strings.Contains(a, e) { 108 t.Errorf("expect %v to be in %v, was not", e, a) 109 } 110 } 111 112 func TestSendMessageChecksumNoOutput(t *testing.T) { 113 req, _ := svc.SendMessageRequest(&sqs.SendMessageInput{ 114 MessageBody: aws.String("test"), 115 }) 116 req.Handlers.Send.PushBack(func(r *request.Request) { 117 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 118 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 119 r.Data = &sqs.SendMessageOutput{} 120 }) 121 err := req.Send() 122 if err == nil { 123 t.Fatalf("expect error, got nil") 124 } 125 126 if e, a := "InvalidChecksum", err.(awserr.Error).Code(); e != a { 127 t.Errorf("expect %v, got %v", e, a) 128 } 129 if e, a := err.(awserr.Error).Message(), "cannot verify checksum. missing response MD5"; !strings.Contains(a, e) { 130 t.Errorf("expect %v to be in %v, was not", e, a) 131 } 132 } 133 134 func TestRecieveMessageChecksum(t *testing.T) { 135 req, _ := svc.ReceiveMessageRequest(&sqs.ReceiveMessageInput{}) 136 req.Handlers.Send.PushBack(func(r *request.Request) { 137 md5 := "098f6bcd4621d373cade4e832627b4f6" 138 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 139 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 140 r.Data = &sqs.ReceiveMessageOutput{ 141 Messages: []*sqs.Message{ 142 {Body: aws.String("test"), MD5OfBody: &md5}, 143 {Body: aws.String("test"), MD5OfBody: &md5}, 144 {Body: aws.String("test"), MD5OfBody: &md5}, 145 {Body: aws.String("test"), MD5OfBody: &md5}, 146 }, 147 } 148 }) 149 err := req.Send() 150 if err != nil { 151 t.Errorf("expect no error, got %v", err) 152 } 153 } 154 155 func TestRecieveMessageChecksumInvalid(t *testing.T) { 156 req, _ := svc.ReceiveMessageRequest(&sqs.ReceiveMessageInput{}) 157 req.Handlers.Send.PushBack(func(r *request.Request) { 158 md5 := "098f6bcd4621d373cade4e832627b4f6" 159 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 160 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 161 r.Data = &sqs.ReceiveMessageOutput{ 162 Messages: []*sqs.Message{ 163 {Body: aws.String("test"), MD5OfBody: &md5}, 164 {Body: aws.String("test"), MD5OfBody: aws.String("000"), MessageId: aws.String("123")}, 165 {Body: aws.String("test"), MD5OfBody: aws.String("000"), MessageId: aws.String("456")}, 166 {Body: aws.String("test"), MD5OfBody: aws.String("000")}, 167 {Body: aws.String("test"), MD5OfBody: &md5}, 168 }, 169 } 170 }) 171 err := req.Send() 172 if err == nil { 173 t.Fatalf("expect error, got nil") 174 } 175 176 if e, a := "InvalidChecksum", err.(awserr.Error).Code(); e != a { 177 t.Errorf("expect %v, got %v", e, a) 178 } 179 if e, a := err.(awserr.Error).Message(), "invalid messages: 123, 456"; !strings.Contains(a, e) { 180 t.Errorf("expect %v to be in %v, was not", e, a) 181 } 182 } 183 184 func TestSendMessageBatchChecksum(t *testing.T) { 185 req, _ := svc.SendMessageBatchRequest(&sqs.SendMessageBatchInput{ 186 Entries: []*sqs.SendMessageBatchRequestEntry{ 187 {Id: aws.String("1"), MessageBody: aws.String("test")}, 188 {Id: aws.String("2"), MessageBody: aws.String("test")}, 189 {Id: aws.String("3"), MessageBody: aws.String("test")}, 190 {Id: aws.String("4"), MessageBody: aws.String("test")}, 191 }, 192 }) 193 req.Handlers.Send.PushBack(func(r *request.Request) { 194 md5 := "098f6bcd4621d373cade4e832627b4f6" 195 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 196 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 197 r.Data = &sqs.SendMessageBatchOutput{ 198 Successful: []*sqs.SendMessageBatchResultEntry{ 199 {MD5OfMessageBody: &md5, MessageId: aws.String("123"), Id: aws.String("1")}, 200 {MD5OfMessageBody: &md5, MessageId: aws.String("456"), Id: aws.String("2")}, 201 {MD5OfMessageBody: &md5, MessageId: aws.String("789"), Id: aws.String("3")}, 202 {MD5OfMessageBody: &md5, MessageId: aws.String("012"), Id: aws.String("4")}, 203 }, 204 } 205 }) 206 err := req.Send() 207 if err != nil { 208 t.Errorf("expect no error, got %v", err) 209 } 210 } 211 212 func TestSendMessageBatchChecksumFailed(t *testing.T) { 213 req, _ := svc.SendMessageBatchRequest(&sqs.SendMessageBatchInput{ 214 Entries: []*sqs.SendMessageBatchRequestEntry{ 215 {Id: aws.String("1"), MessageBody: aws.String("test")}, 216 {Id: aws.String("2"), MessageBody: aws.String("test")}, 217 {Id: aws.String("3"), MessageBody: aws.String("test")}, 218 {Id: aws.String("4"), MessageBody: aws.String("test")}, 219 }, 220 }) 221 req.Handlers.Send.PushBack(func(r *request.Request) { 222 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 223 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 224 r.Data = &sqs.SendMessageBatchOutput{ 225 Failed: []*sqs.BatchResultErrorEntry{ 226 { 227 Id: aws.String("1"), 228 Code: aws.String("test"), 229 Message: aws.String("test"), 230 SenderFault: aws.Bool(false), 231 }, 232 { 233 Id: aws.String("2"), 234 Code: aws.String("test"), 235 Message: aws.String("test"), 236 SenderFault: aws.Bool(false), 237 }, 238 { 239 Id: aws.String("3"), 240 Code: aws.String("test"), 241 Message: aws.String("test"), 242 SenderFault: aws.Bool(false), 243 }, 244 { 245 Id: aws.String("4"), 246 Code: aws.String("test"), 247 Message: aws.String("test"), 248 SenderFault: aws.Bool(false), 249 }, 250 }, 251 } 252 }) 253 if err := req.Send(); err != nil { 254 t.Errorf("expect no error, got %v", err) 255 } 256 } 257 258 func TestSendMessageBatchChecksumInvalid(t *testing.T) { 259 req, _ := svc.SendMessageBatchRequest(&sqs.SendMessageBatchInput{ 260 Entries: []*sqs.SendMessageBatchRequestEntry{ 261 {Id: aws.String("1"), MessageBody: aws.String("test")}, 262 {Id: aws.String("2"), MessageBody: aws.String("test")}, 263 {Id: aws.String("3"), MessageBody: aws.String("test")}, 264 {Id: aws.String("4"), MessageBody: aws.String("test")}, 265 }, 266 }) 267 req.Handlers.Send.PushBack(func(r *request.Request) { 268 md5 := "098f6bcd4621d373cade4e832627b4f6" 269 body := ioutil.NopCloser(bytes.NewReader([]byte(""))) 270 r.HTTPResponse = &http.Response{StatusCode: 200, Body: body} 271 r.Data = &sqs.SendMessageBatchOutput{ 272 Successful: []*sqs.SendMessageBatchResultEntry{ 273 {MD5OfMessageBody: &md5, MessageId: aws.String("123"), Id: aws.String("1")}, 274 {MD5OfMessageBody: aws.String("000"), MessageId: aws.String("456"), Id: aws.String("2")}, 275 {MD5OfMessageBody: aws.String("000"), MessageId: aws.String("789"), Id: aws.String("3")}, 276 {MD5OfMessageBody: &md5, MessageId: aws.String("012"), Id: aws.String("4")}, 277 }, 278 } 279 }) 280 err := req.Send() 281 if err == nil { 282 t.Fatalf("expect error, got nil") 283 } 284 285 if e, a := "InvalidChecksum", err.(awserr.Error).Code(); e != a { 286 t.Errorf("expect %v, got %v", e, a) 287 } 288 if e, a := err.(awserr.Error).Message(), "invalid messages: 456, 789"; !strings.Contains(a, e) { 289 t.Errorf("expect %v to be in %v, was not", e, a) 290 } 291 }