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  }