github.com/aavshr/aws-sdk-go@v1.41.3/service/s3/s3manager/bucket_region_test.go (about) 1 package s3manager 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 8 "github.com/aavshr/aws-sdk-go/aws" 9 "github.com/aavshr/aws-sdk-go/aws/awserr" 10 "github.com/aavshr/aws-sdk-go/awstesting/unit" 11 "github.com/aavshr/aws-sdk-go/service/s3" 12 ) 13 14 func testSetupGetBucketRegionServer(region string, statusCode int, incHeader bool) *httptest.Server { 15 return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 16 if incHeader { 17 w.Header().Set(bucketRegionHeader, region) 18 } 19 w.WriteHeader(statusCode) 20 })) 21 } 22 23 var testGetBucketRegionCases = []struct { 24 RespRegion string 25 StatusCode int 26 HintRegion string 27 ExpectReqRegion string 28 }{ 29 {"bucket-region", 301, "hint-region", ""}, 30 {"bucket-region", 403, "hint-region", ""}, 31 {"bucket-region", 200, "hint-region", ""}, 32 {"bucket-region", 200, "", "default-region"}, 33 } 34 35 func TestGetBucketRegion_Exists(t *testing.T) { 36 for i, c := range testGetBucketRegionCases { 37 server := testSetupGetBucketRegionServer(c.RespRegion, c.StatusCode, true) 38 defer server.Close() 39 40 sess := unit.Session.Copy() 41 sess.Config.Region = aws.String("default-region") 42 sess.Config.Endpoint = aws.String(server.URL) 43 sess.Config.DisableSSL = aws.Bool(true) 44 45 ctx := aws.BackgroundContext() 46 region, err := GetBucketRegion(ctx, sess, "bucket", c.HintRegion) 47 if err != nil { 48 t.Fatalf("%d, expect no error, got %v", i, err) 49 } 50 if e, a := c.RespRegion, region; e != a { 51 t.Errorf("%d, expect %q region, got %q", i, e, a) 52 } 53 } 54 } 55 56 func TestGetBucketRegion_NotExists(t *testing.T) { 57 server := testSetupGetBucketRegionServer("ignore-region", 404, false) 58 defer server.Close() 59 60 sess := unit.Session.Copy() 61 sess.Config.Endpoint = aws.String(server.URL) 62 sess.Config.DisableSSL = aws.Bool(true) 63 64 ctx := aws.BackgroundContext() 65 region, err := GetBucketRegion(ctx, sess, "bucket", "hint-region") 66 if err == nil { 67 t.Fatalf("expect error, but did not get one") 68 } 69 aerr := err.(awserr.Error) 70 if e, a := "NotFound", aerr.Code(); e != a { 71 t.Errorf("expect %s error code, got %s", e, a) 72 } 73 if len(region) != 0 { 74 t.Errorf("expect region not to be set, got %q", region) 75 } 76 } 77 78 func TestGetBucketRegionWithClient(t *testing.T) { 79 for i, c := range testGetBucketRegionCases { 80 server := testSetupGetBucketRegionServer(c.RespRegion, c.StatusCode, true) 81 defer server.Close() 82 83 svc := s3.New(unit.Session, &aws.Config{ 84 Region: aws.String("hint-region"), 85 Endpoint: aws.String(server.URL), 86 DisableSSL: aws.Bool(true), 87 }) 88 89 ctx := aws.BackgroundContext() 90 91 region, err := GetBucketRegionWithClient(ctx, svc, "bucket") 92 if err != nil { 93 t.Fatalf("%d, expect no error, got %v", i, err) 94 } 95 if e, a := c.RespRegion, region; e != a { 96 t.Errorf("%d, expect %q region, got %q", i, e, a) 97 } 98 } 99 } 100 101 func TestGetBucketRegionWithClientWithoutRegion(t *testing.T) { 102 for i, c := range testGetBucketRegionCases { 103 server := testSetupGetBucketRegionServer(c.RespRegion, c.StatusCode, true) 104 defer server.Close() 105 106 svc := s3.New(unit.Session, &aws.Config{ 107 Endpoint: aws.String(server.URL), 108 DisableSSL: aws.Bool(true), 109 }) 110 111 ctx := aws.BackgroundContext() 112 113 region, err := GetBucketRegionWithClient(ctx, svc, "bucket") 114 if err != nil { 115 t.Fatalf("%d, expect no error, got %v", i, err) 116 } 117 if e, a := c.RespRegion, region; e != a { 118 t.Errorf("%d, expect %q region, got %q", i, e, a) 119 } 120 } 121 }