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  }