github.com/aavshr/aws-sdk-go@v1.41.3/service/s3/sse_test.go (about)

     1  package s3_test
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/aavshr/aws-sdk-go/aws"
     8  	"github.com/aavshr/aws-sdk-go/aws/awserr"
     9  	"github.com/aavshr/aws-sdk-go/awstesting/unit"
    10  	"github.com/aavshr/aws-sdk-go/service/s3"
    11  )
    12  
    13  func TestSSECustomerKeyOverHTTPError(t *testing.T) {
    14  	s := s3.New(unit.Session, &aws.Config{DisableSSL: aws.Bool(true)})
    15  	req, _ := s.CopyObjectRequest(&s3.CopyObjectInput{
    16  		Bucket:         aws.String("bucket"),
    17  		CopySource:     aws.String("bucket/source"),
    18  		Key:            aws.String("dest"),
    19  		SSECustomerKey: aws.String("key"),
    20  	})
    21  	err := req.Build()
    22  
    23  	if err == nil {
    24  		t.Error("expected an error")
    25  	}
    26  	if e, a := "ConfigError", err.(awserr.Error).Code(); e != a {
    27  		t.Errorf("expected %s, but received %s", e, a)
    28  	}
    29  	if !strings.Contains(err.(awserr.Error).Message(), "cannot send SSE keys over HTTP") {
    30  		t.Errorf("expected error to contain 'cannot send SSE keys over HTTP', but received %s", err.(awserr.Error).Message())
    31  	}
    32  }
    33  
    34  func TestCopySourceSSECustomerKeyOverHTTPError(t *testing.T) {
    35  	s := s3.New(unit.Session, &aws.Config{DisableSSL: aws.Bool(true)})
    36  	req, _ := s.CopyObjectRequest(&s3.CopyObjectInput{
    37  		Bucket:                   aws.String("bucket"),
    38  		CopySource:               aws.String("bucket/source"),
    39  		Key:                      aws.String("dest"),
    40  		CopySourceSSECustomerKey: aws.String("key"),
    41  	})
    42  	err := req.Build()
    43  
    44  	if err == nil {
    45  		t.Error("expected an error")
    46  	}
    47  	if e, a := "ConfigError", err.(awserr.Error).Code(); e != a {
    48  		t.Errorf("expected %s, but received %s", e, a)
    49  	}
    50  	if !strings.Contains(err.(awserr.Error).Message(), "cannot send SSE keys over HTTP") {
    51  		t.Errorf("expected error to contain 'cannot send SSE keys over HTTP', but received %s", err.(awserr.Error).Message())
    52  	}
    53  }
    54  
    55  func TestComputeSSEKeys(t *testing.T) {
    56  	s := s3.New(unit.Session)
    57  	req, _ := s.CopyObjectRequest(&s3.CopyObjectInput{
    58  		Bucket:                   aws.String("bucket"),
    59  		CopySource:               aws.String("bucket/source"),
    60  		Key:                      aws.String("dest"),
    61  		SSECustomerKey:           aws.String("key"),
    62  		CopySourceSSECustomerKey: aws.String("key"),
    63  	})
    64  	err := req.Build()
    65  
    66  	if err != nil {
    67  		t.Errorf("expected no error, but received %v", err)
    68  	}
    69  	if e, a := "a2V5", req.HTTPRequest.Header.Get("x-amz-server-side-encryption-customer-key"); e != a {
    70  		t.Errorf("expected %s, but received %s", e, a)
    71  	}
    72  	if e, a := "a2V5", req.HTTPRequest.Header.Get("x-amz-copy-source-server-side-encryption-customer-key"); e != a {
    73  		t.Errorf("expected %s, but received %s", e, a)
    74  	}
    75  	if e, a := "PG4LipwVIkqCKLmpjKFTHQ==", req.HTTPRequest.Header.Get("x-amz-server-side-encryption-customer-key-md5"); e != a {
    76  		t.Errorf("expected %s, but received %s", e, a)
    77  	}
    78  	if e, a := "PG4LipwVIkqCKLmpjKFTHQ==", req.HTTPRequest.Header.Get("x-amz-copy-source-server-side-encryption-customer-key-md5"); e != a {
    79  		t.Errorf("expected %s, but received %s", e, a)
    80  	}
    81  }
    82  
    83  func TestComputeSSEKeysShortcircuit(t *testing.T) {
    84  	s := s3.New(unit.Session)
    85  	req, _ := s.CopyObjectRequest(&s3.CopyObjectInput{
    86  		Bucket:                      aws.String("bucket"),
    87  		CopySource:                  aws.String("bucket/source"),
    88  		Key:                         aws.String("dest"),
    89  		SSECustomerKey:              aws.String("key"),
    90  		CopySourceSSECustomerKey:    aws.String("key"),
    91  		SSECustomerKeyMD5:           aws.String("MD5"),
    92  		CopySourceSSECustomerKeyMD5: aws.String("MD5"),
    93  	})
    94  	err := req.Build()
    95  
    96  	if err != nil {
    97  		t.Errorf("expected no error, but received %v", err)
    98  	}
    99  	if e, a := "a2V5", req.HTTPRequest.Header.Get("x-amz-server-side-encryption-customer-key"); e != a {
   100  		t.Errorf("expected %s, but received %s", e, a)
   101  	}
   102  	if e, a := "a2V5", req.HTTPRequest.Header.Get("x-amz-copy-source-server-side-encryption-customer-key"); e != a {
   103  		t.Errorf("expected %s, but received %s", e, a)
   104  	}
   105  	if e, a := "MD5", req.HTTPRequest.Header.Get("x-amz-server-side-encryption-customer-key-md5"); e != a {
   106  		t.Errorf("expected %s, but received %s", e, a)
   107  	}
   108  	if e, a := "MD5", req.HTTPRequest.Header.Get("x-amz-copy-source-server-side-encryption-customer-key-md5"); e != a {
   109  		t.Errorf("expected %s, but received %s", e, a)
   110  	}
   111  }
   112  
   113  func TestSSECustomerKeysWithSpaces(t *testing.T) {
   114  	s := s3.New(unit.Session)
   115  	req, _ := s.CopyObjectRequest(&s3.CopyObjectInput{
   116  		Bucket:                   aws.String("bucket"),
   117  		CopySource:               aws.String("bucket/source"),
   118  		Key:                      aws.String("dest"),
   119  		SSECustomerKey:           aws.String("   key   "),
   120  		CopySourceSSECustomerKey: aws.String("   copykey   "),
   121  	})
   122  	err := req.Build()
   123  	if err != nil {
   124  		t.Errorf("expected no error, but received %v", err)
   125  	}
   126  	if e, a := "ICAga2V5ICAg", req.HTTPRequest.Header.Get("x-amz-server-side-encryption-customer-key"); e != a {
   127  		t.Errorf("expected %s, but received %s", e, a)
   128  	}
   129  	if e, a := "ICAgY29weWtleSAgIA==", req.HTTPRequest.Header.Get("x-amz-copy-source-server-side-encryption-customer-key"); e != a {
   130  		t.Errorf("expected %s, but received %s", e, a)
   131  	}
   132  	if e, a := "13XiUSCa6ReZ3CHtCLiJLg==", req.HTTPRequest.Header.Get("x-amz-server-side-encryption-customer-key-md5"); e != a {
   133  		t.Errorf("expected %s, but received %s", e, a)
   134  	}
   135  	if e, a := "MHVtfmuml539o1871Vsc6w==", req.HTTPRequest.Header.Get("x-amz-copy-source-server-side-encryption-customer-key-md5"); e != a {
   136  		t.Errorf("expected %s, but received %s", e, a)
   137  	}
   138  }