import (
"bytes"
"context"
+ "errors"
"io/ioutil"
"git.arvados.org/arvados.git/sdk/go/arvadostest"
"github.com/aws/aws-sdk-go-v2/aws"
- "github.com/aws/aws-sdk-go-v2/aws/defaults"
- "github.com/aws/aws-sdk-go-v2/aws/ec2metadata"
- "github.com/aws/aws-sdk-go-v2/aws/ec2rolecreds"
- "github.com/aws/aws-sdk-go-v2/aws/endpoints"
+ "github.com/aws/aws-sdk-go-v2/config"
+ "github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
check "gopkg.in/check.v1"
)
stage := s.s3setup(c)
defer stage.teardown(c)
- cfg := defaults.Config()
- cfg.Credentials = aws.NewChainProvider([]aws.CredentialsProvider{
- aws.NewStaticCredentialsProvider(arvadostest.ActiveTokenUUID, arvadostest.ActiveToken, ""),
- ec2rolecreds.New(ec2metadata.New(cfg)),
- })
- cfg.EndpointResolver = aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
- if service == "s3" {
- return aws.Endpoint{
- URL: s.testServer.URL,
- SigningRegion: "custom-signing-region",
- }, nil
- }
- return endpoints.NewDefaultResolver().ResolveEndpoint(service, region)
+ cfg, err := config.LoadDefaultConfig(context.TODO(),
+ func(o *config.LoadOptions) error {
+ o.Credentials = credentials.StaticCredentialsProvider{
+ Value: aws.Credentials{
+ AccessKeyID: arvadostest.ActiveTokenUUID,
+ SecretAccessKey: arvadostest.ActiveToken,
+ Source: "test suite configuration",
+ },
+ }
+ o.EndpointResolverWithOptions = aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
+ if service == "S3" {
+ return aws.Endpoint{
+ URL: s.testServer.URL,
+ HostnameImmutable: true,
+ SigningRegion: "test-region",
+ Source: aws.EndpointSourceCustom,
+ }, nil
+ }
+ // else, use default
+ return aws.Endpoint{}, &aws.EndpointNotFoundError{Err: errors.New("endpoint not overridden")}
+ })
+ return nil
+ })
+ c.Assert(err, check.IsNil)
+ client := s3.NewFromConfig(cfg, func(o *s3.Options) {
+ o.Region = "test-region"
+ o.UsePathStyle = true
})
- client := s3.New(cfg)
- client.ForcePathStyle = true
- listreq := client.ListObjectsV2Request(&s3.ListObjectsV2Input{
+ resp, err := client.ListObjectsV2(context.Background(), &s3.ListObjectsV2Input{
Bucket: aws.String(arvadostest.FooCollection),
- MaxKeys: aws.Int64(100),
+ MaxKeys: aws.Int32(100),
Prefix: aws.String(""),
ContinuationToken: nil,
})
- resp, err := listreq.Send(context.Background())
c.Assert(err, check.IsNil)
c.Check(resp.Contents, check.HasLen, 1)
for _, key := range resp.Contents {
for i := range p {
p[i] = byte('a')
}
- putreq := client.PutObjectRequest(&s3.PutObjectInput{
+ _, err = client.PutObject(context.Background(), &s3.PutObjectInput{
Body: bytes.NewReader(p),
Bucket: aws.String(stage.collbucket.Name),
ContentType: aws.String("application/octet-stream"),
Key: aws.String("aaaa"),
})
- _, err = putreq.Send(context.Background())
c.Assert(err, check.IsNil)
- getreq := client.GetObjectRequest(&s3.GetObjectInput{
+ getresp, err := client.GetObject(context.Background(), &s3.GetObjectInput{
Bucket: aws.String(stage.collbucket.Name),
Key: aws.String("aaaa"),
})
- getresp, err := getreq.Send(context.Background())
c.Assert(err, check.IsNil)
getdata, err := ioutil.ReadAll(getresp.Body)
c.Assert(err, check.IsNil)