1// +build integration
2
3package s3control_test
4
5import (
6	"crypto/tls"
7	"flag"
8	"fmt"
9	"net/http"
10	"os"
11	"testing"
12
13	"github.com/aws/aws-sdk-go/aws"
14	"github.com/aws/aws-sdk-go/awstesting/integration"
15	"github.com/aws/aws-sdk-go/service/s3control"
16	"github.com/aws/aws-sdk-go/service/sts"
17)
18
19var (
20	svc                            *s3control.S3Control
21	s3ControlEndpoint, stsEndpoint string
22	accountID                      string
23	insecureTLS, useDualstack      bool
24)
25
26func init() {
27	flag.StringVar(&stsEndpoint, "sts-endpoint", "",
28		"The optional `URL` endpoint for the STS service.",
29	)
30	flag.StringVar(&s3ControlEndpoint, "s3-control-endpoint", "",
31		"The optional `URL` endpoint for the S3 Control service.",
32	)
33	flag.BoolVar(&insecureTLS, "insecure-tls", false,
34		"Disables TLS validation on request endpoints.",
35	)
36	flag.BoolVar(&useDualstack, "dualstack", false,
37		"Enables usage of dualstack endpoints.",
38	)
39	flag.StringVar(&accountID, "account", "",
40		"The AWS account `ID`.",
41	)
42	flag.Parse()
43}
44
45func TestMain(m *testing.M) {
46	setup()
47
48	os.Exit(m.Run())
49}
50
51// Create a bucket for testing
52func setup() {
53	tlsCfg := &tls.Config{}
54	if insecureTLS {
55		tlsCfg.InsecureSkipVerify = true
56	}
57
58	sess := integration.SessionWithDefaultRegion("us-west-2")
59	sess.Copy(&aws.Config{
60		HTTPClient: &http.Client{
61			Transport: &http.Transport{
62				TLSClientConfig: tlsCfg,
63			},
64		},
65		UseDualStack: aws.Bool(useDualstack),
66	})
67
68	if len(accountID) == 0 {
69		stsSvc := sts.New(sess, &aws.Config{
70			Endpoint: &stsEndpoint,
71		})
72		identity, err := stsSvc.GetCallerIdentity(&sts.GetCallerIdentityInput{})
73		if err != nil {
74			panic(fmt.Sprintf("failed to get accountID, %v", err))
75		}
76		accountID = aws.StringValue(identity.Account)
77	}
78
79	svc = s3control.New(sess, &aws.Config{
80		Endpoint: &s3ControlEndpoint,
81	})
82}
83