Prune dependencies (#1917)
When running `dep prune` explicitly, the following message show up: ``` dep prune Pruning is now performed automatically by dep ensure. ``` However, after the explicit `dep prune`, there are still many files deleted. (Guess `dep ensure` is not complete yet). This fix did a `dep prune` to clean up unneeded files. Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
parent
fcc32a79d4
commit
c7321fabc2
10332 changed files with 0 additions and 4102992 deletions
14
vendor/github.com/aws/aws-sdk-go/.github/ISSUE_TEMPLATE.md
generated
vendored
14
vendor/github.com/aws/aws-sdk-go/.github/ISSUE_TEMPLATE.md
generated
vendored
|
@ -1,14 +0,0 @@
|
|||
Please fill out the sections below to help us address your issue.
|
||||
|
||||
### Version of AWS SDK for Go?
|
||||
|
||||
|
||||
### Version of Go (`go version`)?
|
||||
|
||||
|
||||
### What issue did you see?
|
||||
|
||||
### Steps to reproduce
|
||||
|
||||
If you have an runnable example, please include it.
|
||||
|
3
vendor/github.com/aws/aws-sdk-go/.github/PULL_REQUEST_TEMPLATE.md
generated
vendored
3
vendor/github.com/aws/aws-sdk-go/.github/PULL_REQUEST_TEMPLATE.md
generated
vendored
|
@ -1,3 +0,0 @@
|
|||
For changes to files under the `/model/` folder, and manual edits to autogenerated code (e.g. `/service/s3/api.go`) please create an Issue instead of a PR for those type of changes.
|
||||
|
||||
If there is an existing bug or feature this PR is answers please reference it here.
|
86
vendor/github.com/aws/aws-sdk-go/aws/arn/arn.go
generated
vendored
86
vendor/github.com/aws/aws-sdk-go/aws/arn/arn.go
generated
vendored
|
@ -1,86 +0,0 @@
|
|||
// Package arn provides a parser for interacting with Amazon Resource Names.
|
||||
package arn
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
arnDelimiter = ":"
|
||||
arnSections = 6
|
||||
arnPrefix = "arn:"
|
||||
|
||||
// zero-indexed
|
||||
sectionPartition = 1
|
||||
sectionService = 2
|
||||
sectionRegion = 3
|
||||
sectionAccountID = 4
|
||||
sectionResource = 5
|
||||
|
||||
// errors
|
||||
invalidPrefix = "arn: invalid prefix"
|
||||
invalidSections = "arn: not enough sections"
|
||||
)
|
||||
|
||||
// ARN captures the individual fields of an Amazon Resource Name.
|
||||
// See http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html for more information.
|
||||
type ARN struct {
|
||||
// The partition that the resource is in. For standard AWS regions, the partition is "aws". If you have resources in
|
||||
// other partitions, the partition is "aws-partitionname". For example, the partition for resources in the China
|
||||
// (Beijing) region is "aws-cn".
|
||||
Partition string
|
||||
|
||||
// The service namespace that identifies the AWS product (for example, Amazon S3, IAM, or Amazon RDS). For a list of
|
||||
// namespaces, see
|
||||
// http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces.
|
||||
Service string
|
||||
|
||||
// The region the resource resides in. Note that the ARNs for some resources do not require a region, so this
|
||||
// component might be omitted.
|
||||
Region string
|
||||
|
||||
// The ID of the AWS account that owns the resource, without the hyphens. For example, 123456789012. Note that the
|
||||
// ARNs for some resources don't require an account number, so this component might be omitted.
|
||||
AccountID string
|
||||
|
||||
// The content of this part of the ARN varies by service. It often includes an indicator of the type of resource —
|
||||
// for example, an IAM user or Amazon RDS database - followed by a slash (/) or a colon (:), followed by the
|
||||
// resource name itself. Some services allows paths for resource names, as described in
|
||||
// http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-paths.
|
||||
Resource string
|
||||
}
|
||||
|
||||
// Parse parses an ARN into its constituent parts.
|
||||
//
|
||||
// Some example ARNs:
|
||||
// arn:aws:elasticbeanstalk:us-east-1:123456789012:environment/My App/MyEnvironment
|
||||
// arn:aws:iam::123456789012:user/David
|
||||
// arn:aws:rds:eu-west-1:123456789012:db:mysql-db
|
||||
// arn:aws:s3:::my_corporate_bucket/exampleobject.png
|
||||
func Parse(arn string) (ARN, error) {
|
||||
if !strings.HasPrefix(arn, arnPrefix) {
|
||||
return ARN{}, errors.New(invalidPrefix)
|
||||
}
|
||||
sections := strings.SplitN(arn, arnDelimiter, arnSections)
|
||||
if len(sections) != arnSections {
|
||||
return ARN{}, errors.New(invalidSections)
|
||||
}
|
||||
return ARN{
|
||||
Partition: sections[sectionPartition],
|
||||
Service: sections[sectionService],
|
||||
Region: sections[sectionRegion],
|
||||
AccountID: sections[sectionAccountID],
|
||||
Resource: sections[sectionResource],
|
||||
}, nil
|
||||
}
|
||||
|
||||
// String returns the canonical representation of the ARN
|
||||
func (arn ARN) String() string {
|
||||
return arnPrefix +
|
||||
arn.Partition + arnDelimiter +
|
||||
arn.Service + arnDelimiter +
|
||||
arn.Region + arnDelimiter +
|
||||
arn.AccountID + arnDelimiter +
|
||||
arn.Resource
|
||||
}
|
90
vendor/github.com/aws/aws-sdk-go/aws/arn/arn_test.go
generated
vendored
90
vendor/github.com/aws/aws-sdk-go/aws/arn/arn_test.go
generated
vendored
|
@ -1,90 +0,0 @@
|
|||
// +build go1.7
|
||||
|
||||
package arn
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParseARN(t *testing.T) {
|
||||
cases := []struct {
|
||||
input string
|
||||
arn ARN
|
||||
err error
|
||||
}{
|
||||
{
|
||||
input: "invalid",
|
||||
err: errors.New(invalidPrefix),
|
||||
},
|
||||
{
|
||||
input: "arn:nope",
|
||||
err: errors.New(invalidSections),
|
||||
},
|
||||
{
|
||||
input: "arn:aws:ecr:us-west-2:123456789012:repository/foo/bar",
|
||||
arn: ARN{
|
||||
Partition: "aws",
|
||||
Service: "ecr",
|
||||
Region: "us-west-2",
|
||||
AccountID: "123456789012",
|
||||
Resource: "repository/foo/bar",
|
||||
},
|
||||
},
|
||||
{
|
||||
input: "arn:aws:elasticbeanstalk:us-east-1:123456789012:environment/My App/MyEnvironment",
|
||||
arn: ARN{
|
||||
Partition: "aws",
|
||||
Service: "elasticbeanstalk",
|
||||
Region: "us-east-1",
|
||||
AccountID: "123456789012",
|
||||
Resource: "environment/My App/MyEnvironment",
|
||||
},
|
||||
},
|
||||
{
|
||||
input: "arn:aws:iam::123456789012:user/David",
|
||||
arn: ARN{
|
||||
Partition: "aws",
|
||||
Service: "iam",
|
||||
Region: "",
|
||||
AccountID: "123456789012",
|
||||
Resource: "user/David",
|
||||
},
|
||||
},
|
||||
{
|
||||
input: "arn:aws:rds:eu-west-1:123456789012:db:mysql-db",
|
||||
arn: ARN{
|
||||
Partition: "aws",
|
||||
Service: "rds",
|
||||
Region: "eu-west-1",
|
||||
AccountID: "123456789012",
|
||||
Resource: "db:mysql-db",
|
||||
},
|
||||
},
|
||||
{
|
||||
input: "arn:aws:s3:::my_corporate_bucket/exampleobject.png",
|
||||
arn: ARN{
|
||||
Partition: "aws",
|
||||
Service: "s3",
|
||||
Region: "",
|
||||
AccountID: "",
|
||||
Resource: "my_corporate_bucket/exampleobject.png",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.input, func(t *testing.T) {
|
||||
spec, err := Parse(tc.input)
|
||||
if tc.arn != spec {
|
||||
t.Errorf("Expected %q to parse as %v, but got %v", tc.input, tc.arn, spec)
|
||||
}
|
||||
if err == nil && tc.err != nil {
|
||||
t.Errorf("Expected err to be %v, but got nil", tc.err)
|
||||
} else if err != nil && tc.err == nil {
|
||||
t.Errorf("Expected err to be nil, but got %v", err)
|
||||
} else if err != nil && tc.err != nil && err.Error() != tc.err.Error() {
|
||||
t.Errorf("Expected err to be %v, but got %v", tc.err, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
5
vendor/github.com/aws/aws-sdk-go/aws/credentials/plugincreds/doc_1_7.go
generated
vendored
5
vendor/github.com/aws/aws-sdk-go/aws/credentials/plugincreds/doc_1_7.go
generated
vendored
|
@ -1,5 +0,0 @@
|
|||
// +build !go1.8
|
||||
|
||||
// Package plugincreds provides usage of Go plugins for providing credentials
|
||||
// to the SDK. Only available with Go 1.8 and above.
|
||||
package plugincreds
|
211
vendor/github.com/aws/aws-sdk-go/aws/credentials/plugincreds/provider.go
generated
vendored
211
vendor/github.com/aws/aws-sdk-go/aws/credentials/plugincreds/provider.go
generated
vendored
|
@ -1,211 +0,0 @@
|
|||
// +build go1.8
|
||||
|
||||
// Package plugincreds implements a credentials provider sourced from a Go
|
||||
// plugin. This package allows you to use a Go plugin to retrieve AWS credentials
|
||||
// for the SDK to use for service API calls.
|
||||
//
|
||||
// As of Go 1.8 plugins are only supported on the Linux platform.
|
||||
//
|
||||
// Plugin Symbol Name
|
||||
//
|
||||
// The "GetAWSSDKCredentialProvider" is the symbol name that will be used to
|
||||
// lookup the credentials provider getter from the plugin. If you want to use a
|
||||
// custom symbol name you should use GetPluginProviderFnsByName to lookup the
|
||||
// symbol by a custom name.
|
||||
//
|
||||
// This symbol is a function that returns two additional functions. One to
|
||||
// retrieve the credentials, and another to determine if the credentials have
|
||||
// expired.
|
||||
//
|
||||
// Plugin Symbol Signature
|
||||
//
|
||||
// The plugin credential provider requires the symbol to match the
|
||||
// following signature.
|
||||
//
|
||||
// func() (RetrieveFn func() (key, secret, token string, err error), IsExpiredFn func() bool)
|
||||
//
|
||||
// Plugin Implementation Exmaple
|
||||
//
|
||||
// The following is an example implementation of a SDK credential provider using
|
||||
// the plugin provider in this package. See the SDK's example/aws/credential/plugincreds/plugin
|
||||
// folder for a runnable example of this.
|
||||
//
|
||||
// package main
|
||||
//
|
||||
// func main() {}
|
||||
//
|
||||
// var myCredProvider provider
|
||||
//
|
||||
// // Build: go build -o plugin.so -buildmode=plugin plugin.go
|
||||
// func init() {
|
||||
// // Initialize a mock credential provider with stubs
|
||||
// myCredProvider = provider{"a","b","c"}
|
||||
// }
|
||||
//
|
||||
// // GetAWSSDKCredentialProvider is the symbol SDK will lookup and use to
|
||||
// // get the credential provider's retrieve and isExpired functions.
|
||||
// func GetAWSSDKCredentialProvider() (func() (key, secret, token string, err error), func() bool) {
|
||||
// return myCredProvider.Retrieve, myCredProvider.IsExpired
|
||||
// }
|
||||
//
|
||||
// // mock implementation of a type that returns retrieves credentials and
|
||||
// // returns if they have expired.
|
||||
// type provider struct {
|
||||
// key, secret, token string
|
||||
// }
|
||||
//
|
||||
// func (p provider) Retrieve() (key, secret, token string, err error) {
|
||||
// return p.key, p.secret, p.token, nil
|
||||
// }
|
||||
//
|
||||
// func (p *provider) IsExpired() bool {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// Configuring SDK for Plugin Credentials
|
||||
//
|
||||
// To configure the SDK to use a plugin's credential provider you'll need to first
|
||||
// open the plugin file using the plugin standard library package. Once you have
|
||||
// a handle to the plugin you can use the NewCredentials function of this package
|
||||
// to create a new credentials.Credentials value that can be set as the
|
||||
// credentials loader of a Session or Config. See the SDK's example/aws/credential/plugincreds
|
||||
// folder for a runnable example of this.
|
||||
//
|
||||
// // Open plugin, and load it into the process.
|
||||
// p, err := plugin.Open("somefile.so")
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
//
|
||||
// // Create a new Credentials value which will source the provider's Retrieve
|
||||
// // and IsExpired functions from the plugin.
|
||||
// creds, err := plugincreds.NewCredentials(p)
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
//
|
||||
// // Example to configure a Session with the newly created credentials that
|
||||
// // will be sourced using the plugin's functionality.
|
||||
// sess := session.Must(session.NewSession(&aws.Config{
|
||||
// Credentials: creds,
|
||||
// }))
|
||||
package plugincreds
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"plugin"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||
)
|
||||
|
||||
// ProviderSymbolName the symbol name the SDK will use to lookup the plugin
|
||||
// provider value from.
|
||||
const ProviderSymbolName = `GetAWSSDKCredentialProvider`
|
||||
|
||||
// ProviderName is the name this credentials provider will label any returned
|
||||
// credentials Value with.
|
||||
const ProviderName = `PluginCredentialsProvider`
|
||||
|
||||
const (
|
||||
// ErrCodeLookupSymbolError failed to lookup symbol
|
||||
ErrCodeLookupSymbolError = "LookupSymbolError"
|
||||
|
||||
// ErrCodeInvalidSymbolError symbol invalid
|
||||
ErrCodeInvalidSymbolError = "InvalidSymbolError"
|
||||
|
||||
// ErrCodePluginRetrieveNil Retrieve function was nil
|
||||
ErrCodePluginRetrieveNil = "PluginRetrieveNilError"
|
||||
|
||||
// ErrCodePluginIsExpiredNil IsExpired Function was nil
|
||||
ErrCodePluginIsExpiredNil = "PluginIsExpiredNilError"
|
||||
|
||||
// ErrCodePluginProviderRetrieve plugin provider's retrieve returned error
|
||||
ErrCodePluginProviderRetrieve = "PluginProviderRetrieveError"
|
||||
)
|
||||
|
||||
// Provider is the credentials provider that will use the plugin provided
|
||||
// Retrieve and IsExpired functions to retrieve credentials.
|
||||
type Provider struct {
|
||||
RetrieveFn func() (key, secret, token string, err error)
|
||||
IsExpiredFn func() bool
|
||||
}
|
||||
|
||||
// NewCredentials returns a new Credentials loader using the plugin provider.
|
||||
// If the symbol isn't found or is invalid in the plugin an error will be
|
||||
// returned.
|
||||
func NewCredentials(p *plugin.Plugin) (*credentials.Credentials, error) {
|
||||
retrieve, isExpired, err := GetPluginProviderFns(p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return credentials.NewCredentials(Provider{
|
||||
RetrieveFn: retrieve,
|
||||
IsExpiredFn: isExpired,
|
||||
}), nil
|
||||
}
|
||||
|
||||
// Retrieve will return the credentials Value if they were successfully retrieved
|
||||
// from the underlying plugin provider. An error will be returned otherwise.
|
||||
func (p Provider) Retrieve() (credentials.Value, error) {
|
||||
creds := credentials.Value{
|
||||
ProviderName: ProviderName,
|
||||
}
|
||||
|
||||
k, s, t, err := p.RetrieveFn()
|
||||
if err != nil {
|
||||
return creds, awserr.New(ErrCodePluginProviderRetrieve,
|
||||
"failed to retrieve credentials with plugin provider", err)
|
||||
}
|
||||
|
||||
creds.AccessKeyID = k
|
||||
creds.SecretAccessKey = s
|
||||
creds.SessionToken = t
|
||||
|
||||
return creds, nil
|
||||
}
|
||||
|
||||
// IsExpired will return the expired state of the underlying plugin provider.
|
||||
func (p Provider) IsExpired() bool {
|
||||
return p.IsExpiredFn()
|
||||
}
|
||||
|
||||
// GetPluginProviderFns returns the plugin's Retrieve and IsExpired functions
|
||||
// returned by the plugin's credential provider getter.
|
||||
//
|
||||
// Uses ProviderSymbolName as the symbol name when lookup up the symbol. If you
|
||||
// want to use a different symbol name, use GetPluginProviderFnsByName.
|
||||
func GetPluginProviderFns(p *plugin.Plugin) (func() (key, secret, token string, err error), func() bool, error) {
|
||||
return GetPluginProviderFnsByName(p, ProviderSymbolName)
|
||||
}
|
||||
|
||||
// GetPluginProviderFnsByName returns the plugin's Retrieve and IsExpired functions
|
||||
// returned by the plugin's credential provider getter.
|
||||
//
|
||||
// Same as GetPluginProviderFns, but takes a custom symbolName to lookup with.
|
||||
func GetPluginProviderFnsByName(p *plugin.Plugin, symbolName string) (func() (key, secret, token string, err error), func() bool, error) {
|
||||
sym, err := p.Lookup(symbolName)
|
||||
if err != nil {
|
||||
return nil, nil, awserr.New(ErrCodeLookupSymbolError,
|
||||
fmt.Sprintf("failed to lookup %s plugin provider symbol", symbolName), err)
|
||||
}
|
||||
|
||||
fn, ok := sym.(func() (func() (key, secret, token string, err error), func() bool))
|
||||
if !ok {
|
||||
return nil, nil, awserr.New(ErrCodeInvalidSymbolError,
|
||||
fmt.Sprintf("symbol %T, does not match the 'func() (func() (key, secret, token string, err error), func() bool)' type", sym), nil)
|
||||
}
|
||||
|
||||
retrieveFn, isExpiredFn := fn()
|
||||
if retrieveFn == nil {
|
||||
return nil, nil, awserr.New(ErrCodePluginRetrieveNil,
|
||||
"the plugin provider retrieve function cannot be nil", nil)
|
||||
}
|
||||
if isExpiredFn == nil {
|
||||
return nil, nil, awserr.New(ErrCodePluginIsExpiredNil,
|
||||
"the plugin provider isExpired function cannot be nil", nil)
|
||||
}
|
||||
|
||||
return retrieveFn, isExpiredFn, nil
|
||||
}
|
71
vendor/github.com/aws/aws-sdk-go/aws/credentials/plugincreds/provider_test.go
generated
vendored
71
vendor/github.com/aws/aws-sdk-go/aws/credentials/plugincreds/provider_test.go
generated
vendored
|
@ -1,71 +0,0 @@
|
|||
// +build go1.8,awsinclude
|
||||
|
||||
package plugincreds
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||
)
|
||||
|
||||
func TestProvider_Passthrough(t *testing.T) {
|
||||
p := Provider{
|
||||
RetrieveFn: func() (string, string, string, error) {
|
||||
return "key", "secret", "token", nil
|
||||
},
|
||||
IsExpiredFn: func() bool {
|
||||
return false
|
||||
},
|
||||
}
|
||||
|
||||
actual, err := p.Retrieve()
|
||||
if err != nil {
|
||||
t.Fatalf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
expect := credentials.Value{
|
||||
AccessKeyID: "key",
|
||||
SecretAccessKey: "secret",
|
||||
SessionToken: "token",
|
||||
ProviderName: ProviderName,
|
||||
}
|
||||
if expect != actual {
|
||||
t.Errorf("expect %+v credentials, got %+v", expect, actual)
|
||||
}
|
||||
}
|
||||
|
||||
func TestProvider_Error(t *testing.T) {
|
||||
expectErr := fmt.Errorf("expect error")
|
||||
|
||||
p := Provider{
|
||||
RetrieveFn: func() (string, string, string, error) {
|
||||
return "", "", "", expectErr
|
||||
},
|
||||
IsExpiredFn: func() bool {
|
||||
return false
|
||||
},
|
||||
}
|
||||
|
||||
actual, err := p.Retrieve()
|
||||
if err == nil {
|
||||
t.Fatalf("expect error, got none")
|
||||
}
|
||||
|
||||
aerr := err.(awserr.Error)
|
||||
if e, a := ErrCodePluginProviderRetrieve, aerr.Code(); e != a {
|
||||
t.Errorf("expect %s error code, got %s", e, a)
|
||||
}
|
||||
|
||||
if e, a := expectErr, aerr.OrigErr(); e != a {
|
||||
t.Errorf("expect %v cause error, got %v", e, a)
|
||||
}
|
||||
|
||||
expect := credentials.Value{
|
||||
ProviderName: ProviderName,
|
||||
}
|
||||
if expect != actual {
|
||||
t.Errorf("expect %+v credentials, got %+v", expect, actual)
|
||||
}
|
||||
}
|
65
vendor/github.com/aws/aws-sdk-go/aws/session/testdata/shared_config
generated
vendored
65
vendor/github.com/aws/aws-sdk-go/aws/session/testdata/shared_config
generated
vendored
|
@ -1,65 +0,0 @@
|
|||
[default]
|
||||
s3 =
|
||||
unsupported_key=123
|
||||
other_unsupported=abc
|
||||
|
||||
region = default_region
|
||||
|
||||
[profile alt_profile_name]
|
||||
region = alt_profile_name_region
|
||||
|
||||
[short_profile_name_first]
|
||||
region = short_profile_name_first_short
|
||||
|
||||
[profile short_profile_name_first]
|
||||
region = short_profile_name_first_alt
|
||||
|
||||
[partial_creds]
|
||||
aws_access_key_id = partial_creds_akid
|
||||
|
||||
[complete_creds]
|
||||
aws_access_key_id = complete_creds_akid
|
||||
aws_secret_access_key = complete_creds_secret
|
||||
|
||||
[complete_creds_with_token]
|
||||
aws_access_key_id = complete_creds_with_token_akid
|
||||
aws_secret_access_key = complete_creds_with_token_secret
|
||||
aws_session_token = complete_creds_with_token_token
|
||||
|
||||
[full_profile]
|
||||
aws_access_key_id = full_profile_akid
|
||||
aws_secret_access_key = full_profile_secret
|
||||
region = full_profile_region
|
||||
|
||||
[config_file_load_order]
|
||||
region = shared_config_region
|
||||
aws_access_key_id = shared_config_akid
|
||||
aws_secret_access_key = shared_config_secret
|
||||
|
||||
[partial_assume_role]
|
||||
role_arn = partial_assume_role_role_arn
|
||||
|
||||
[assume_role]
|
||||
role_arn = assume_role_role_arn
|
||||
source_profile = complete_creds
|
||||
|
||||
[assume_role_w_mfa]
|
||||
role_arn = assume_role_role_arn
|
||||
source_profile = complete_creds
|
||||
mfa_serial = 0123456789
|
||||
|
||||
[assume_role_invalid_source_profile]
|
||||
role_arn = assume_role_invalid_source_profile_role_arn
|
||||
source_profile = profile_not_exists
|
||||
|
||||
[assume_role_w_creds]
|
||||
role_arn = assume_role_w_creds_role_arn
|
||||
source_profile = assume_role_w_creds
|
||||
external_id = 1234
|
||||
role_session_name = assume_role_w_creds_session_name
|
||||
aws_access_key_id = assume_role_w_creds_akid
|
||||
aws_secret_access_key = assume_role_w_creds_secret
|
||||
|
||||
[assume_role_wo_creds]
|
||||
role_arn = assume_role_wo_creds_role_arn
|
||||
source_profile = assume_role_wo_creds
|
1
vendor/github.com/aws/aws-sdk-go/aws/session/testdata/shared_config_invalid_ini
generated
vendored
1
vendor/github.com/aws/aws-sdk-go/aws/session/testdata/shared_config_invalid_ini
generated
vendored
|
@ -1 +0,0 @@
|
|||
[profile_nam
|
17
vendor/github.com/aws/aws-sdk-go/aws/session/testdata/shared_config_other
generated
vendored
17
vendor/github.com/aws/aws-sdk-go/aws/session/testdata/shared_config_other
generated
vendored
|
@ -1,17 +0,0 @@
|
|||
[default]
|
||||
region = default_region
|
||||
|
||||
[partial_creds]
|
||||
aws_access_key_id = AKID
|
||||
|
||||
[profile alt_profile_name]
|
||||
region = alt_profile_name_region
|
||||
|
||||
[creds_from_credentials]
|
||||
aws_access_key_id = creds_from_config_akid
|
||||
aws_secret_access_key = creds_from_config_secret
|
||||
|
||||
[config_file_load_order]
|
||||
region = shared_config_other_region
|
||||
aws_access_key_id = shared_config_other_akid
|
||||
aws_secret_access_key = shared_config_other_secret
|
19
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/Godeps/Godeps.json
generated
vendored
19
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/Godeps/Godeps.json
generated
vendored
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"ImportPath": "github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer",
|
||||
"GoVersion": "go1.6",
|
||||
"GodepVersion": "v60",
|
||||
"Deps": [
|
||||
{
|
||||
"ImportPath": "golang.org/x/tools/go/ast/astutil",
|
||||
"Rev": "b75b3f5cd5d50fbb1fb88ce784d2e7cca17bba8a"
|
||||
},
|
||||
{
|
||||
"ImportPath": "golang.org/x/tools/go/buildutil",
|
||||
"Rev": "b75b3f5cd5d50fbb1fb88ce784d2e7cca17bba8a"
|
||||
},
|
||||
{
|
||||
"ImportPath": "golang.org/x/tools/go/loader",
|
||||
"Rev": "b75b3f5cd5d50fbb1fb88ce784d2e7cca17bba8a"
|
||||
}
|
||||
]
|
||||
}
|
5
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/Godeps/Readme
generated
vendored
5
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/Godeps/Readme
generated
vendored
|
@ -1,5 +0,0 @@
|
|||
This directory tree is generated automatically by godep.
|
||||
|
||||
Please do not edit.
|
||||
|
||||
See https://github.com/tools/godep for more information.
|
200
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/gen/gen.go
generated
vendored
200
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/gen/gen.go
generated
vendored
|
@ -1,200 +0,0 @@
|
|||
// +build go1.5,deprecated
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"go/format"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/aws/aws-sdk-go/private/model/api"
|
||||
)
|
||||
|
||||
type pkg struct {
|
||||
oldAPI *api.API
|
||||
newAPI *api.API
|
||||
shapes map[string]*shapentry
|
||||
operations map[string]*opentry
|
||||
}
|
||||
|
||||
type shapentry struct {
|
||||
oldShape *api.Shape
|
||||
newShape *api.Shape
|
||||
}
|
||||
|
||||
type opentry struct {
|
||||
oldName string
|
||||
newName string
|
||||
}
|
||||
|
||||
type packageRenames struct {
|
||||
Shapes map[string]string
|
||||
Operations map[string]string
|
||||
Fields map[string]string
|
||||
}
|
||||
|
||||
var exportMap = map[string]*packageRenames{}
|
||||
|
||||
func generateRenames(w io.Writer) error {
|
||||
tmpl, err := template.New("renames").Parse(t)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
out := bytes.NewBuffer(nil)
|
||||
if err = tmpl.Execute(out, exportMap); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
b, err := format.Source(bytes.TrimSpace(out.Bytes()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = io.Copy(w, bytes.NewReader(b))
|
||||
return err
|
||||
}
|
||||
|
||||
const t = `
|
||||
package rename
|
||||
|
||||
// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
|
||||
|
||||
var renamedPackages = map[string]*packageRenames{
|
||||
{{ range $key, $entry := . }}"{{ $key }}": &packageRenames{
|
||||
operations: map[string]string{
|
||||
{{ range $old, $new := $entry.Operations }}"{{ $old }}": "{{ $new }}",
|
||||
{{ end }}
|
||||
},
|
||||
shapes: map[string]string{
|
||||
{{ range $old, $new := $entry.Shapes }}"{{ $old }}": "{{ $new }}",
|
||||
{{ end }}
|
||||
},
|
||||
fields: map[string]string{
|
||||
{{ range $old, $new := $entry.Fields }}"{{ $old }}": "{{ $new }}",
|
||||
{{ end }}
|
||||
},
|
||||
},
|
||||
{{ end }}
|
||||
}
|
||||
`
|
||||
|
||||
func (p *pkg) buildRenames() {
|
||||
pkgName := "github.com/aws/aws-sdk-go/service/" + p.oldAPI.PackageName()
|
||||
if exportMap[pkgName] == nil {
|
||||
exportMap[pkgName] = &packageRenames{map[string]string{}, map[string]string{}, map[string]string{}}
|
||||
}
|
||||
ifacename := "github.com/aws/aws-sdk-go/service/" + p.oldAPI.PackageName() + "/" +
|
||||
p.oldAPI.InterfacePackageName()
|
||||
if exportMap[ifacename] == nil {
|
||||
exportMap[ifacename] = &packageRenames{map[string]string{}, map[string]string{}, map[string]string{}}
|
||||
}
|
||||
|
||||
for _, entry := range p.operations {
|
||||
if entry.oldName != entry.newName {
|
||||
pkgNames := []string{pkgName, ifacename}
|
||||
for _, p := range pkgNames {
|
||||
exportMap[p].Operations[entry.oldName] = entry.newName
|
||||
exportMap[p].Operations[entry.oldName+"Request"] = entry.newName + "Request"
|
||||
exportMap[p].Operations[entry.oldName+"Pages"] = entry.newName + "Pages"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, entry := range p.shapes {
|
||||
if entry.oldShape.Type == "structure" {
|
||||
if entry.oldShape.ShapeName != entry.newShape.ShapeName {
|
||||
exportMap[pkgName].Shapes[entry.oldShape.ShapeName] = entry.newShape.ShapeName
|
||||
}
|
||||
|
||||
for _, n := range entry.oldShape.MemberNames() {
|
||||
for _, m := range entry.newShape.MemberNames() {
|
||||
if n != m && strings.ToLower(n) == strings.ToLower(m) {
|
||||
exportMap[pkgName].Fields[n] = m
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func load(file string) *pkg {
|
||||
p := &pkg{&api.API{}, &api.API{}, map[string]*shapentry{}, map[string]*opentry{}}
|
||||
|
||||
p.oldAPI.Attach(file)
|
||||
p.oldAPI.Setup()
|
||||
|
||||
p.newAPI.Attach(file)
|
||||
p.newAPI.Setup()
|
||||
|
||||
for _, name := range p.oldAPI.OperationNames() {
|
||||
p.operations[strings.ToLower(name)] = &opentry{oldName: name}
|
||||
}
|
||||
|
||||
for _, name := range p.newAPI.OperationNames() {
|
||||
p.operations[strings.ToLower(name)].newName = name
|
||||
}
|
||||
|
||||
for _, shape := range p.oldAPI.ShapeList() {
|
||||
p.shapes[strings.ToLower(shape.ShapeName)] = &shapentry{oldShape: shape}
|
||||
}
|
||||
|
||||
for _, shape := range p.newAPI.ShapeList() {
|
||||
if _, ok := p.shapes[strings.ToLower(shape.ShapeName)]; !ok {
|
||||
panic("missing shape " + shape.ShapeName)
|
||||
}
|
||||
p.shapes[strings.ToLower(shape.ShapeName)].newShape = shape
|
||||
}
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
var excludeServices = map[string]struct{}{
|
||||
"simpledb": {},
|
||||
"importexport": {},
|
||||
}
|
||||
|
||||
func main() {
|
||||
files, _ := filepath.Glob("../../apis/*/*/api-2.json")
|
||||
|
||||
sort.Strings(files)
|
||||
|
||||
// Remove old API versions from list
|
||||
m := map[string]bool{}
|
||||
for i := range files {
|
||||
idx := len(files) - 1 - i
|
||||
parts := strings.Split(files[idx], string(filepath.Separator))
|
||||
svc := parts[len(parts)-3] // service name is 2nd-to-last component
|
||||
|
||||
if m[svc] {
|
||||
files[idx] = "" // wipe this one out if we already saw the service
|
||||
}
|
||||
m[svc] = true
|
||||
}
|
||||
|
||||
for i := range files {
|
||||
file := files[i]
|
||||
if file == "" { // empty file
|
||||
continue
|
||||
}
|
||||
|
||||
if g := load(file); g != nil {
|
||||
if _, ok := excludeServices[g.oldAPI.PackageName()]; !ok {
|
||||
g.buildRenames()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
outfile, err := os.Create("rename/renames.go")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := generateRenames(outfile); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
116
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/rename/rename.go
generated
vendored
116
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/rename/rename.go
generated
vendored
|
@ -1,116 +0,0 @@
|
|||
// +build go1.5,deprecated
|
||||
|
||||
package rename
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"flag"
|
||||
"fmt"
|
||||
"go/format"
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"go/types"
|
||||
"io/ioutil"
|
||||
|
||||
"golang.org/x/tools/go/loader"
|
||||
)
|
||||
|
||||
var dryRun = flag.Bool("dryrun", false, "Dry run")
|
||||
var verbose = flag.Bool("verbose", false, "Verbose")
|
||||
|
||||
type packageRenames struct {
|
||||
operations map[string]string
|
||||
shapes map[string]string
|
||||
fields map[string]string
|
||||
}
|
||||
|
||||
type renamer struct {
|
||||
*loader.Program
|
||||
files map[*token.File]bool
|
||||
}
|
||||
|
||||
// ParsePathsFromArgs parses arguments from command line and looks at import
|
||||
// paths to rename objects.
|
||||
func ParsePathsFromArgs() {
|
||||
flag.Parse()
|
||||
for _, dir := range flag.Args() {
|
||||
var conf loader.Config
|
||||
conf.ParserMode = parser.ParseComments
|
||||
conf.ImportWithTests(dir)
|
||||
prog, err := conf.Load()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
r := renamer{prog, map[*token.File]bool{}}
|
||||
r.parse()
|
||||
if !*dryRun {
|
||||
r.write()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (r *renamer) dryInfo() string {
|
||||
if *dryRun {
|
||||
return "[DRY-RUN]"
|
||||
}
|
||||
return "[!]"
|
||||
}
|
||||
|
||||
func (r *renamer) printf(msg string, args ...interface{}) {
|
||||
if *verbose {
|
||||
fmt.Printf(msg, args...)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *renamer) parse() {
|
||||
for _, pkg := range r.InitialPackages() {
|
||||
r.parseUses(pkg)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *renamer) write() {
|
||||
for _, pkg := range r.InitialPackages() {
|
||||
for _, f := range pkg.Files {
|
||||
tokenFile := r.Fset.File(f.Pos())
|
||||
if r.files[tokenFile] {
|
||||
var buf bytes.Buffer
|
||||
format.Node(&buf, r.Fset, f)
|
||||
if err := ioutil.WriteFile(tokenFile.Name(), buf.Bytes(), 0644); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (r *renamer) parseUses(pkg *loader.PackageInfo) {
|
||||
for k, v := range pkg.Uses {
|
||||
if v.Pkg() != nil {
|
||||
pkgPath := v.Pkg().Path()
|
||||
if renames, ok := renamedPackages[pkgPath]; ok {
|
||||
name := k.Name
|
||||
switch t := v.(type) {
|
||||
case *types.Func:
|
||||
if newName, ok := renames.operations[t.Name()]; ok && newName != name {
|
||||
r.printf("%s Rename [OPERATION]: %q -> %q\n", r.dryInfo(), name, newName)
|
||||
r.files[r.Fset.File(k.Pos())] = true
|
||||
k.Name = newName
|
||||
}
|
||||
case *types.TypeName:
|
||||
if newName, ok := renames.shapes[name]; ok && newName != name {
|
||||
r.printf("%s Rename [SHAPE]: %q -> %q\n", r.dryInfo(), t.Name(), newName)
|
||||
r.files[r.Fset.File(k.Pos())] = true
|
||||
k.Name = newName
|
||||
}
|
||||
case *types.Var:
|
||||
if newName, ok := renames.fields[name]; ok && newName != name {
|
||||
r.printf("%s Rename [FIELD]: %q -> %q\n", r.dryInfo(), t.Name(), newName)
|
||||
r.files[r.Fset.File(k.Pos())] = true
|
||||
k.Name = newName
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
2120
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/rename/renames.go
generated
vendored
2120
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/rename/renames.go
generated
vendored
File diff suppressed because it is too large
Load diff
45
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/renamer.go
generated
vendored
45
vendor/github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/renamer.go
generated
vendored
|
@ -1,45 +0,0 @@
|
|||
// +build go1.5,deprecated
|
||||
|
||||
package main
|
||||
|
||||
//go:generate go run -tags deprecated gen/gen.go
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/aws/aws-sdk-go/awsmigrate/awsmigrate-renamer/rename"
|
||||
)
|
||||
|
||||
var safeTag = "4e554f77f00d527b452c68a46f2e68595284121b"
|
||||
|
||||
func main() {
|
||||
gopath := os.Getenv("GOPATH")
|
||||
if gopath == "" {
|
||||
panic("GOPATH not set!")
|
||||
}
|
||||
gopath = strings.Split(gopath, ":")[0]
|
||||
|
||||
// change directory to SDK
|
||||
err := os.Chdir(filepath.Join(gopath, "src", "github.com", "aws", "aws-sdk-go"))
|
||||
if err != nil {
|
||||
panic("Cannot find SDK repository")
|
||||
}
|
||||
|
||||
// store orig HEAD
|
||||
head, err := exec.Command("git", "rev-parse", "--abbrev-ref", "HEAD").Output()
|
||||
if err != nil {
|
||||
panic("Cannot find SDK repository")
|
||||
}
|
||||
origHEAD := strings.Trim(string(head), " \r\n")
|
||||
|
||||
// checkout to safe tag and run conversion
|
||||
exec.Command("git", "checkout", safeTag).Run()
|
||||
defer func() {
|
||||
exec.Command("git", "checkout", origHEAD).Run()
|
||||
}()
|
||||
|
||||
rename.ParsePathsFromArgs()
|
||||
}
|
212
vendor/github.com/aws/aws-sdk-go/awstesting/assert.go
generated
vendored
212
vendor/github.com/aws/aws-sdk-go/awstesting/assert.go
generated
vendored
|
@ -1,212 +0,0 @@
|
|||
package awstesting
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// Match is a testing helper to test for testing error by comparing expected
|
||||
// with a regular expression.
|
||||
func Match(t *testing.T, regex, expected string) {
|
||||
if !regexp.MustCompile(regex).Match([]byte(expected)) {
|
||||
t.Errorf("%q\n\tdoes not match /%s/", expected, regex)
|
||||
}
|
||||
}
|
||||
|
||||
// AssertURL verifies the expected URL is matches the actual.
|
||||
func AssertURL(t *testing.T, expect, actual string, msgAndArgs ...interface{}) bool {
|
||||
expectURL, err := url.Parse(expect)
|
||||
if err != nil {
|
||||
t.Errorf(errMsg("unable to parse expected URL", err, msgAndArgs))
|
||||
return false
|
||||
}
|
||||
actualURL, err := url.Parse(actual)
|
||||
if err != nil {
|
||||
t.Errorf(errMsg("unable to parse actual URL", err, msgAndArgs))
|
||||
return false
|
||||
}
|
||||
|
||||
equal(t, expectURL.Host, actualURL.Host, msgAndArgs...)
|
||||
equal(t, expectURL.Scheme, actualURL.Scheme, msgAndArgs...)
|
||||
equal(t, expectURL.Path, actualURL.Path, msgAndArgs...)
|
||||
|
||||
return AssertQuery(t, expectURL.Query().Encode(), actualURL.Query().Encode(), msgAndArgs...)
|
||||
}
|
||||
|
||||
var queryMapKey = regexp.MustCompile("(.*?)\\.[0-9]+\\.key")
|
||||
|
||||
// AssertQuery verifies the expect HTTP query string matches the actual.
|
||||
func AssertQuery(t *testing.T, expect, actual string, msgAndArgs ...interface{}) bool {
|
||||
expectQ, err := url.ParseQuery(expect)
|
||||
if err != nil {
|
||||
t.Errorf(errMsg("unable to parse expected Query", err, msgAndArgs))
|
||||
return false
|
||||
}
|
||||
actualQ, err := url.ParseQuery(actual)
|
||||
if err != nil {
|
||||
t.Errorf(errMsg("unable to parse actual Query", err, msgAndArgs))
|
||||
return false
|
||||
}
|
||||
|
||||
// Make sure the keys are the same
|
||||
if !equal(t, queryValueKeys(expectQ), queryValueKeys(actualQ), msgAndArgs...) {
|
||||
return false
|
||||
}
|
||||
|
||||
keys := map[string][]string{}
|
||||
for key, v := range expectQ {
|
||||
if queryMapKey.Match([]byte(key)) {
|
||||
submatch := queryMapKey.FindStringSubmatch(key)
|
||||
keys[submatch[1]] = append(keys[submatch[1]], v...)
|
||||
}
|
||||
}
|
||||
|
||||
for k, v := range keys {
|
||||
// clear all keys that have prefix
|
||||
for key := range expectQ {
|
||||
if strings.HasPrefix(key, k) {
|
||||
delete(expectQ, key)
|
||||
}
|
||||
}
|
||||
|
||||
sort.Strings(v)
|
||||
for i, value := range v {
|
||||
expectQ[fmt.Sprintf("%s.%d.key", k, i+1)] = []string{value}
|
||||
}
|
||||
}
|
||||
|
||||
for k, expectQVals := range expectQ {
|
||||
sort.Strings(expectQVals)
|
||||
actualQVals := actualQ[k]
|
||||
sort.Strings(actualQVals)
|
||||
if !equal(t, expectQVals, actualQVals, msgAndArgs...) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// AssertJSON verifies that the expect json string matches the actual.
|
||||
func AssertJSON(t *testing.T, expect, actual string, msgAndArgs ...interface{}) bool {
|
||||
expectVal := map[string]interface{}{}
|
||||
if err := json.Unmarshal([]byte(expect), &expectVal); err != nil {
|
||||
t.Errorf(errMsg("unable to parse expected JSON", err, msgAndArgs...))
|
||||
return false
|
||||
}
|
||||
|
||||
actualVal := map[string]interface{}{}
|
||||
if err := json.Unmarshal([]byte(actual), &actualVal); err != nil {
|
||||
t.Errorf(errMsg("unable to parse actual JSON", err, msgAndArgs...))
|
||||
return false
|
||||
}
|
||||
|
||||
return equal(t, expectVal, actualVal, msgAndArgs...)
|
||||
}
|
||||
|
||||
// AssertXML verifies that the expect xml string matches the actual.
|
||||
func AssertXML(t *testing.T, expect, actual string, container interface{}, msgAndArgs ...interface{}) bool {
|
||||
expectVal := container
|
||||
if err := xml.Unmarshal([]byte(expect), &expectVal); err != nil {
|
||||
t.Errorf(errMsg("unable to parse expected XML", err, msgAndArgs...))
|
||||
}
|
||||
|
||||
actualVal := container
|
||||
if err := xml.Unmarshal([]byte(actual), &actualVal); err != nil {
|
||||
t.Errorf(errMsg("unable to parse actual XML", err, msgAndArgs...))
|
||||
}
|
||||
return equal(t, expectVal, actualVal, msgAndArgs...)
|
||||
}
|
||||
|
||||
// DidPanic returns if the function paniced and returns true if the function paniced.
|
||||
func DidPanic(fn func()) (bool, interface{}) {
|
||||
var paniced bool
|
||||
var msg interface{}
|
||||
func() {
|
||||
defer func() {
|
||||
if msg = recover(); msg != nil {
|
||||
paniced = true
|
||||
}
|
||||
}()
|
||||
fn()
|
||||
}()
|
||||
|
||||
return paniced, msg
|
||||
}
|
||||
|
||||
// objectsAreEqual determines if two objects are considered equal.
|
||||
//
|
||||
// This function does no assertion of any kind.
|
||||
//
|
||||
// Based on github.com/stretchr/testify/assert.ObjectsAreEqual
|
||||
// Copied locally to prevent non-test build dependencies on testify
|
||||
func objectsAreEqual(expected, actual interface{}) bool {
|
||||
if expected == nil || actual == nil {
|
||||
return expected == actual
|
||||
}
|
||||
|
||||
return reflect.DeepEqual(expected, actual)
|
||||
}
|
||||
|
||||
// Equal asserts that two objects are equal.
|
||||
//
|
||||
// assert.Equal(t, 123, 123, "123 and 123 should be equal")
|
||||
//
|
||||
// Returns whether the assertion was successful (true) or not (false).
|
||||
//
|
||||
// Based on github.com/stretchr/testify/assert.Equal
|
||||
// Copied locally to prevent non-test build dependencies on testify
|
||||
func equal(t *testing.T, expected, actual interface{}, msgAndArgs ...interface{}) bool {
|
||||
if !objectsAreEqual(expected, actual) {
|
||||
t.Errorf("%s\n%s", messageFromMsgAndArgs(msgAndArgs),
|
||||
SprintExpectActual(expected, actual))
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func errMsg(baseMsg string, err error, msgAndArgs ...interface{}) string {
|
||||
message := messageFromMsgAndArgs(msgAndArgs)
|
||||
if message != "" {
|
||||
message += ", "
|
||||
}
|
||||
return fmt.Sprintf("%s%s, %v", message, baseMsg, err)
|
||||
}
|
||||
|
||||
// Based on github.com/stretchr/testify/assert.messageFromMsgAndArgs
|
||||
// Copied locally to prevent non-test build dependencies on testify
|
||||
func messageFromMsgAndArgs(msgAndArgs []interface{}) string {
|
||||
if len(msgAndArgs) == 0 || msgAndArgs == nil {
|
||||
return ""
|
||||
}
|
||||
if len(msgAndArgs) == 1 {
|
||||
return msgAndArgs[0].(string)
|
||||
}
|
||||
if len(msgAndArgs) > 1 {
|
||||
return fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func queryValueKeys(v url.Values) []string {
|
||||
keys := make([]string, 0, len(v))
|
||||
for k := range v {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
return keys
|
||||
}
|
||||
|
||||
// SprintExpectActual returns a string for test failure cases when the actual
|
||||
// value is not the same as the expected.
|
||||
func SprintExpectActual(expect, actual interface{}) string {
|
||||
return fmt.Sprintf("expect: %+v\nactual: %+v\n", expect, actual)
|
||||
}
|
89
vendor/github.com/aws/aws-sdk-go/awstesting/assert_test.go
generated
vendored
89
vendor/github.com/aws/aws-sdk-go/awstesting/assert_test.go
generated
vendored
|
@ -1,89 +0,0 @@
|
|||
package awstesting_test
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/awstesting"
|
||||
)
|
||||
|
||||
func TestAssertJSON(t *testing.T) {
|
||||
cases := []struct {
|
||||
e, a string
|
||||
asserts bool
|
||||
}{
|
||||
{
|
||||
e: `{"RecursiveStruct":{"RecursiveMap":{"foo":{"NoRecurse":"foo"},"bar":{"NoRecurse":"bar"}}}}`,
|
||||
a: `{"RecursiveStruct":{"RecursiveMap":{"bar":{"NoRecurse":"bar"},"foo":{"NoRecurse":"foo"}}}}`,
|
||||
asserts: true,
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
mockT := &testing.T{}
|
||||
if awstesting.AssertJSON(mockT, c.e, c.a) != c.asserts {
|
||||
t.Error("Assert JSON result was not expected.", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAssertXML(t *testing.T) {
|
||||
cases := []struct {
|
||||
e, a string
|
||||
asserts bool
|
||||
container struct {
|
||||
XMLName xml.Name `xml:"OperationRequest"`
|
||||
NS string `xml:"xmlns,attr"`
|
||||
RecursiveStruct struct {
|
||||
RecursiveMap struct {
|
||||
Entries []struct {
|
||||
XMLName xml.Name `xml:"entries"`
|
||||
Key string `xml:"key"`
|
||||
Value struct {
|
||||
XMLName xml.Name `xml:"value"`
|
||||
NoRecurse string
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}{
|
||||
{
|
||||
e: `<OperationRequest xmlns="https://foo/"><RecursiveStruct xmlns="https://foo/"><RecursiveMap xmlns="https://foo/"><entry xmlns="https://foo/"><key xmlns="https://foo/">foo</key><value xmlns="https://foo/"><NoRecurse xmlns="https://foo/">foo</NoRecurse></value></entry><entry xmlns="https://foo/"><key xmlns="https://foo/">bar</key><value xmlns="https://foo/"><NoRecurse xmlns="https://foo/">bar</NoRecurse></value></entry></RecursiveMap></RecursiveStruct></OperationRequest>`,
|
||||
a: `<OperationRequest xmlns="https://foo/"><RecursiveStruct xmlns="https://foo/"><RecursiveMap xmlns="https://foo/"><entry xmlns="https://foo/"><key xmlns="https://foo/">bar</key><value xmlns="https://foo/"><NoRecurse xmlns="https://foo/">bar</NoRecurse></value></entry><entry xmlns="https://foo/"><key xmlns="https://foo/">foo</key><value xmlns="https://foo/"><NoRecurse xmlns="https://foo/">foo</NoRecurse></value></entry></RecursiveMap></RecursiveStruct></OperationRequest>`,
|
||||
asserts: true,
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
// mockT := &testing.T{}
|
||||
if awstesting.AssertXML(t, c.e, c.a, c.container) != c.asserts {
|
||||
t.Error("Assert XML result was not expected.", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAssertQuery(t *testing.T) {
|
||||
cases := []struct {
|
||||
e, a string
|
||||
asserts bool
|
||||
}{
|
||||
{
|
||||
e: `Action=OperationName&Version=2014-01-01&Foo=val1&Bar=val2`,
|
||||
a: `Action=OperationName&Version=2014-01-01&Foo=val2&Bar=val3`,
|
||||
asserts: false,
|
||||
},
|
||||
{
|
||||
e: `Action=OperationName&Version=2014-01-01&Foo=val1&Bar=val2`,
|
||||
a: `Action=OperationName&Version=2014-01-01&Foo=val1&Bar=val2`,
|
||||
asserts: true,
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
mockT := &testing.T{}
|
||||
if awstesting.AssertQuery(mockT, c.e, c.a) != c.asserts {
|
||||
t.Error("Assert Query result was not expected.", i)
|
||||
}
|
||||
}
|
||||
}
|
24
vendor/github.com/aws/aws-sdk-go/awstesting/client.go
generated
vendored
24
vendor/github.com/aws/aws-sdk-go/awstesting/client.go
generated
vendored
|
@ -1,24 +0,0 @@
|
|||
package awstesting
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/client"
|
||||
"github.com/aws/aws-sdk-go/aws/client/metadata"
|
||||
"github.com/aws/aws-sdk-go/aws/defaults"
|
||||
)
|
||||
|
||||
// NewClient creates and initializes a generic service client for testing.
|
||||
func NewClient(cfgs ...*aws.Config) *client.Client {
|
||||
info := metadata.ClientInfo{
|
||||
Endpoint: "http://endpoint",
|
||||
SigningName: "",
|
||||
}
|
||||
def := defaults.Get()
|
||||
def.Config.MergeIn(cfgs...)
|
||||
|
||||
if v := aws.StringValue(def.Config.Endpoint); len(v) > 0 {
|
||||
info.Endpoint = v
|
||||
}
|
||||
|
||||
return client.New(*def.Config, info, def.Handlers)
|
||||
}
|
94
vendor/github.com/aws/aws-sdk-go/awstesting/cmd/bucket_cleanup/main.go
generated
vendored
94
vendor/github.com/aws/aws-sdk-go/awstesting/cmd/bucket_cleanup/main.go
generated
vendored
|
@ -1,94 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
)
|
||||
|
||||
// Searches the buckets of an account that match the prefix, and deletes
|
||||
// those buckets, and all objects within. Before deleting will prompt user
|
||||
// to confirm bucket should be deleted. Positive confirmation is required.
|
||||
//
|
||||
// Usage:
|
||||
// go run deleteBuckets.go <bucketPrefix>
|
||||
func main() {
|
||||
sess := session.Must(session.NewSession())
|
||||
|
||||
svc := s3.New(sess)
|
||||
buckets, err := svc.ListBuckets(&s3.ListBucketsInput{})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("failed to list buckets, %v", err))
|
||||
}
|
||||
|
||||
if len(os.Args) < 2 {
|
||||
fmt.Fprintln(os.Stderr, "bucket prefix required")
|
||||
os.Exit(1)
|
||||
}
|
||||
bucketPrefix := os.Args[1]
|
||||
|
||||
var failed bool
|
||||
for _, b := range buckets.Buckets {
|
||||
bucket := aws.StringValue(b.Name)
|
||||
|
||||
if !strings.HasPrefix(bucket, bucketPrefix) {
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("Delete bucket %q? [y/N]: ", bucket)
|
||||
var v string
|
||||
if _, err := fmt.Scanln(&v); err != nil || !(v == "Y" || v == "y") {
|
||||
fmt.Println("\tSkipping")
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Println("\tDeleting")
|
||||
if err := deleteBucket(svc, bucket); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "failed to delete bucket %q, %v", bucket, err)
|
||||
failed = true
|
||||
}
|
||||
}
|
||||
|
||||
if failed {
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func deleteBucket(svc *s3.S3, bucket string) error {
|
||||
bucketName := &bucket
|
||||
|
||||
objs, err := svc.ListObjects(&s3.ListObjectsInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to list bucket %q objects, %v", bucketName, err)
|
||||
}
|
||||
|
||||
for _, o := range objs.Contents {
|
||||
svc.DeleteObject(&s3.DeleteObjectInput{Bucket: bucketName, Key: o.Key})
|
||||
}
|
||||
|
||||
uploads, err := svc.ListMultipartUploads(&s3.ListMultipartUploadsInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to list bucket %q multipart objects, %v", bucketName, err)
|
||||
}
|
||||
|
||||
for _, u := range uploads.Uploads {
|
||||
svc.AbortMultipartUpload(&s3.AbortMultipartUploadInput{
|
||||
Bucket: bucketName,
|
||||
Key: u.Key,
|
||||
UploadId: u.UploadId,
|
||||
})
|
||||
}
|
||||
|
||||
_, err = svc.DeleteBucket(&s3.DeleteBucketInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to delete bucket %q, %v", bucketName, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
199
vendor/github.com/aws/aws-sdk-go/awstesting/custom_ca_bundle.go
generated
vendored
199
vendor/github.com/aws/aws-sdk-go/awstesting/custom_ca_bundle.go
generated
vendored
|
@ -1,199 +0,0 @@
|
|||
package awstesting
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func availableLocalAddr(ip string) (string, error) {
|
||||
l, err := net.Listen("tcp", ip+":0")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer l.Close()
|
||||
|
||||
return l.Addr().String(), nil
|
||||
}
|
||||
|
||||
// CreateTLSServer will create the TLS server on an open port using the
|
||||
// certificate and key. The address will be returned that the server is running on.
|
||||
func CreateTLSServer(cert, key string, mux *http.ServeMux) (string, error) {
|
||||
addr, err := availableLocalAddr("127.0.0.1")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if mux == nil {
|
||||
mux = http.NewServeMux()
|
||||
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {})
|
||||
}
|
||||
|
||||
go func() {
|
||||
if err := http.ListenAndServeTLS(addr, cert, key, mux); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
for i := 0; i < 60; i++ {
|
||||
if _, err := http.Get("https://" + addr); err != nil && !strings.Contains(err.Error(), "connection refused") {
|
||||
break
|
||||
}
|
||||
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
|
||||
return "https://" + addr, nil
|
||||
}
|
||||
|
||||
// CreateTLSBundleFiles returns the temporary filenames for the certificate
|
||||
// key, and CA PEM content. These files should be deleted when no longer
|
||||
// needed. CleanupTLSBundleFiles can be used for this cleanup.
|
||||
func CreateTLSBundleFiles() (cert, key, ca string, err error) {
|
||||
cert, err = createTmpFile(TLSBundleCert)
|
||||
if err != nil {
|
||||
return "", "", "", err
|
||||
}
|
||||
|
||||
key, err = createTmpFile(TLSBundleKey)
|
||||
if err != nil {
|
||||
return "", "", "", err
|
||||
}
|
||||
|
||||
ca, err = createTmpFile(TLSBundleCA)
|
||||
if err != nil {
|
||||
return "", "", "", err
|
||||
}
|
||||
|
||||
return cert, key, ca, nil
|
||||
}
|
||||
|
||||
// CleanupTLSBundleFiles takes variadic list of files to be deleted.
|
||||
func CleanupTLSBundleFiles(files ...string) error {
|
||||
for _, file := range files {
|
||||
if err := os.Remove(file); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func createTmpFile(b []byte) (string, error) {
|
||||
bundleFile, err := ioutil.TempFile(os.TempDir(), "aws-sdk-go-session-test")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
_, err = bundleFile.Write(b)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
defer bundleFile.Close()
|
||||
return bundleFile.Name(), nil
|
||||
}
|
||||
|
||||
/* Cert generation steps
|
||||
# Create the CA key
|
||||
openssl genrsa -des3 -out ca.key 1024
|
||||
|
||||
# Create the CA Cert
|
||||
openssl req -new -sha256 -x509 -days 3650 \
|
||||
-subj "/C=GO/ST=Gopher/O=Testing ROOT CA" \
|
||||
-key ca.key -out ca.crt
|
||||
|
||||
# Create config
|
||||
cat > csr_details.txt <<-EOF
|
||||
|
||||
[req]
|
||||
default_bits = 1024
|
||||
prompt = no
|
||||
default_md = sha256
|
||||
req_extensions = SAN
|
||||
distinguished_name = dn
|
||||
|
||||
[ dn ]
|
||||
C=GO
|
||||
ST=Gopher
|
||||
O=Testing Certificate
|
||||
OU=Testing IP
|
||||
|
||||
[SAN]
|
||||
subjectAltName = IP:127.0.0.1
|
||||
EOF
|
||||
|
||||
# Create certificate signing request
|
||||
openssl req -new -sha256 -nodes -newkey rsa:1024 \
|
||||
-config <( cat csr_details.txt ) \
|
||||
-keyout ia.key -out ia.csr
|
||||
|
||||
# Create a signed certificate
|
||||
openssl x509 -req -days 3650 \
|
||||
-CAcreateserial \
|
||||
-extfile <( cat csr_details.txt ) \
|
||||
-extensions SAN \
|
||||
-CA ca.crt -CAkey ca.key -in ia.csr -out ia.crt
|
||||
|
||||
# Verify
|
||||
openssl req -noout -text -in ia.csr
|
||||
openssl x509 -noout -text -in ia.crt
|
||||
*/
|
||||
var (
|
||||
// TLSBundleCA ca.crt
|
||||
TLSBundleCA = []byte(`-----BEGIN CERTIFICATE-----
|
||||
MIICiTCCAfKgAwIBAgIJAJ5X1olt05XjMA0GCSqGSIb3DQEBCwUAMDgxCzAJBgNV
|
||||
BAYTAkdPMQ8wDQYDVQQIEwZHb3BoZXIxGDAWBgNVBAoTD1Rlc3RpbmcgUk9PVCBD
|
||||
QTAeFw0xNzAzMDkwMDAyMDZaFw0yNzAzMDcwMDAyMDZaMDgxCzAJBgNVBAYTAkdP
|
||||
MQ8wDQYDVQQIEwZHb3BoZXIxGDAWBgNVBAoTD1Rlc3RpbmcgUk9PVCBDQTCBnzAN
|
||||
BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAw/8DN+t9XQR60jx42rsQ2WE2Dx85rb3n
|
||||
GQxnKZZLNddsT8rDyxJNP18aFalbRbFlyln5fxWxZIblu9Xkm/HRhOpbSimSqo1y
|
||||
uDx21NVZ1YsOvXpHby71jx3gPrrhSc/t/zikhi++6D/C6m1CiIGuiJ0GBiJxtrub
|
||||
UBMXT0QtI2ECAwEAAaOBmjCBlzAdBgNVHQ4EFgQU8XG3X/YHBA6T04kdEkq6+4GV
|
||||
YykwaAYDVR0jBGEwX4AU8XG3X/YHBA6T04kdEkq6+4GVYymhPKQ6MDgxCzAJBgNV
|
||||
BAYTAkdPMQ8wDQYDVQQIEwZHb3BoZXIxGDAWBgNVBAoTD1Rlc3RpbmcgUk9PVCBD
|
||||
QYIJAJ5X1olt05XjMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEAeILv
|
||||
z49+uxmPcfOZzonuOloRcpdvyjiXblYxbzz6ch8GsE7Q886FTZbvwbgLhzdwSVgG
|
||||
G8WHkodDUsymVepdqAamS3f8PdCUk8xIk9mop8LgaB9Ns0/TssxDvMr3sOD2Grb3
|
||||
xyWymTWMcj6uCiEBKtnUp4rPiefcvCRYZ17/hLE=
|
||||
-----END CERTIFICATE-----
|
||||
`)
|
||||
|
||||
// TLSBundleCert ai.crt
|
||||
TLSBundleCert = []byte(`-----BEGIN CERTIFICATE-----
|
||||
MIICGjCCAYOgAwIBAgIJAIIu+NOoxxM0MA0GCSqGSIb3DQEBBQUAMDgxCzAJBgNV
|
||||
BAYTAkdPMQ8wDQYDVQQIEwZHb3BoZXIxGDAWBgNVBAoTD1Rlc3RpbmcgUk9PVCBD
|
||||
QTAeFw0xNzAzMDkwMDAzMTRaFw0yNzAzMDcwMDAzMTRaMFExCzAJBgNVBAYTAkdP
|
||||
MQ8wDQYDVQQIDAZHb3BoZXIxHDAaBgNVBAoME1Rlc3RpbmcgQ2VydGlmaWNhdGUx
|
||||
EzARBgNVBAsMClRlc3RpbmcgSVAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
|
||||
AN1hWHeioo/nASvbrjwCQzXCiWiEzGkw353NxsAB54/NqDL3LXNATtiSJu8kJBrm
|
||||
Ah12IFLtWLGXjGjjYlHbQWnOR6awveeXnQZukJyRWh7m/Qlt9Ho0CgZE1U+832ac
|
||||
5GWVldNxW1Lz4I+W9/ehzqe8I80RS6eLEKfUFXGiW+9RAgMBAAGjEzARMA8GA1Ud
|
||||
EQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEFBQADgYEAdF4WQHfVdPCbgv9sxgJjcR1H
|
||||
Hgw9rZ47gO1IiIhzglnLXQ6QuemRiHeYFg4kjcYBk1DJguxzDTGnUwhUXOibAB+S
|
||||
zssmrkdYYvn9aUhjc3XK3tjAoDpsPpeBeTBamuUKDHoH/dNRXxerZ8vu6uPR3Pgs
|
||||
5v/KCV6IAEcvNyOXMPo=
|
||||
-----END CERTIFICATE-----
|
||||
`)
|
||||
|
||||
// TLSBundleKey ai.key
|
||||
TLSBundleKey = []byte(`-----BEGIN RSA PRIVATE KEY-----
|
||||
MIICXAIBAAKBgQDdYVh3oqKP5wEr2648AkM1wolohMxpMN+dzcbAAeePzagy9y1z
|
||||
QE7YkibvJCQa5gIddiBS7Vixl4xo42JR20FpzkemsL3nl50GbpCckVoe5v0JbfR6
|
||||
NAoGRNVPvN9mnORllZXTcVtS8+CPlvf3oc6nvCPNEUunixCn1BVxolvvUQIDAQAB
|
||||
AoGBAMISrcirddGrlLZLLrKC1ULS2T0cdkqdQtwHYn4+7S5+/z42vMx1iumHLsSk
|
||||
rVY7X41OWkX4trFxhvEIrc/O48bo2zw78P7flTxHy14uxXnllU8cLThE29SlUU7j
|
||||
AVBNxJZMsXMlS/DowwD4CjFe+x4Pu9wZcReF2Z9ntzMpySABAkEA+iWoJCPE2JpS
|
||||
y78q3HYYgpNY3gF3JqQ0SI/zTNkb3YyEIUffEYq0Y9pK13HjKtdsSuX4osTIhQkS
|
||||
+UgRp6tCAQJBAOKPYTfQ2FX8ijgUpHZRuEAVaxASAS0UATiLgzXxLvOh/VC2at5x
|
||||
wjOX6sD65pPz/0D8Qj52Cq6Q1TQ+377SDVECQAIy0od+yPweXxvrUjUd1JlRMjbB
|
||||
TIrKZqs8mKbUQapw0bh5KTy+O1elU4MRPS3jNtBxtP25PQnuSnxmZcFTgAECQFzg
|
||||
DiiFcsn9FuRagfkHExMiNJuH5feGxeFaP9WzI144v9GAllrOI6Bm3JNzx2ZLlg4b
|
||||
20Qju8lIEj6yr6JYFaECQHM1VSojGRKpOl9Ox/R4yYSA9RV5Gyn00/aJNxVYyPD5
|
||||
i3acL2joQm2kLD/LO8paJ4+iQdRXCOMMIpjxSNjGQjQ=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
`)
|
||||
)
|
|
@ -1,188 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
package s3
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/csv"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
)
|
||||
|
||||
func TestSelectObjectContent(t *testing.T) {
|
||||
keyName := "selectObject.csv"
|
||||
putTestFile(t, filepath.Join("testdata", "positive_select.csv"), keyName)
|
||||
|
||||
resp, err := svc.SelectObjectContent(&s3.SelectObjectContentInput{
|
||||
Bucket: bucketName,
|
||||
Key: &keyName,
|
||||
Expression: aws.String("Select * from S3Object"),
|
||||
ExpressionType: aws.String(s3.ExpressionTypeSql),
|
||||
InputSerialization: &s3.InputSerialization{
|
||||
CSV: &s3.CSVInput{
|
||||
FieldDelimiter: aws.String(","),
|
||||
FileHeaderInfo: aws.String(s3.FileHeaderInfoIgnore),
|
||||
},
|
||||
},
|
||||
OutputSerialization: &s3.OutputSerialization{
|
||||
CSV: &s3.CSVOutput{
|
||||
FieldDelimiter: aws.String(","),
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("expect no error, %v", err)
|
||||
}
|
||||
defer resp.EventStream.Close()
|
||||
|
||||
var sum int64
|
||||
var processed int64
|
||||
for event := range resp.EventStream.Events() {
|
||||
switch tv := event.(type) {
|
||||
case *s3.RecordsEvent:
|
||||
sum += int64(len(tv.Payload))
|
||||
case *s3.StatsEvent:
|
||||
processed = *tv.Details.BytesProcessed
|
||||
}
|
||||
}
|
||||
|
||||
if sum == 0 {
|
||||
t.Errorf("expect selected content, got none")
|
||||
}
|
||||
|
||||
if processed == 0 {
|
||||
t.Errorf("expect selected status bytes processed, got none")
|
||||
}
|
||||
|
||||
if err := resp.EventStream.Err(); err != nil {
|
||||
t.Fatalf("exect no error, %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSelectObjectContent_Error(t *testing.T) {
|
||||
keyName := "negativeSelect.csv"
|
||||
|
||||
buf := make([]byte, 0, 1024*1024*6)
|
||||
buf = append(buf, []byte("name,number\n")...)
|
||||
line := []byte("jj,0\n")
|
||||
for i := 0; i < (cap(buf)/len(line))-2; i++ {
|
||||
buf = append(buf, line...)
|
||||
}
|
||||
buf = append(buf, []byte("gg,NaN\n")...)
|
||||
|
||||
putTestContent(t, bytes.NewReader(buf), keyName)
|
||||
|
||||
resp, err := svc.SelectObjectContent(&s3.SelectObjectContentInput{
|
||||
Bucket: bucketName,
|
||||
Key: &keyName,
|
||||
Expression: aws.String("SELECT name FROM S3Object WHERE cast(number as int) < 1"),
|
||||
ExpressionType: aws.String(s3.ExpressionTypeSql),
|
||||
InputSerialization: &s3.InputSerialization{
|
||||
CSV: &s3.CSVInput{
|
||||
FileHeaderInfo: aws.String(s3.FileHeaderInfoUse),
|
||||
},
|
||||
},
|
||||
OutputSerialization: &s3.OutputSerialization{
|
||||
CSV: &s3.CSVOutput{
|
||||
FieldDelimiter: aws.String(","),
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("expect no error, %v", err)
|
||||
}
|
||||
defer resp.EventStream.Close()
|
||||
|
||||
var sum int64
|
||||
for event := range resp.EventStream.Events() {
|
||||
switch tv := event.(type) {
|
||||
case *s3.RecordsEvent:
|
||||
sum += int64(len(tv.Payload))
|
||||
}
|
||||
}
|
||||
|
||||
if sum == 0 {
|
||||
t.Errorf("expect selected content")
|
||||
}
|
||||
|
||||
err = resp.EventStream.Err()
|
||||
if err == nil {
|
||||
t.Fatalf("exepct error")
|
||||
}
|
||||
|
||||
aerr := err.(awserr.Error)
|
||||
if a := aerr.Code(); len(a) == 0 {
|
||||
t.Errorf("expect, error code")
|
||||
}
|
||||
if a := aerr.Message(); len(a) == 0 {
|
||||
t.Errorf("expect, error message")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSelectObjectContent_Stream(t *testing.T) {
|
||||
keyName := "selectGopher.csv"
|
||||
|
||||
buf := `name,number
|
||||
gopher,0
|
||||
ᵷodɥǝɹ,1
|
||||
`
|
||||
// Put a mock CSV file to the S3 bucket so that its contents can be
|
||||
// selected.
|
||||
putTestContent(t, strings.NewReader(buf), keyName)
|
||||
|
||||
// Make the Select Object Content API request using the object uploaded.
|
||||
resp, err := svc.SelectObjectContent(&s3.SelectObjectContentInput{
|
||||
Bucket: bucketName,
|
||||
Key: &keyName,
|
||||
Expression: aws.String("SELECT name FROM S3Object WHERE cast(number as int) < 1"),
|
||||
ExpressionType: aws.String(s3.ExpressionTypeSql),
|
||||
InputSerialization: &s3.InputSerialization{
|
||||
CSV: &s3.CSVInput{
|
||||
FileHeaderInfo: aws.String(s3.FileHeaderInfoUse),
|
||||
},
|
||||
},
|
||||
OutputSerialization: &s3.OutputSerialization{
|
||||
CSV: &s3.CSVOutput{},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "failed making API request, %v\n", err)
|
||||
return
|
||||
}
|
||||
defer resp.EventStream.Close()
|
||||
|
||||
results, resultWriter := io.Pipe()
|
||||
go func() {
|
||||
defer resultWriter.Close()
|
||||
for event := range resp.EventStream.Events() {
|
||||
switch e := event.(type) {
|
||||
case *s3.RecordsEvent:
|
||||
resultWriter.Write(e.Payload)
|
||||
case *s3.StatsEvent:
|
||||
fmt.Printf("Processed %d bytes\n", *e.Details.BytesProcessed)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// Printout the results
|
||||
resReader := csv.NewReader(results)
|
||||
for {
|
||||
record, err := resReader.Read()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
fmt.Println(record)
|
||||
}
|
||||
|
||||
if err := resp.EventStream.Err(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "reading from event stream failed, %v\n", err)
|
||||
}
|
||||
}
|
|
@ -1,98 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
// Package s3 runs integration tests for S3
|
||||
package s3
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
)
|
||||
|
||||
func TestWriteToObject(t *testing.T) {
|
||||
_, err := svc.PutObject(&s3.PutObjectInput{
|
||||
Bucket: bucketName,
|
||||
Key: aws.String("key name"),
|
||||
Body: bytes.NewReader([]byte("hello world")),
|
||||
})
|
||||
if err != nil {
|
||||
t.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
resp, err := svc.GetObject(&s3.GetObjectInput{
|
||||
Bucket: bucketName,
|
||||
Key: aws.String("key name"),
|
||||
})
|
||||
if err != nil {
|
||||
t.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
b, _ := ioutil.ReadAll(resp.Body)
|
||||
if e, a := []byte("hello world"), b; !reflect.DeepEqual(e, a) {
|
||||
t.Errorf("expect %v, got %v", e, a)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPresignedGetPut(t *testing.T) {
|
||||
putreq, _ := svc.PutObjectRequest(&s3.PutObjectInput{
|
||||
Bucket: bucketName,
|
||||
Key: aws.String("presigned-key"),
|
||||
})
|
||||
var err error
|
||||
|
||||
// Presign a PUT request
|
||||
var puturl string
|
||||
puturl, err = putreq.Presign(300 * time.Second)
|
||||
if err != nil {
|
||||
t.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
// PUT to the presigned URL with a body
|
||||
var puthttpreq *http.Request
|
||||
buf := bytes.NewReader([]byte("hello world"))
|
||||
puthttpreq, err = http.NewRequest("PUT", puturl, buf)
|
||||
if err != nil {
|
||||
t.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
var putresp *http.Response
|
||||
putresp, err = http.DefaultClient.Do(puthttpreq)
|
||||
if err != nil {
|
||||
t.Errorf("expect put with presign url no error, got %v", err)
|
||||
}
|
||||
if e, a := 200, putresp.StatusCode; e != a {
|
||||
t.Errorf("expect %v, got %v", e, a)
|
||||
}
|
||||
|
||||
// Presign a GET on the same URL
|
||||
getreq, _ := svc.GetObjectRequest(&s3.GetObjectInput{
|
||||
Bucket: bucketName,
|
||||
Key: aws.String("presigned-key"),
|
||||
})
|
||||
|
||||
var geturl string
|
||||
geturl, err = getreq.Presign(300 * time.Second)
|
||||
if err != nil {
|
||||
t.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
// Get the body
|
||||
var getresp *http.Response
|
||||
getresp, err = http.Get(geturl)
|
||||
if err != nil {
|
||||
t.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
var b []byte
|
||||
defer getresp.Body.Close()
|
||||
b, err = ioutil.ReadAll(getresp.Body)
|
||||
if e, a := "hello world", string(b); e != a {
|
||||
t.Errorf("expect %v, got %v", e, a)
|
||||
}
|
||||
}
|
|
@ -1,102 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
package s3
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
)
|
||||
|
||||
func base64Sum(content []byte) string {
|
||||
sum := md5.Sum(content)
|
||||
return base64.StdEncoding.EncodeToString(sum[:])
|
||||
}
|
||||
|
||||
func SkipTestContentMD5Validate(t *testing.T) {
|
||||
body := []byte("really cool body content")
|
||||
|
||||
cases := []struct {
|
||||
Name string
|
||||
Body []byte
|
||||
Sum64 string
|
||||
RangeGet []int64
|
||||
}{
|
||||
{
|
||||
Body: body,
|
||||
Sum64: base64Sum(body),
|
||||
Name: "contentMD5validation.pop",
|
||||
},
|
||||
{
|
||||
Body: []byte{},
|
||||
Sum64: base64Sum([]byte{}),
|
||||
Name: "contentMD5validation.empty",
|
||||
},
|
||||
{
|
||||
Body: body,
|
||||
Sum64: base64Sum(body),
|
||||
RangeGet: []int64{0, 9},
|
||||
Name: "contentMD5validation.range",
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
keyName := aws.String(c.Name)
|
||||
req, _ := svc.PutObjectRequest(&s3.PutObjectInput{
|
||||
Bucket: bucketName,
|
||||
Key: keyName,
|
||||
Body: bytes.NewReader(c.Body),
|
||||
})
|
||||
|
||||
req.Build()
|
||||
if e, a := c.Sum64, req.HTTPRequest.Header.Get("Content-Md5"); e != a {
|
||||
t.Errorf("%d, expect %v sum, got %v", i, e, a)
|
||||
}
|
||||
|
||||
if err := req.Send(); err != nil {
|
||||
t.Fatalf("%d, expect no error, got %v", i, err)
|
||||
}
|
||||
|
||||
getObjIn := &s3.GetObjectInput{
|
||||
Bucket: bucketName,
|
||||
Key: keyName,
|
||||
}
|
||||
|
||||
expectBody := c.Body
|
||||
if c.RangeGet != nil {
|
||||
getObjIn.Range = aws.String(fmt.Sprintf("bytes=%d-%d", c.RangeGet[0], c.RangeGet[1]-1))
|
||||
expectBody = c.Body[c.RangeGet[0]:c.RangeGet[1]]
|
||||
}
|
||||
|
||||
getReq, getOut := svc.GetObjectRequest(getObjIn)
|
||||
|
||||
getReq.Build()
|
||||
if e, a := "append-md5", getReq.HTTPRequest.Header.Get("X-Amz-Te"); e != a {
|
||||
t.Errorf("%d, expect %v encoding, got %v", i, e, a)
|
||||
}
|
||||
if err := getReq.Send(); err != nil {
|
||||
t.Fatalf("%d, expect no error, got %v", i, err)
|
||||
}
|
||||
defer getOut.Body.Close()
|
||||
|
||||
if e, a := "append-md5", getReq.HTTPResponse.Header.Get("X-Amz-Transfer-Encoding"); e != a {
|
||||
t.Fatalf("%d, expect response tx encoding header %v, got %v", i, e, a)
|
||||
}
|
||||
|
||||
var readBody bytes.Buffer
|
||||
_, err := io.Copy(&readBody, getOut.Body)
|
||||
if err != nil {
|
||||
t.Fatalf("%d, expect no error, got %v", i, err)
|
||||
}
|
||||
|
||||
if e, a := expectBody, readBody.Bytes(); !bytes.Equal(e, a) {
|
||||
t.Errorf("%d, expect %v body, got %v", i, e, a)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package s3crypto provides gucumber integration tests support.
|
||||
package s3crypto
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
"github.com/aws/aws-sdk-go/service/s3/s3crypto"
|
||||
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@s3crypto", func() {
|
||||
sess := session.New((&aws.Config{
|
||||
Region: aws.String("us-west-2"),
|
||||
}))
|
||||
encryptionClient := s3crypto.NewEncryptionClient(sess, nil, func(c *s3crypto.EncryptionClient) {
|
||||
})
|
||||
gucumber.World["encryptionClient"] = encryptionClient
|
||||
|
||||
decryptionClient := s3crypto.NewDecryptionClient(sess)
|
||||
gucumber.World["decryptionClient"] = decryptionClient
|
||||
|
||||
gucumber.World["client"] = s3.New(sess)
|
||||
})
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
# language: en
|
||||
@s3crypto @client
|
||||
Feature: S3 Integration Crypto Tests
|
||||
|
||||
Scenario: Uploading Go's SDK fixtures
|
||||
When I get all fixtures for "aes_gcm" from "aws-s3-shared-tests"
|
||||
Then I encrypt each fixture with "kms" "AWS_SDK_TEST_ALIAS" "us-west-2" and "aes_gcm"
|
||||
And upload "Go" data with folder "version_2"
|
||||
|
||||
Scenario: Uploading Go's SDK fixtures
|
||||
When I get all fixtures for "aes_cbc" from "aws-s3-shared-tests"
|
||||
Then I encrypt each fixture with "kms" "AWS_SDK_TEST_ALIAS" "us-west-2" and "aes_cbc"
|
||||
And upload "Go" data with folder "version_2"
|
||||
|
||||
Scenario: Get all plaintext fixtures for symmetric masterkey aes gcm
|
||||
When I get all fixtures for "aes_gcm" from "aws-s3-shared-tests"
|
||||
Then I decrypt each fixture against "Go" "version_2"
|
||||
And I compare the decrypted ciphertext to the plaintext
|
||||
|
||||
Scenario: Get all plaintext fixtures for symmetric masterkey aes cbc
|
||||
When I get all fixtures for "aes_cbc" from "aws-s3-shared-tests"
|
||||
Then I decrypt each fixture against "Go" "version_2"
|
||||
And I compare the decrypted ciphertext to the plaintext
|
||||
|
||||
Scenario: Get all plaintext fixtures for symmetric masterkey aes gcm
|
||||
When I get all fixtures for "aes_gcm" from "aws-s3-shared-tests"
|
||||
Then I decrypt each fixture against "Java" "version_2"
|
||||
And I compare the decrypted ciphertext to the plaintext
|
||||
|
||||
Scenario: Get all plaintext fixtures for symmetric masterkey aes cbc
|
||||
When I get all fixtures for "aes_cbc" from "aws-s3-shared-tests"
|
||||
Then I decrypt each fixture against "Java" "version_2"
|
||||
And I compare the decrypted ciphertext to the plaintext
|
|
@ -1,211 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
// Package s3crypto contains shared step definitions that are used across integration tests
|
||||
package s3crypto
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
|
||||
"github.com/gucumber/gucumber"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
"github.com/aws/aws-sdk-go/service/kms"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
"github.com/aws/aws-sdk-go/service/s3/s3crypto"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.When(`^I get all fixtures for "(.+?)" from "(.+?)"$`,
|
||||
func(cekAlg, bucket string) {
|
||||
prefix := "plaintext_test_case_"
|
||||
baseFolder := "crypto_tests/" + cekAlg
|
||||
s3Client := gucumber.World["client"].(*s3.S3)
|
||||
|
||||
out, err := s3Client.ListObjects(&s3.ListObjectsInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Prefix: aws.String(baseFolder + "/" + prefix),
|
||||
})
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
plaintexts := make(map[string][]byte)
|
||||
for _, obj := range out.Contents {
|
||||
plaintextKey := obj.Key
|
||||
ptObj, err := s3Client.GetObject(&s3.GetObjectInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Key: plaintextKey,
|
||||
})
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
caseKey := strings.TrimPrefix(*plaintextKey, baseFolder+"/"+prefix)
|
||||
plaintext, err := ioutil.ReadAll(ptObj.Body)
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
plaintexts[caseKey] = plaintext
|
||||
}
|
||||
gucumber.World["baseFolder"] = baseFolder
|
||||
gucumber.World["bucket"] = bucket
|
||||
gucumber.World["plaintexts"] = plaintexts
|
||||
})
|
||||
|
||||
gucumber.Then(`^I decrypt each fixture against "(.+?)" "(.+?)"$`, func(lang, version string) {
|
||||
plaintexts := gucumber.World["plaintexts"].(map[string][]byte)
|
||||
baseFolder := gucumber.World["baseFolder"].(string)
|
||||
bucket := gucumber.World["bucket"].(string)
|
||||
prefix := "ciphertext_test_case_"
|
||||
s3Client := gucumber.World["client"].(*s3.S3)
|
||||
s3CryptoClient := gucumber.World["decryptionClient"].(*s3crypto.DecryptionClient)
|
||||
language := "language_" + lang
|
||||
|
||||
ciphertexts := make(map[string][]byte)
|
||||
for caseKey := range plaintexts {
|
||||
cipherKey := baseFolder + "/" + version + "/" + language + "/" + prefix + caseKey
|
||||
|
||||
// To get metadata for encryption key
|
||||
ctObj, err := s3Client.GetObject(&s3.GetObjectInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Key: &cipherKey,
|
||||
})
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// We don't support wrap, so skip it
|
||||
if ctObj.Metadata["X-Amz-Wrap-Alg"] == nil || *ctObj.Metadata["X-Amz-Wrap-Alg"] != "kms" {
|
||||
continue
|
||||
}
|
||||
|
||||
ctObj, err = s3CryptoClient.GetObject(&s3.GetObjectInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Key: &cipherKey,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
ciphertext, err := ioutil.ReadAll(ctObj.Body)
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
ciphertexts[caseKey] = ciphertext
|
||||
}
|
||||
gucumber.World["decrypted"] = ciphertexts
|
||||
})
|
||||
|
||||
gucumber.And(`^I compare the decrypted ciphertext to the plaintext$`, func() {
|
||||
plaintexts := gucumber.World["plaintexts"].(map[string][]byte)
|
||||
ciphertexts := gucumber.World["decrypted"].(map[string][]byte)
|
||||
for caseKey, ciphertext := range ciphertexts {
|
||||
if e, a := len(plaintexts[caseKey]), len(ciphertext); e != a {
|
||||
gucumber.T.Errorf("expect %v, got %v", e, a)
|
||||
}
|
||||
if e, a := plaintexts[caseKey], ciphertext; !bytes.Equal(e, a) {
|
||||
gucumber.T.Errorf("expect %v, got %v", e, a)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
gucumber.Then(`^I encrypt each fixture with "(.+?)" "(.+?)" "(.+?)" and "(.+?)"$`, func(kek, v1, v2, cek string) {
|
||||
var handler s3crypto.CipherDataGenerator
|
||||
var builder s3crypto.ContentCipherBuilder
|
||||
switch kek {
|
||||
case "kms":
|
||||
arn, err := getAliasInformation(v1, v2)
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect nil, got %v", nil)
|
||||
}
|
||||
|
||||
b64Arn := base64.StdEncoding.EncodeToString([]byte(arn))
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect nil, got %v", nil)
|
||||
}
|
||||
gucumber.World["Masterkey"] = b64Arn
|
||||
|
||||
handler = s3crypto.NewKMSKeyGenerator(kms.New(session.New(&aws.Config{
|
||||
Region: &v2,
|
||||
})), arn)
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect nil, got %v", nil)
|
||||
}
|
||||
default:
|
||||
gucumber.T.Skip()
|
||||
}
|
||||
|
||||
switch cek {
|
||||
case "aes_gcm":
|
||||
builder = s3crypto.AESGCMContentCipherBuilder(handler)
|
||||
case "aes_cbc":
|
||||
builder = s3crypto.AESCBCContentCipherBuilder(handler, s3crypto.AESCBCPadder)
|
||||
default:
|
||||
gucumber.T.Skip()
|
||||
}
|
||||
|
||||
sess := session.New(&aws.Config{
|
||||
Region: aws.String("us-west-2"),
|
||||
})
|
||||
c := s3crypto.NewEncryptionClient(sess, builder, func(c *s3crypto.EncryptionClient) {
|
||||
})
|
||||
gucumber.World["encryptionClient"] = c
|
||||
gucumber.World["cek"] = cek
|
||||
})
|
||||
|
||||
gucumber.And(`^upload "(.+?)" data with folder "(.+?)"$`, func(language, folder string) {
|
||||
c := gucumber.World["encryptionClient"].(*s3crypto.EncryptionClient)
|
||||
cek := gucumber.World["cek"].(string)
|
||||
bucket := gucumber.World["bucket"].(string)
|
||||
plaintexts := gucumber.World["plaintexts"].(map[string][]byte)
|
||||
key := gucumber.World["Masterkey"].(string)
|
||||
for caseKey, plaintext := range plaintexts {
|
||||
input := &s3.PutObjectInput{
|
||||
Bucket: &bucket,
|
||||
Key: aws.String("crypto_tests/" + cek + "/" + folder + "/language_" + language + "/ciphertext_test_case_" + caseKey),
|
||||
Body: bytes.NewReader(plaintext),
|
||||
Metadata: map[string]*string{
|
||||
"Masterkey": &key,
|
||||
},
|
||||
}
|
||||
|
||||
_, err := c.PutObject(input)
|
||||
if err != nil {
|
||||
gucumber.T.Errorf("expect nil, got %v", nil)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func getAliasInformation(alias, region string) (string, error) {
|
||||
arn := ""
|
||||
svc := kms.New(session.New(&aws.Config{
|
||||
Region: ®ion,
|
||||
}))
|
||||
|
||||
truncated := true
|
||||
var marker *string
|
||||
for truncated {
|
||||
out, err := svc.ListAliases(&kms.ListAliasesInput{
|
||||
Marker: marker,
|
||||
})
|
||||
if err != nil {
|
||||
return arn, err
|
||||
}
|
||||
for _, aliasEntry := range out.Aliases {
|
||||
if *aliasEntry.AliasName == "alias/"+alias {
|
||||
return *aliasEntry.AliasArn, nil
|
||||
}
|
||||
}
|
||||
truncated = *out.Truncated
|
||||
marker = out.NextMarker
|
||||
}
|
||||
|
||||
return "", errors.New("The alias " + alias + " does not exist in your account. Please add the proper alias to a key")
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
package s3manager
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration"
|
||||
"github.com/aws/aws-sdk-go/service/s3/s3manager"
|
||||
)
|
||||
|
||||
func TestGetBucketRegion(t *testing.T) {
|
||||
expectRegion := aws.StringValue(integration.Session.Config.Region)
|
||||
|
||||
ctx := aws.BackgroundContext()
|
||||
region, err := s3manager.GetBucketRegion(ctx, integration.Session,
|
||||
aws.StringValue(bucketName), expectRegion)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("expect no error, got %v", err)
|
||||
}
|
||||
|
||||
if e, a := expectRegion, region; e != a {
|
||||
t.Errorf("expect %s bucket region, got %s", e, a)
|
||||
}
|
||||
}
|
|
@ -1,209 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
// Package s3manager provides integration tests for the service/s3/s3manager package
|
||||
package s3manager
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
"github.com/aws/aws-sdk-go/service/s3/s3manager"
|
||||
)
|
||||
|
||||
var integBuf12MB = make([]byte, 1024*1024*12)
|
||||
var integMD512MB = fmt.Sprintf("%x", md5.Sum(integBuf12MB))
|
||||
var bucketName *string
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
if err := setup(); err != nil {
|
||||
panic(fmt.Sprintf("failed to setup integration test, %v", err))
|
||||
}
|
||||
|
||||
var result int
|
||||
|
||||
defer func() {
|
||||
if err := teardown(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "teardown failed, %v", err)
|
||||
}
|
||||
if r := recover(); r != nil {
|
||||
fmt.Println("S3Manager integration test hit a panic,", r)
|
||||
result = 1
|
||||
}
|
||||
os.Exit(result)
|
||||
}()
|
||||
|
||||
result = m.Run()
|
||||
}
|
||||
|
||||
func setup() error {
|
||||
svc := s3.New(integration.Session)
|
||||
|
||||
// Create a bucket for testing
|
||||
bucketName = aws.String(
|
||||
fmt.Sprintf("aws-sdk-go-integration-%s", integration.UniqueID()))
|
||||
|
||||
_, err := svc.CreateBucket(&s3.CreateBucketInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create bucket %q, %v", *bucketName, err)
|
||||
}
|
||||
|
||||
err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to wait for bucket %q to exist, %v", bucketName, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete the bucket
|
||||
func teardown() error {
|
||||
svc := s3.New(integration.Session)
|
||||
|
||||
objs, err := svc.ListObjects(&s3.ListObjectsInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to list bucket %q objects, %v", bucketName, err)
|
||||
}
|
||||
|
||||
for _, o := range objs.Contents {
|
||||
svc.DeleteObject(&s3.DeleteObjectInput{Bucket: bucketName, Key: o.Key})
|
||||
}
|
||||
|
||||
uploads, err := svc.ListMultipartUploads(&s3.ListMultipartUploadsInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to list bucket %q multipart objects, %v", bucketName, err)
|
||||
}
|
||||
|
||||
for _, u := range uploads.Uploads {
|
||||
svc.AbortMultipartUpload(&s3.AbortMultipartUploadInput{
|
||||
Bucket: bucketName,
|
||||
Key: u.Key,
|
||||
UploadId: u.UploadId,
|
||||
})
|
||||
}
|
||||
|
||||
_, err = svc.DeleteBucket(&s3.DeleteBucketInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to delete bucket %q, %v", bucketName, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type dlwriter struct {
|
||||
buf []byte
|
||||
}
|
||||
|
||||
func newDLWriter(size int) *dlwriter {
|
||||
return &dlwriter{buf: make([]byte, size)}
|
||||
}
|
||||
|
||||
func (d dlwriter) WriteAt(p []byte, pos int64) (n int, err error) {
|
||||
if pos > int64(len(d.buf)) {
|
||||
return 0, io.EOF
|
||||
}
|
||||
|
||||
written := 0
|
||||
for i, b := range p {
|
||||
if i >= len(d.buf) {
|
||||
break
|
||||
}
|
||||
d.buf[pos+int64(i)] = b
|
||||
written++
|
||||
}
|
||||
return written, nil
|
||||
}
|
||||
|
||||
func validate(t *testing.T, key string, md5value string) {
|
||||
mgr := s3manager.NewDownloader(integration.Session)
|
||||
params := &s3.GetObjectInput{Bucket: bucketName, Key: &key}
|
||||
|
||||
w := newDLWriter(1024 * 1024 * 20)
|
||||
n, err := mgr.Download(w, params)
|
||||
if err != nil {
|
||||
t.Fatalf("expect no error, got %v", err)
|
||||
}
|
||||
if e, a := md5value, fmt.Sprintf("%x", md5.Sum(w.buf[0:n])); e != a {
|
||||
t.Errorf("expect %s md5 value, got %s", e, a)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUploadConcurrently(t *testing.T) {
|
||||
key := "12mb-1"
|
||||
mgr := s3manager.NewUploader(integration.Session)
|
||||
out, err := mgr.Upload(&s3manager.UploadInput{
|
||||
Bucket: bucketName,
|
||||
Key: &key,
|
||||
Body: bytes.NewReader(integBuf12MB),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("expect no error, got %v", err)
|
||||
}
|
||||
if len(out.UploadID) == 0 {
|
||||
t.Errorf("expect upload ID but was empty")
|
||||
}
|
||||
|
||||
re := regexp.MustCompile(`^https?://.+/` + key + `$`)
|
||||
if e, a := re.String(), out.Location; !re.MatchString(a) {
|
||||
t.Errorf("expect %s to match URL regexp %q, did not", e, a)
|
||||
}
|
||||
|
||||
validate(t, key, integMD512MB)
|
||||
}
|
||||
|
||||
func TestUploadFailCleanup(t *testing.T) {
|
||||
svc := s3.New(integration.Session)
|
||||
|
||||
// Break checksum on 2nd part so it fails
|
||||
part := 0
|
||||
svc.Handlers.Build.PushBack(func(r *request.Request) {
|
||||
if r.Operation.Name == "UploadPart" {
|
||||
if part == 1 {
|
||||
r.HTTPRequest.Header.Set("X-Amz-Content-Sha256", "000")
|
||||
}
|
||||
part++
|
||||
}
|
||||
})
|
||||
|
||||
key := "12mb-leave"
|
||||
mgr := s3manager.NewUploaderWithClient(svc, func(u *s3manager.Uploader) {
|
||||
u.LeavePartsOnError = false
|
||||
})
|
||||
_, err := mgr.Upload(&s3manager.UploadInput{
|
||||
Bucket: bucketName,
|
||||
Key: &key,
|
||||
Body: bytes.NewReader(integBuf12MB),
|
||||
})
|
||||
if err == nil {
|
||||
t.Fatalf("expect error, but did not get one")
|
||||
}
|
||||
|
||||
aerr := err.(awserr.Error)
|
||||
if e, a := "MissingRegion", aerr.Code(); strings.Contains(a, e) {
|
||||
t.Errorf("expect %q to not be in error code %q", e, a)
|
||||
}
|
||||
|
||||
uploadID := ""
|
||||
merr := err.(s3manager.MultiUploadFailure)
|
||||
if uploadID = merr.UploadID(); len(uploadID) == 0 {
|
||||
t.Errorf("expect upload ID to not be empty, but was")
|
||||
}
|
||||
|
||||
_, err = svc.ListParts(&s3.ListPartsInput{
|
||||
Bucket: bucketName, Key: &key, UploadId: &uploadID,
|
||||
})
|
||||
if err == nil {
|
||||
t.Errorf("expect error for list parts, but got none")
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
package s3manager
|
89
vendor/github.com/aws/aws-sdk-go/awstesting/integration/customizations/s3/shared_test.go
generated
vendored
89
vendor/github.com/aws/aws-sdk-go/awstesting/integration/customizations/s3/shared_test.go
generated
vendored
|
@ -1,89 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
package s3
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
)
|
||||
|
||||
const integBucketPrefix = "aws-sdk-go-integration"
|
||||
|
||||
var bucketName *string
|
||||
var svc *s3.S3
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
setup()
|
||||
defer teardown() // only called if we panic
|
||||
|
||||
result := m.Run()
|
||||
teardown()
|
||||
os.Exit(result)
|
||||
}
|
||||
|
||||
// Create a bucket for testing
|
||||
func setup() {
|
||||
svc = s3.New(integration.Session)
|
||||
bucketName = aws.String(
|
||||
fmt.Sprintf("%s-%s",
|
||||
integBucketPrefix, integration.UniqueID()))
|
||||
|
||||
_, err := svc.CreateBucket(&s3.CreateBucketInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("failed to create bucket %s, %v", *bucketName, err))
|
||||
}
|
||||
|
||||
err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("failed waiting for bucket %s to be created", *bucketName))
|
||||
}
|
||||
}
|
||||
|
||||
// Delete the bucket
|
||||
func teardown() {
|
||||
resp, err := svc.ListObjects(&s3.ListObjectsInput{Bucket: bucketName})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("failed to list s3 bucket %s objects, %v", *bucketName, err))
|
||||
}
|
||||
|
||||
errs := []error{}
|
||||
for _, o := range resp.Contents {
|
||||
_, err = svc.DeleteObject(&s3.DeleteObjectInput{Bucket: bucketName, Key: o.Key})
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
|
||||
if len(errs) != 0 {
|
||||
panic(fmt.Sprintf("failed to delete objects, %s", errs))
|
||||
}
|
||||
|
||||
svc.DeleteBucket(&s3.DeleteBucketInput{Bucket: bucketName})
|
||||
}
|
||||
|
||||
func putTestFile(t *testing.T, filename, key string) {
|
||||
f, err := os.Open(filename)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to open testfile, %v", err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
putTestContent(t, f, key)
|
||||
}
|
||||
|
||||
func putTestContent(t *testing.T, reader io.ReadSeeker, key string) {
|
||||
_, err := svc.PutObject(&s3.PutObjectInput{
|
||||
Bucket: bucketName,
|
||||
Key: aws.String(key),
|
||||
Body: reader,
|
||||
})
|
||||
if err != nil {
|
||||
t.Errorf("expect no error, got %v", err)
|
||||
}
|
||||
}
|
1
vendor/github.com/aws/aws-sdk-go/awstesting/integration/customizations/s3/stub.go
generated
vendored
1
vendor/github.com/aws/aws-sdk-go/awstesting/integration/customizations/s3/stub.go
generated
vendored
|
@ -1 +0,0 @@
|
|||
package s3
|
|
@ -1,556 +0,0 @@
|
|||
A,B,C,D,E,F,G,H,I,J
|
||||
0,0,0.5,217.371,217.658,218.002,269.445,487.447,2.106,489.554
|
||||
0,0,490.077,0.657,0.84,1.588,121.092,122.681,2.185,124.867
|
||||
0,9,490.077,1.602,1.676,1.977,184.155,186.132,1.198,187.331
|
||||
0,6,490.384,1.787,1.962,2.451,270.592,273.044,4.158,277.202
|
||||
0,5,491.125,0.693,0.877,1.9,295.589,297.49,19.456,316.946
|
||||
0,8,491.348,1.833,1.924,66.432,250.035,316.467,2.379,318.847
|
||||
0,0,614.955,0.455,0.507,8.554,229.261,237.815,15.761,253.577
|
||||
0,9,677.418,0.493,0.546,14.288,176.628,190.917,6.522,197.44
|
||||
0,3,491.864,1.034,1.109,250.552,132.254,382.806,2.485,385.291
|
||||
0,2,491.351,1.763,1.807,276.239,122.283,398.523,26.436,424.96
|
||||
0,4,490.154,1.867,1.935,341.544,86.243,427.787,15.659,443.447
|
||||
0,8,810.203,0.381,0.453,21.4,101.836,123.236,9.01,132.246
|
||||
0,6,767.595,0.54,0.592,68.928,105.705,174.633,0.93,175.564
|
||||
0,0,868.54,0.384,0.483,8.721,82.83,91.552,37.154,128.706
|
||||
0,9,874.866,0.472,0.574,41.728,80.617,122.345,11.14,133.486
|
||||
0,1,490.757,2.284,2.336,426.145,91.084,517.229,0.507,517.736
|
||||
0,7,490.755,1.652,1.816,426.521,90.913,517.435,2.244,519.679
|
||||
0,6,943.165,0.324,0.391,2.676,116.421,119.098,0.452,119.551
|
||||
0,2,916.32,0.609,0.884,81.097,83.55,164.647,1.342,165.989
|
||||
0,8,942.462,0.374,0.464,55.682,84.915,140.597,46.844,187.442
|
||||
0,4,933.61,0.377,0.451,64.784,131.147,195.932,9.997,205.929
|
||||
0,5,808.083,0.565,0.641,190.27,140.808,331.078,0.465,331.543
|
||||
0,3,877.165,0.47,0.546,121.153,141.078,262.231,2.558,264.789
|
||||
0,7,1010.442,0.372,0.441,2.201,129.116,131.318,7.148,138.467
|
||||
0,6,1062.725,0.483,0.581,6.402,80.848,87.251,45.416,132.668
|
||||
0,1,1008.502,1.579,1.706,65.348,121.324,186.672,1.251,187.924
|
||||
0,0,997.256,0.402,0.832,76.472,121.367,197.839,18.513,216.353
|
||||
0,9,1008.364,1.428,1.582,70.936,133.941,204.878,2.255,207.133
|
||||
0,8,1129.916,0.458,0.551,19.07,113.216,132.287,0.38,132.667
|
||||
0,4,1139.547,0.388,0.457,9.775,113.036,122.812,1.531,124.343
|
||||
0,2,1082.318,0.352,0.43,67.775,112.768,180.543,22.578,203.122
|
||||
0,5,1139.629,0.416,0.466,10.429,135.269,145.699,2.425,148.124
|
||||
0,3,1141.962,0.394,0.472,53.375,92.295,145.67,0.212,145.883
|
||||
0,0,1213.618,0.408,0.481,2.655,112.525,115.18,0.547,115.728
|
||||
0,9,1215.504,0.427,0.672,2.233,111.382,113.615,1.145,114.761
|
||||
0,6,1195.403,0.437,0.511,25.098,109.564,134.662,22.852,157.515
|
||||
0,7,1148.919,0.486,1.021,138.981,91.884,230.865,16.504,247.369
|
||||
0,4,1263.894,0.711,0.788,33.761,98.396,132.158,0.671,132.83
|
||||
0,1,1196.433,0.301,0.364,100.757,99.252,200.01,1.116,201.126
|
||||
0,8,1262.594,0.964,1.248,66.394,96.747,163.141,1.173,164.315
|
||||
0,2,1285.445,0.209,0.254,43.808,97.338,141.146,0.548,141.694
|
||||
0,9,1330.271,0.288,0.355,35.329,84.511,119.84,16.98,136.821
|
||||
0,6,1352.928,0.474,0.579,12.904,100.981,113.886,0.517,114.403
|
||||
0,0,1329.353,0.294,0.366,36.781,100.857,137.638,0.532,138.171
|
||||
0,2,1427.143,0.532,0.58,9.336,79.756,89.093,1.239,90.332
|
||||
0,4,1396.736,0.503,0.592,44.925,80.622,125.548,10.972,136.52
|
||||
0,8,1426.921,0.631,0.71,15.906,90.068,105.975,1.38,107.356
|
||||
0,5,1287.759,0.278,0.316,181.454,80.529,261.984,10.774,272.759
|
||||
0,1,1397.566,0.268,0.324,99.635,82.55,182.186,8.445,190.632
|
||||
0,0,1467.53,1.354,1.536,33.298,87.09,120.388,0.517,120.905
|
||||
0,7,1396.3,0.593,0.684,104.729,87.108,191.838,1.133,192.971
|
||||
0,9,1467.103,1.422,1.546,42.719,82.771,125.491,9.398,134.89
|
||||
0,3,1287.85,0.245,0.272,248.437,79.849,328.286,9.318,337.605
|
||||
0,6,1467.339,0.933,1.132,69.074,88.797,157.871,0.891,158.762
|
||||
0,4,1533.267,0.449,0.548,42.003,81.379,123.383,9.108,132.491
|
||||
0,2,1517.483,0.32,0.399,56.455,91.585,148.04,0.44,148.48
|
||||
0,8,1534.284,0.425,0.48,39.738,91.427,131.166,1.247,132.413
|
||||
0,5,1560.528,0.396,0.499,19.318,86.69,106.008,1.54,107.548
|
||||
0,6,1626.109,0.34,0.43,6.88,82.575,89.455,0.568,90.023
|
||||
0,1,1588.231,0.451,0.541,44.902,84.635,129.537,24.285,153.823
|
||||
0,7,1589.279,0.288,0.352,57.597,94.892,152.489,0.555,153.044
|
||||
0,9,1602.002,0.424,0.68,45.095,94.862,139.957,0.797,140.755
|
||||
0,5,1668.084,0.29,0.351,29.143,84.196,113.34,26.201,139.542
|
||||
0,4,1665.766,0.373,0.457,34.457,107.029,141.486,0.715,142.201
|
||||
0,2,1665.971,0.303,0.375,47.175,94.572,141.748,0.861,142.609
|
||||
0,0,1588.445,0.517,0.625,154.081,80.415,234.496,7.112,241.608
|
||||
0,3,1625.463,0.647,0.751,143.666,83.075,226.742,21.951,248.694
|
||||
0,7,1742.325,0.53,0.624,25.438,84.393,109.831,22.061,131.893
|
||||
0,1,1742.079,0.555,0.659,34.769,97.152,131.921,0.364,132.286
|
||||
0,8,1666.705,0.883,1.046,113.237,94.162,207.4,1.118,208.519
|
||||
0,2,1808.586,0.3,0.362,21.568,78.537,100.106,1.979,102.085
|
||||
0,0,1830.064,0.405,0.481,7.114,81.532,88.647,2.392,91.04
|
||||
0,6,1716.143,0.49,0.557,121.371,87.089,208.46,14.395,222.856
|
||||
0,5,1807.634,0.442,0.527,36.463,94.602,131.065,1.369,132.434
|
||||
0,8,1875.228,0.164,0.198,3.582,79.597,83.179,1.504,84.684
|
||||
0,1,1874.367,0.562,0.645,28.304,79.054,107.358,0.456,107.815
|
||||
0,4,1807.975,0.4,0.482,99.4,81.109,180.509,1.133,181.643
|
||||
0,9,1742.773,0.339,0.39,168.948,80.077,249.025,2.367,251.393
|
||||
0,3,1874.166,0.495,0.593,38.988,84.602,123.59,7.982,131.572
|
||||
0,8,1959.921,0.415,0.494,9.861,82.855,92.717,2.765,95.483
|
||||
0,2,1910.682,0.995,1.109,69.161,85.346,154.507,1.625,156.133
|
||||
0,0,1921.114,0.394,0.473,92.984,80.599,173.584,1.153,174.738
|
||||
0,3,2005.748,0.476,0.556,7.441,83.841,91.283,1.422,92.705
|
||||
0,5,1940.076,0.325,0.401,73.91,84.342,158.253,1.718,159.972
|
||||
0,7,1874.22,0.557,0.642,140.027,91.031,231.059,1.754,232.814
|
||||
0,6,1939.008,0.377,0.455,95.473,81.569,177.042,1.072,178.115
|
||||
0,4,1989.626,0.314,0.388,51.23,81.724,132.955,11.694,144.65
|
||||
0,9,1994.183,0.321,0.394,57.158,82.743,139.902,0.758,140.66
|
||||
0,2,2066.819,0.204,0.259,13.808,84.448,98.256,1.366,99.623
|
||||
0,1,1982.189,0.295,0.368,99.448,85.395,184.843,1.56,186.403
|
||||
0,8,2055.408,0.203,0.253,51.567,82.101,133.668,1.073,134.741
|
||||
0,9,2134.846,0.25,0.306,16.106,85.649,101.755,0.176,101.931
|
||||
0,1,2168.598,0.229,0.302,6.826,81.481,88.307,1.143,89.45
|
||||
0,4,2134.304,0.373,0.492,45.962,81.137,127.099,0.549,127.648
|
||||
0,7,2107.039,0.483,0.555,73.813,81.641,155.455,1.562,157.017
|
||||
0,6,2117.128,0.208,0.255,63.776,83.028,146.805,1.656,148.461
|
||||
0,8,2190.154,0.225,0.285,29.098,80.996,110.094,1.344,111.439
|
||||
0,9,2236.784,0.256,0.32,4.01,82.88,86.89,2.12,89.011
|
||||
0,2,2166.449,0.317,0.395,80.763,84.208,164.971,2.32,167.291
|
||||
0,5,2100.052,0.294,0.365,146.743,86.973,233.716,0.672,234.389
|
||||
0,3,2098.458,0.241,0.3,150.5,84.733,235.234,1.292,236.526
|
||||
0,0,2095.857,0.215,0.271,153.005,85.917,238.923,0.534,239.458
|
||||
0,6,2265.593,0.182,0.218,20.159,80.738,100.897,1.449,102.347
|
||||
0,4,2261.957,0.207,0.256,42.386,82.309,124.696,1.433,126.13
|
||||
0,7,2264.061,0.243,0.288,51.339,80.631,131.97,0.973,132.943
|
||||
0,8,2301.604,0.391,0.474,24.05,81.886,105.937,1.805,107.743
|
||||
0,1,2258.053,0.206,0.26,93.644,81.876,175.52,1.331,176.852
|
||||
0,0,2335.321,0.204,0.245,21.603,81.849,103.452,0.941,104.394
|
||||
0,6,2367.949,0.434,0.515,6.274,83.161,89.435,4.495,93.931
|
||||
0,3,2334.991,0.332,0.403,58.507,88.463,146.971,1.116,148.088
|
||||
0,8,2409.356,0.385,0.463,13.78,83.24,97.02,0.344,97.364
|
||||
0,5,2334.448,0.364,0.451,106.034,82.488,188.523,1.39,189.914
|
||||
0,9,2325.809,0.429,0.506,114.736,84.279,199.015,1.209,200.225
|
||||
0,2,2333.745,0.423,0.517,106.853,85.698,192.551,1.745,194.296
|
||||
0,4,2388.097,0.399,0.498,67.532,84.096,151.628,0.599,152.228
|
||||
0,3,2483.086,0.35,0.427,19.21,81.612,100.822,3.51,104.333
|
||||
0,1,2434.913,0.435,0.577,86.727,83.002,169.729,1.902,171.632
|
||||
0,7,2397.012,0.331,0.416,142.874,80.866,223.74,1.672,225.413
|
||||
0,6,2461.891,0.36,0.441,78.194,82.238,160.433,0.613,161.046
|
||||
0,9,2526.038,0.665,0.74,32.614,86.809,119.423,1.275,120.699
|
||||
0,4,2540.332,0.326,0.387,42.093,80.618,122.711,2.268,124.979
|
||||
0,8,2506.727,0.378,0.456,99.838,79.225,179.064,0.294,179.358
|
||||
0,6,2622.939,0.33,0.385,1.186,81.73,82.917,2.248,85.165
|
||||
0,3,2587.429,0.61,0.72,59.939,82.437,142.376,0.97,143.346
|
||||
0,1,2606.549,0.391,0.459,40.636,83.436,124.072,2.096,126.169
|
||||
0,7,2622.432,0.383,0.463,30.735,80.765,111.501,0.733,112.234
|
||||
0,2,2528.046,0.199,0.244,128.905,85.696,214.602,0.334,214.936
|
||||
0,4,2665.318,0.312,0.399,26.866,81.414,108.281,0.222,108.504
|
||||
0,5,2524.369,0.329,0.413,167.907,84.934,252.841,1.305,254.147
|
||||
0,8,2686.096,0.401,0.494,7.747,85.181,92.928,2.125,95.053
|
||||
0,0,2439.722,0.357,0.696,254.259,89.099,343.358,2.809,346.167
|
||||
0,9,2646.75,0.681,0.799,73.064,84.639,157.704,3.532,161.236
|
||||
0,6,2708.115,0.4,0.481,14.501,86.758,101.259,0.934,102.194
|
||||
0,3,2730.783,0.303,0.377,35.013,88.845,123.858,1.666,125.524
|
||||
0,1,2732.726,0.318,0.414,53.138,78.873,132.011,0.237,132.249
|
||||
0,0,2785.893,0.375,0.447,25.451,83.295,108.746,4.165,112.911
|
||||
0,9,2807.993,0.31,0.384,35.981,91.657,127.639,0.466,128.106
|
||||
0,2,2742.992,0.403,0.56,101.119,91.707,192.827,5.458,198.285
|
||||
0,8,2781.157,0.365,0.446,70.781,90.886,161.667,0.817,162.484
|
||||
0,1,2864.982,0.311,0.402,19.474,86.691,106.165,3.435,109.601
|
||||
0,3,2856.319,0.429,0.493,54.672,82.88,137.553,0.33,137.884
|
||||
0,5,2778.523,0.309,0.392,132.818,84.58,217.399,1.527,218.927
|
||||
0,0,2898.815,0.362,0.463,12.416,86.002,98.418,1.107,99.525
|
||||
0,7,2734.674,0.744,0.873,195.477,83.728,279.205,7.848,287.053
|
||||
0,4,2773.831,0.339,0.428,156.128,91.457,247.585,1.311,248.897
|
||||
0,6,2810.317,0.339,0.432,125.657,102.335,227.993,2.034,230.027
|
||||
0,2,2941.285,0.294,0.367,38.02,79.84,117.86,1.696,119.556
|
||||
0,8,2943.648,0.293,0.373,38.288,79.728,118.016,2.042,120.058
|
||||
0,9,2936.108,0.466,0.563,63.933,82.084,146.017,1.602,147.619
|
||||
0,4,3022.735,0.269,0.339,3.697,87.616,91.313,0.516,91.83
|
||||
0,3,2994.213,0.418,0.495,42.946,81.806,124.752,0.29,125.043
|
||||
0,1,2974.591,0.641,0.762,72.809,81.187,153.997,1.512,155.51
|
||||
0,9,3083.737,0.352,0.425,15.144,84.807,99.951,1.383,101.335
|
||||
0,6,3040.353,0.399,0.48,61.605,83.294,144.899,9.906,154.806
|
||||
0,2,3060.852,0.407,0.487,40.928,92.521,133.449,0.893,134.342
|
||||
0,0,2998.348,0.336,0.417,115.561,82.329,197.89,2.808,200.698
|
||||
0,8,3063.714,0.314,0.391,50.53,84.619,135.15,28.56,163.71
|
||||
0,1,3130.111,0.381,0.484,36.604,82.182,118.787,1.306,120.094
|
||||
0,5,2997.458,0.349,0.427,169.477,83.501,252.978,2.447,255.425
|
||||
0,7,3021.738,0.425,0.518,148.774,83.974,232.748,0.411,233.16
|
||||
0,3,3119.263,0.315,0.392,50.462,85,135.463,4.92,140.383
|
||||
0,4,3114.576,0.397,0.465,66.492,81.543,148.035,1.216,149.251
|
||||
0,9,3185.086,0.49,0.563,0.843,79.106,79.95,28.271,108.222
|
||||
0,6,3195.164,0.659,0.878,41.861,81.999,123.86,0.305,124.166
|
||||
0,8,3227.436,0.588,0.685,13.471,80.559,94.03,0.675,94.705
|
||||
0,0,3199.056,0.344,0.417,55.856,81.147,137.003,2.313,139.317
|
||||
0,2,3195.197,0.89,0.993,59.866,83.95,143.817,2.518,146.336
|
||||
0,1,3250.212,0.555,0.641,53.457,80.43,133.887,1.541,135.428
|
||||
0,5,3252.89,0.347,0.424,55.768,81.876,137.644,2.326,139.971
|
||||
0,9,3293.317,0.516,0.622,39.115,78.826,117.941,1.674,119.615
|
||||
0,2,3341.541,0.379,0.456,26.056,81.181,107.238,1.453,108.691
|
||||
0,4,3263.836,0.304,0.385,109.176,79.223,188.399,1.336,189.736
|
||||
0,6,3319.341,0.424,0.509,52.086,83.572,135.658,1.93,137.589
|
||||
0,3,3259.654,0.318,0.4,115.781,84.483,200.264,2.851,203.116
|
||||
0,9,3412.942,0.36,0.432,19.904,83.186,103.091,0.294,103.386
|
||||
0,5,3392.869,0.364,0.438,46.674,81.708,128.382,2.336,130.718
|
||||
0,7,3254.902,0.434,0.504,184.8,83.725,268.526,1.536,270.063
|
||||
0,0,3338.38,0.334,0.412,104.769,84.635,189.405,0.579,189.984
|
||||
0,8,3322.15,0.363,0.429,120.337,85.709,206.047,1.064,207.111
|
||||
0,3,3462.777,0.285,0.363,32.857,78.802,111.659,3.064,114.724
|
||||
0,2,3450.24,0.329,0.416,53.507,82.338,135.845,0.291,136.137
|
||||
0,1,3385.654,0.404,0.479,125.574,82.017,207.591,1.116,208.708
|
||||
0,6,3456.937,0.306,0.374,58.496,80.921,139.418,1.87,141.288
|
||||
0,4,3453.579,0.31,0.387,61.685,82.969,144.655,1.418,146.073
|
||||
0,8,3529.268,0.324,0.408,31.325,78.86,110.186,1.213,111.4
|
||||
0,5,3523.596,0.334,0.417,39.494,83.382,122.877,0.347,123.225
|
||||
0,7,3524.971,0.36,0.472,47.432,80.801,128.234,0.953,129.187
|
||||
0,4,3599.659,0.319,0.398,27.195,80.69,107.885,1.895,109.781
|
||||
0,3,3577.512,0.571,0.652,51.889,82.948,134.837,1.141,135.979
|
||||
0,1,3594.371,0.341,0.422,42.685,81.099,123.785,1.473,125.259
|
||||
0,7,3654.167,0.306,0.383,15.528,81.986,97.515,2.405,99.92
|
||||
0,9,3516.338,0.397,0.472,178.897,79.745,258.642,2.238,260.881
|
||||
0,2,3586.389,1.185,1.333,109.11,81.551,190.661,2.03,192.692
|
||||
0,5,3646.833,0.424,0.488,56.484,81.305,137.789,1.209,138.999
|
||||
0,0,3528.372,0.397,0.487,176.378,80.819,257.198,0.746,257.944
|
||||
0,6,3598.234,0.336,0.428,102.676,85.142,187.818,1.845,189.664
|
||||
0,8,3640.677,0.476,0.58,83.915,81.6,165.515,12.681,178.196
|
||||
0,4,3709.449,0.415,0.495,25.988,83.141,109.13,1.996,111.126
|
||||
0,3,3713.499,0.322,0.402,55.534,81.807,137.341,0.906,138.248
|
||||
0,0,3786.324,0.919,1.147,3.983,80.348,84.331,1.885,86.217
|
||||
0,7,3754.097,0.438,0.543,36.421,81.782,118.204,1.217,119.421
|
||||
0,9,3777.227,0.339,0.419,18.041,81.599,99.641,2.512,102.154
|
||||
0,1,3719.638,0.353,0.419,112.793,82.398,195.191,1.433,196.624
|
||||
0,4,3820.583,0.299,0.38,14.112,83.485,97.598,1.551,99.149
|
||||
0,6,3787.905,0.358,0.44,49.391,82.265,131.656,1.218,132.874
|
||||
0,2,3779.087,0.323,0.402,81.512,79.373,160.885,3.793,164.679
|
||||
0,5,3785.843,1.116,1.253,82.986,77.901,160.888,1.176,162.064
|
||||
0,8,3818.882,0.383,0.46,80.581,80.539,161.121,2.24,163.361
|
||||
0,9,3879.424,0.314,0.394,21.002,81.687,102.689,1.579,104.268
|
||||
0,6,3920.787,0.287,0.38,3.32,80.808,84.129,2.54,86.669
|
||||
0,7,3873.527,0.371,0.436,60.962,79.343,140.305,1.693,141.998
|
||||
0,5,3947.917,0.324,0.401,18.55,86.417,104.968,1.132,106.101
|
||||
0,3,3851.755,0.345,0.42,114.969,87.007,201.977,0.317,202.294
|
||||
0,9,3983.709,0.467,0.534,6.466,81.73,88.196,0.443,88.64
|
||||
0,8,3982.255,0.767,0.998,14.279,81.449,95.729,1.705,97.435
|
||||
0,4,3919.74,0.346,0.424,85.31,79.932,165.243,0.644,165.887
|
||||
0,7,4015.534,0.333,0.409,17.541,80.366,97.907,1.668,99.575
|
||||
0,1,3916.272,0.432,0.512,128.903,84.8,213.703,2.03,215.733
|
||||
0,0,3872.552,0.463,0.605,190.345,81.085,271.43,2.323,273.754
|
||||
0,2,3943.776,0.456,0.565,124.062,79.417,203.479,2.947,206.427
|
||||
0,5,4054.025,0.473,0.519,16.707,81.618,98.325,2.546,100.872
|
||||
0,4,4085.637,0.444,0.528,14.533,83.168,97.701,1.309,99.01
|
||||
0,7,4115.136,0.466,0.563,10.979,80.789,91.768,1.994,93.762
|
||||
0,9,4072.356,0.332,0.411,61.405,81.35,142.756,1.96,144.716
|
||||
0,6,4007.465,0.323,0.404,173.194,81.587,254.782,1.562,256.344
|
||||
0,0,4146.315,0.415,0.495,47.446,82.791,130.237,1.332,131.569
|
||||
0,3,4054.052,0.334,0.407,140.693,83.369,224.063,5.103,229.166
|
||||
0,8,4079.697,0.352,0.431,114.177,84.118,198.295,7.426,205.722
|
||||
0,4,4184.657,0.346,0.42,13.748,86.813,100.561,0.308,100.869
|
||||
0,2,4150.211,0.297,0.391,50.058,85.067,135.125,2.111,137.237
|
||||
0,9,4217.079,0.289,0.372,15.913,78.546,94.459,1.492,95.952
|
||||
0,7,4208.903,0.592,0.799,46.416,79.377,125.794,1.363,127.157
|
||||
0,5,4154.904,0.378,0.458,105.65,86.733,192.384,0.306,192.69
|
||||
0,1,4132.012,0.351,0.423,128.658,87.255,215.914,1.377,217.291
|
||||
0,6,4263.817,0.316,0.392,7.054,80.022,87.076,2.867,89.944
|
||||
0,2,4287.456,0.418,0.519,13.658,77.869,91.528,1.837,93.365
|
||||
0,8,4285.427,0.371,0.448,46.607,81.282,127.89,1.193,129.083
|
||||
0,6,4353.769,0.428,0.512,12.728,83.385,96.114,1.372,97.486
|
||||
0,9,4313.041,0.452,0.544,65.025,81.466,146.492,1.454,147.947
|
||||
0,7,4336.069,0.547,0.631,62.669,80.678,143.347,1.741,145.089
|
||||
0,4,4285.532,0.421,0.489,126.035,80.128,206.164,1.865,208.029
|
||||
0,1,4349.311,0.344,0.419,83.199,81.257,164.457,2.457,166.915
|
||||
0,5,4347.602,0.336,0.415,84.785,84.577,169.362,0.205,169.568
|
||||
0,3,4283.225,0.311,0.39,165.412,81.631,247.043,2.736,249.779
|
||||
0,6,4451.266,0.349,0.435,16.483,81.492,97.976,1.693,99.669
|
||||
0,2,4380.832,0.957,1.096,87.309,82.649,169.959,1.588,171.547
|
||||
0,8,4414.518,0.362,0.479,53.482,84.438,137.92,1.534,139.454
|
||||
0,0,4277.9,0.615,0.698,190.489,85.361,275.85,1.139,276.99
|
||||
0,4,4493.572,0.353,0.433,5.668,79.869,85.538,1.985,87.523
|
||||
0,9,4460.995,0.297,0.379,72.698,82.185,154.884,1.312,156.196
|
||||
0,7,4481.166,0.353,0.43,52.934,82.767,135.702,0.9,136.602
|
||||
0,1,4516.236,0.426,0.513,21.016,82.575,103.591,1.242,104.834
|
||||
0,0,4554.897,0.284,0.36,14.035,80.027,94.063,0.644,94.708
|
||||
0,2,4552.387,0.34,0.416,49.053,82.256,131.309,1.498,132.807
|
||||
0,6,4550.944,0.374,0.452,58.083,82.241,140.324,0.226,140.55
|
||||
0,5,4517.178,0.287,0.348,92.038,83.638,175.677,2.136,177.813
|
||||
0,3,4533.015,0.387,0.482,81.677,80.321,161.999,0.881,162.88
|
||||
0,8,4553.982,0.403,0.5,92.788,79.698,172.487,2.855,175.343
|
||||
0,0,4649.615,0.455,0.528,19.45,84.334,103.785,1.69,105.475
|
||||
0,4,4581.108,0.727,0.888,88.144,85.538,173.683,0.515,174.198
|
||||
0,7,4617.775,0.309,0.38,57.266,80.933,138.2,1.523,139.723
|
||||
0,9,4617.201,0.408,0.513,79.382,81.334,160.716,0.872,161.589
|
||||
0,1,4621.077,0.313,0.394,79.38,80.484,159.864,1.538,161.403
|
||||
0,5,4695,0.323,0.398,26.916,80.04,106.957,1.254,108.212
|
||||
0,8,4729.336,0.417,0.504,8.58,81.443,90.024,1.481,91.506
|
||||
0,6,4691.503,0.315,0.393,52.131,81.54,133.672,1.764,135.436
|
||||
0,7,4757.506,0.336,0.402,8.604,82.634,91.239,2.208,93.447
|
||||
0,3,4695.901,0.364,0.612,110.355,79.703,190.059,2.086,192.145
|
||||
0,4,4755.316,0.387,0.444,71.444,80.424,151.868,1.02,152.889
|
||||
0,1,4782.487,0.804,0.913,71.209,80.168,151.377,1.373,152.751
|
||||
0,2,4685.202,0.318,0.395,168.695,81.247,249.943,1.572,251.515
|
||||
0,0,4755.102,0.475,0.548,109.227,80.705,189.933,0.478,190.411
|
||||
0,7,4850.962,0.47,0.583,25.01,82.997,108.007,1.157,109.164
|
||||
0,5,4803.219,0.334,0.445,72.976,85.095,158.071,1.135,159.207
|
||||
0,9,4778.799,0.486,0.589,120.634,80.375,201.009,1.331,202.341
|
||||
0,4,4908.214,0.415,0.488,15.698,82.28,97.979,1.139,99.118
|
||||
0,6,4826.949,0.393,0.479,97.059,83.146,180.206,1.672,181.879
|
||||
0,8,4820.854,0.484,0.577,109.039,81.594,190.634,0.318,190.953
|
||||
0,2,4936.725,0.354,0.431,6.303,83.521,89.824,1.867,91.692
|
||||
0,3,4888.057,0.498,0.577,71.038,81.397,152.435,0.342,152.777
|
||||
0,5,4962.434,0.279,0.331,14.723,82.679,97.402,0.279,97.682
|
||||
0,7,4960.133,0.327,0.397,44.946,83.613,128.56,0.245,128.805
|
||||
0,3,5040.845,0.439,0.546,14.402,85.033,99.435,2.166,101.602
|
||||
0,8,5011.814,0.411,0.481,59.326,83.914,143.24,1.398,144.639
|
||||
0,2,5028.425,0.366,0.446,42.929,84.889,127.819,0.305,128.124
|
||||
0,0,4945.521,0.346,0.418,150.986,80.727,231.713,2.023,233.737
|
||||
0,9,4981.151,0.45,0.557,115.5,82.904,198.405,2.823,201.228
|
||||
0,5,5060.124,0.398,0.501,64.278,83.236,147.514,2.355,149.869
|
||||
0,6,5008.836,0.28,0.353,115.728,85.538,201.267,0.603,201.871
|
||||
0,1,4935.247,0.379,0.458,189.72,85.303,275.023,0.465,275.488
|
||||
0,4,5007.34,0.542,0.741,117.463,85.645,203.108,2.146,205.255
|
||||
0,7,5088.946,0.313,0.394,49.444,81.597,131.042,1.646,132.688
|
||||
0,3,5142.457,0.399,0.478,5.147,81.287,86.435,0.881,87.317
|
||||
0,2,5156.557,0.291,0.362,5.203,81.382,86.585,1.92,88.505
|
||||
0,8,5156.462,0.521,0.69,19.219,80.308,99.528,1.821,101.349
|
||||
0,9,5182.387,0.32,0.399,23.899,80.953,104.852,1.121,105.973
|
||||
0,7,5221.642,0.307,0.391,5.745,81.815,87.561,1.817,89.378
|
||||
0,0,5179.266,0.363,0.443,49.741,84.892,134.633,2.054,136.688
|
||||
0,5,5210.018,0.568,0.643,61.334,81.577,142.911,1.418,144.33
|
||||
0,3,5229.782,0.339,0.44,49.632,85.029,134.661,1.34,136.002
|
||||
0,1,5210.738,0.792,1.471,86.688,81.747,168.435,0.87,169.305
|
||||
0,9,5288.37,0.428,0.512,5.724,86.497,92.221,2.111,94.333
|
||||
0,2,5245.07,0.351,0.431,61.536,81.418,142.954,1.728,144.682
|
||||
0,0,5315.961,0.382,0.447,20.382,79.869,100.252,1.409,101.661
|
||||
0,8,5257.815,0.423,0.49,92.566,80.892,173.459,1.496,174.955
|
||||
0,7,5311.029,0.435,0.516,52.528,81.313,133.841,1.413,135.255
|
||||
0,6,5210.712,1.532,1.63,151.833,85.155,236.989,1.118,238.107
|
||||
0,3,5365.791,0.299,0.377,50.784,81.585,132.369,1.452,133.822
|
||||
0,2,5389.757,0.474,0.554,26.667,82.959,109.627,1.814,111.441
|
||||
0,0,5417.631,0.784,0.907,8.897,81.026,89.924,1.412,91.336
|
||||
0,4,5212.602,0.386,0.447,217.003,82.217,299.221,1.166,300.387
|
||||
0,9,5382.712,0.311,0.389,75.127,83.211,158.339,1.983,160.323
|
||||
0,5,5354.356,0.305,0.39,112.1,80.95,193.05,1.376,194.427
|
||||
0,7,5446.296,0.356,0.432,36.105,80.157,116.262,0.92,117.183
|
||||
0,1,5380.053,0.405,0.494,111.048,85.12,196.168,1.345,197.514
|
||||
0,6,5448.827,0.315,0.388,42.469,86.109,128.578,0.571,129.149
|
||||
0,8,5432.778,0.329,0.409,64.109,83.938,148.048,0.344,148.393
|
||||
0,4,5512.997,0.298,0.374,12.336,81.353,93.69,2.014,95.704
|
||||
0,3,5499.624,0.486,0.595,59.894,82.285,142.179,1.619,143.799
|
||||
0,5,5548.792,0.428,0.535,10.625,83.853,94.479,1.992,96.472
|
||||
0,2,5501.208,0.575,0.684,90.412,78.346,168.759,0.685,169.444
|
||||
0,4,5608.705,0.558,0.815,8.557,78.683,87.24,1.117,88.358
|
||||
0,1,5577.576,0.426,0.513,55.869,79.618,135.487,1.607,137.095
|
||||
0,0,5508.975,0.328,0.404,126.867,81.307,208.175,1.943,210.118
|
||||
0,9,5543.047,0.36,0.436,90.905,85.163,176.069,2.65,178.719
|
||||
0,2,5670.662,0.41,0.496,11.867,80.168,92.035,2.243,94.278
|
||||
0,7,5563.487,0.303,0.384,127.359,84.02,211.379,1.073,212.452
|
||||
0,6,5577.982,0.339,0.414,117.634,83.729,201.363,0.301,201.665
|
||||
0,5,5645.292,0.373,0.455,50.568,84.436,135.005,1.355,136.36
|
||||
0,4,5697.074,0.417,0.514,14.751,79.581,94.332,2.424,96.757
|
||||
0,3,5643.43,0.367,0.462,102.833,81.493,184.327,2.916,187.244
|
||||
0,0,5719.101,0.348,0.427,42.935,78.555,121.491,1.886,123.377
|
||||
0,8,5581.178,0.307,0.381,181.001,83.057,264.059,1.295,265.354
|
||||
0,9,5721.773,0.324,0.406,46.37,81.578,127.949,1.29,129.239
|
||||
0,2,5764.95,0.399,0.477,28.761,79.071,107.832,2.316,110.149
|
||||
0,1,5714.679,0.318,0.404,98.197,82.491,180.689,1.885,182.574
|
||||
0,4,5793.839,0.314,0.382,30.597,81.38,111.978,1.234,113.212
|
||||
0,7,5775.948,0.332,0.413,51.577,84.088,135.665,0.377,136.043
|
||||
0,3,5830.686,0.955,1.072,11.735,81.606,93.341,1.701,95.043
|
||||
0,9,5851.02,0.333,0.414,18.739,81.701,100.441,1.33,101.771
|
||||
0,2,5875.109,0.396,0.478,15.164,81.893,97.058,1.217,98.275
|
||||
0,5,5781.659,0.318,0.386,119.27,83.15,202.42,0.376,202.797
|
||||
0,7,5911.998,0.339,0.418,11.726,82.093,93.82,1.495,95.315
|
||||
0,3,5925.738,0.447,0.516,21.925,79.87,101.795,0.344,102.14
|
||||
0,0,5842.488,0.338,0.409,124.073,81.734,205.807,2.047,207.855
|
||||
0,6,5779.654,0.326,0.406,188.882,82.945,271.828,0.958,272.786
|
||||
0,1,5897.261,0.301,0.377,74.047,81.4,155.448,0.967,156.415
|
||||
0,8,5846.539,0.337,0.429,140.2,79.976,220.176,2.328,222.505
|
||||
0,9,5952.801,0.344,0.421,54.536,79.755,134.291,1.41,135.702
|
||||
0,7,6007.318,0.522,0.618,14.816,79.956,94.772,16.419,111.192
|
||||
0,2,5973.394,0.518,0.592,60.307,84.753,145.06,0.75,145.81
|
||||
0,5,5984.463,0.449,0.524,50.467,84.478,134.945,1.93,136.876
|
||||
0,4,5907.056,0.402,0.484,129.229,84.9,214.129,1.722,215.851
|
||||
0,3,6027.888,0.42,0.494,39.048,80.015,119.064,1.978,121.042
|
||||
0,0,6050.355,1.316,1.485,29.107,82.111,111.218,1.742,112.96
|
||||
0,1,6053.684,0.311,0.379,47.288,81.844,129.132,1.182,130.315
|
||||
0,6,6052.444,0.503,0.615,67.027,81.05,148.077,1.152,149.229
|
||||
0,5,6121.346,0.337,0.446,23.684,78.068,101.752,2.019,103.772
|
||||
0,8,6069.053,0.397,0.478,79.682,79.537,159.219,1.582,160.802
|
||||
0,9,6088.518,0.344,0.419,65.681,81.3,146.982,13.495,160.477
|
||||
0,7,6118.543,0.547,0.608,50.691,81.862,132.554,0.377,132.931
|
||||
0,3,6148.938,0.351,0.416,38.998,82.443,121.442,10.62,132.062
|
||||
0,1,6184.009,0.625,0.847,30.097,79.57,109.667,2.015,111.682
|
||||
0,4,6122.915,0.478,0.554,133.957,92.839,226.796,1.7,228.497
|
||||
0,2,6119.207,0.42,0.468,136.749,95.595,232.345,3.165,235.51
|
||||
0,5,6225.127,0.307,0.389,30.625,98.714,129.339,0.471,129.811
|
||||
0,8,6229.86,0.669,0.746,51.831,97.397,149.228,1.67,150.898
|
||||
0,6,6201.683,0.393,0.475,85.686,96.242,181.928,5.483,187.412
|
||||
0,9,6249.004,0.394,0.467,68.533,82.42,150.954,0.531,151.485
|
||||
0,0,6163.324,0.47,0.577,154.586,83.082,237.668,12.538,250.207
|
||||
0,7,6251.483,0.329,0.409,71.341,90.405,161.747,0.44,162.188
|
||||
0,3,6281.008,0.413,0.572,45.589,86.798,132.388,1.088,133.476
|
||||
0,1,6295.702,0.418,0.499,51.953,79.591,131.545,1.322,132.867
|
||||
0,4,6351.453,0.526,0.622,1.002,79.648,80.651,2.773,83.424
|
||||
0,2,6354.728,0.554,0.647,34.466,80.677,115.143,0.939,116.083
|
||||
0,5,6354.95,0.507,0.659,65.208,80.513,145.721,4.54,150.262
|
||||
0,6,6389.103,0.371,0.453,31.17,84.714,115.884,0.492,116.376
|
||||
0,0,6413.542,0.446,0.573,10.238,84.236,94.475,0.223,94.699
|
||||
0,1,6428.577,0.312,0.401,27.804,81.855,109.659,1.676,111.336
|
||||
0,7,6413.677,0.485,0.6,45.942,80.918,126.86,2.002,128.863
|
||||
0,2,6470.818,0.322,0.4,18.925,81.521,100.446,0.952,101.399
|
||||
0,4,6434.885,0.367,0.43,63.441,84.026,147.468,2.273,149.741
|
||||
0,0,6508.249,0.291,0.367,14.539,80.234,94.774,2.012,96.787
|
||||
0,9,6400.496,0.321,0.422,124.092,86.419,210.512,2.121,212.633
|
||||
0,6,6505.483,0.332,0.395,50.891,82.623,133.515,2.367,135.883
|
||||
0,5,6505.215,0.47,0.546,66.876,80.667,147.543,1.659,149.202
|
||||
0,2,6572.224,0.316,0.376,17.54,84.437,101.978,0.329,102.308
|
||||
0,4,6584.634,0.383,0.482,15.541,81.204,96.746,1.192,97.939
|
||||
0,9,6613.139,0.441,0.554,10.492,79.826,90.318,1.596,91.915
|
||||
0,7,6542.547,0.337,0.417,113.17,80.125,193.295,1.239,194.535
|
||||
0,0,6605.043,0.334,0.415,57.477,82.496,139.973,1.355,141.329
|
||||
0,3,6414.491,0.775,0.919,247.767,84.12,331.888,2.017,333.905
|
||||
0,8,6380.768,0.437,0.526,281.598,85.832,367.431,0.649,368.081
|
||||
0,5,6654.422,0.74,0.895,7.715,86.517,94.233,1.298,95.531
|
||||
0,1,6539.923,0.391,0.483,149.274,83.239,232.513,2.996,235.509
|
||||
0,4,6682.579,0.336,0.416,6.481,86.19,92.672,10.253,102.925
|
||||
0,6,6641.381,0.317,0.393,59.657,84.226,143.884,0.521,144.405
|
||||
0,9,6705.064,0.411,0.478,19.864,80.4,100.264,1.428,101.693
|
||||
0,2,6674.542,0.419,0.494,53.331,81.556,134.888,1.243,136.131
|
||||
0,7,6737.093,0.433,0.512,18.865,80.421,99.287,0.362,99.649
|
||||
0,8,6748.856,0.377,0.434,17.681,84.385,102.067,0.776,102.843
|
||||
0,6,6785.795,0.516,0.607,9.629,79.503,89.133,2.355,91.488
|
||||
0,5,6749.962,0.412,0.48,73.922,79.8,153.722,1.568,155.291
|
||||
0,0,6746.38,0.315,0.39,110.351,80.636,190.987,1.112,192.1
|
||||
0,7,6836.754,0.55,0.613,24.537,80.93,105.467,2.694,108.162
|
||||
0,8,6851.707,0.33,0.393,20.472,81.812,102.285,1.242,103.527
|
||||
0,6,6877.293,0.396,0.464,12.523,81.162,93.686,1.659,95.345
|
||||
0,4,6785.508,0.589,0.692,115.734,86.656,202.391,0.733,203.124
|
||||
0,1,6775.441,0.33,0.414,130.532,83.319,213.851,1.687,215.538
|
||||
0,9,6806.765,0.34,0.423,99.015,85.013,184.029,3.078,187.108
|
||||
0,3,6748.406,0.486,0.618,174.309,81.219,255.529,4.272,259.801
|
||||
0,5,6905.264,0.568,0.647,23.753,80.364,104.118,0.631,104.749
|
||||
0,8,6955.243,0.326,0.406,2.524,80.645,83.169,0.755,83.925
|
||||
0,0,6938.49,0.461,0.541,27.562,81.761,109.323,1.228,110.552
|
||||
0,2,6810.68,0.93,1.1,197.267,80.838,278.105,1.271,279.376
|
||||
0,7,6944.924,0.37,0.455,63.266,82.346,145.613,1.637,147.251
|
||||
0,4,6988.643,0.466,0.606,34.89,83.461,118.352,3.998,122.35
|
||||
0,3,7008.212,0.533,0.621,66.77,79.833,146.603,1.377,147.98
|
||||
0,0,7049.053,0.377,0.459,25.731,82.163,107.895,1.657,109.553
|
||||
0,6,6972.667,0.354,0.428,119.457,80.472,199.93,0.336,200.266
|
||||
0,7,7092.184,0.337,0.406,4.213,82.36,86.573,1.179,87.752
|
||||
0,9,6993.88,0.439,0.511,110.675,82.611,193.287,1.277,194.564
|
||||
0,1,6990.987,0.309,0.389,131.279,80.628,211.907,1.199,213.107
|
||||
0,8,7039.181,1.011,1.109,91.879,83.571,175.451,1.855,177.306
|
||||
0,2,7090.066,0.356,0.455,51.305,82.594,133.899,1.56,135.459
|
||||
0,4,7111.004,0.415,0.497,30.584,84.877,115.461,1.764,117.225
|
||||
0,5,7010.022,0.464,0.541,141.61,82.79,224.4,2.016,226.417
|
||||
0,0,7158.615,0.364,0.442,4.359,80.082,84.441,1.28,85.722
|
||||
0,6,7172.942,0.521,0.598,26.196,79.661,105.858,1.066,106.924
|
||||
0,3,7156.204,0.42,0.502,53.726,79.747,133.473,1.584,135.058
|
||||
0,1,7204.101,0.331,0.416,26.093,81.632,107.725,2,109.726
|
||||
0,0,7244.345,0.32,0.398,21.466,80.972,102.438,1.166,103.605
|
||||
0,5,7236.446,0.493,0.55,41.039,79.52,120.56,2.102,122.662
|
||||
0,9,7188.454,0.601,0.747,110.165,80.817,190.983,0.996,191.979
|
||||
0,8,7216.494,0.341,0.427,81.98,80.888,162.869,2.197,165.067
|
||||
0,7,7179.945,0.403,0.485,119.842,81.613,201.455,0.476,201.931
|
||||
0,2,7225.536,0.484,0.582,74.136,81.65,155.786,1.136,156.923
|
||||
0,1,7313.837,0.452,0.567,18.595,83.189,101.784,2.503,104.288
|
||||
0,6,7279.875,0.328,0.411,61.184,81.339,142.524,2.233,144.757
|
||||
0,5,7359.116,0.325,0.402,6.764,82.524,89.288,1.53,90.819
|
||||
0,4,7228.237,0.716,0.876,138.937,84.177,223.115,0.301,223.416
|
||||
0,7,7381.883,0.288,0.383,22.346,80.881,103.228,1.238,104.466
|
||||
0,3,7291.272,0.443,0.52,113.137,81.756,194.893,1.745,196.639
|
||||
0,8,7381.568,0.403,0.472,54.796,80.499,135.296,0.451,135.748
|
||||
0,0,7347.958,0.324,0.405,118.366,81.119,199.485,1.507,200.992
|
||||
0,9,7380.444,0.554,0.68,93.055,79.533,172.588,1.514,174.103
|
||||
0,4,7451.66,0.316,0.384,22.329,80.797,103.127,2.351,105.478
|
||||
0,3,7487.919,0.325,0.403,15.077,82.38,97.457,17.729,115.187
|
||||
0,1,7418.133,0.432,0.498,97.07,87.573,184.644,0.619,185.263
|
||||
0,8,7517.326,0.441,0.512,15.017,86.247,101.265,0.225,101.49
|
||||
0,6,7424.648,0.311,0.394,113.912,82.157,196.07,0.29,196.361
|
||||
0,5,7449.946,0.966,1.145,91.384,80.285,171.67,1.546,173.216
|
||||
0,2,7382.465,0.311,0.368,155.965,84.581,240.547,6.505,247.052
|
||||
0,7,7486.358,0.32,0.403,62.472,82.007,144.479,5.539,150.018
|
||||
0,4,7557.146,0.366,0.452,15.698,80.87,96.568,13.833,110.402
|
||||
0,0,7548.957,0.315,0.408,53.927,80.333,134.26,1.998,136.259
|
||||
0,9,7554.554,0.424,0.512,48.698,81.789,130.488,2.084,132.572
|
||||
0,3,7603.119,0.564,0.632,66.287,80.673,146.961,1.472,148.433
|
||||
0,6,7621.016,0.287,0.361,50.611,79.755,130.366,2.06,132.427
|
||||
0,1,7603.404,0.35,0.44,71.549,81.794,153.343,1.394,154.737
|
||||
0,7,7636.385,0.328,0.393,38.377,83.192,121.569,7.821,129.391
|
||||
0,8,7618.824,0.315,0.391,58.371,88.394,146.766,0.268,147.034
|
||||
0,4,7667.559,0.458,0.544,41.885,80.925,122.811,2.257,125.068
|
||||
0,0,7685.224,0.379,0.462,51.5,85.236,136.737,1.835,138.572
|
||||
0,5,7623.17,0.345,0.429,113.716,86.773,200.489,2.099,202.589
|
||||
0,9,7687.135,0.365,0.44,55.114,83.348,138.463,1.93,140.394
|
||||
0,2,7629.525,0.75,0.881,112.85,84.984,197.834,1.481,199.316
|
||||
0,6,7753.451,0.348,0.443,19.425,81.92,101.345,0.235,101.581
|
||||
0,8,7765.861,0.295,0.382,42.989,83.301,126.291,0.309,126.6
|
||||
0,3,7751.56,0.371,0.447,57.895,83.908,141.804,1.772,143.577
|
||||
0,1,7758.148,0.305,0.375,61.756,83.904,145.661,0.303,145.964
|
||||
0,4,7792.635,0.385,0.467,48.907,82.184,131.091,1.903,132.995
|
||||
0,7,7765.787,0.508,0.598,82.233,80.202,162.436,0.937,163.373
|
||||
0,5,7825.768,0.352,0.433,48.817,83.915,132.733,1.856,134.59
|
||||
0,0,7823.804,0.347,0.42,81.14,78.737,159.878,2.87,162.748
|
||||
0,3,7895.144,0.324,0.404,19.162,79.062,98.225,1.353,99.579
|
||||
0,1,7904.124,0.531,0.75,44.278,80.547,124.825,2.869,127.694
|
||||
0,7,7929.169,0.305,0.4,22.345,80.727,103.073,0.274,103.347
|
||||
0,9,7827.535,0.315,0.398,125.914,79.985,205.899,1.407,207.306
|
||||
0,4,7925.637,0.295,0.37,55.306,79.662,134.969,1.413,136.382
|
||||
0,6,7855.04,0.348,0.424,129.077,82.84,211.917,1.083,213
|
||||
0,2,7828.844,0.332,0.377,154.911,84.522,239.433,0.778,240.211
|
||||
0,8,7892.473,0.449,0.525,91.578,85.603,177.182,9.727,186.909
|
||||
0,5,7960.366,0.389,0.468,55.094,82.706,137.801,1.851,139.652
|
||||
0,3,7994.732,0.337,0.41,22.79,83.043,105.834,1.32,107.154
|
||||
0,7,8032.525,0.351,0.425,16.842,80.964,97.806,3.531,101.338
|
||||
0,0,7986.561,0.295,0.37,65.496,81.656,147.152,1.49,148.643
|
||||
0,9,8034.848,0.327,0.409,49.351,81.008,130.359,9.179,139.539
|
||||
0,4,8062.031,0.837,1.09,46.288,82.287,128.575,3.955,132.531
|
||||
0,5,8100.03,0.389,0.486,18.157,82.12,100.278,2.442,102.72
|
||||
0,1,8031.827,0.478,0.608,96.665,82.449,179.114,1.973,181.087
|
||||
0,2,8069.062,0.342,0.407,85.309,81.496,166.805,0.329,167.135
|
||||
0,9,8174.399,0.474,0.569,11.749,83.111,94.861,1.975,96.836
|
||||
0,3,8101.893,0.317,0.394,85.135,84.047,169.183,2.215,171.398
|
||||
0,8,8079.389,0.343,0.409,114.95,81.574,196.524,0.902,197.427
|
||||
0,1,8212.925,0.393,0.494,5.508,81.466,86.974,2.467,89.442
|
||||
0,6,8068.049,0.4,0.476,153.286,83.743,237.03,1.172,238.202
|
||||
0,4,8194.572,0.388,0.455,46.45,82.449,128.899,3.487,132.387
|
||||
0,7,8133.87,0.316,0.402,127.895,81.295,209.19,0.378,209.569
|
||||
0,0,8135.211,0.37,0.49,149.827,95.401,245.228,0.525,245.753
|
||||
0,5,8202.758,0.299,0.378,83.997,93.829,177.826,0.433,178.259
|
||||
0,2,8236.206,0.419,0.527,47.407,97.117,144.525,0.519,145.044
|
||||
0,6,8306.259,0.336,0.413,3.622,81.754,85.377,3.954,89.331
|
||||
0,9,8271.247,0.468,1.138,48.801,82.285,131.086,5.775,136.861
|
||||
0,7,8343.45,0.445,0.55,7.533,83.535,91.069,12.373,103.442
|
||||
0,1,8302.377,0.352,0.429,54.306,89.95,144.257,1.044,145.301
|
||||
0,8,8276.825,0.397,0.494,104.45,87.657,192.107,1.003,193.111
|
||||
0,3,8273.295,0.582,0.657,107.827,88.457,196.284,0.432,196.717
|
||||
0,4,8326.967,0.382,0.454,55.066,88.862,143.928,3.529,147.457
|
||||
0,9,8408.118,0.387,0.47,10.387,81.323,91.711,2.096,93.808
|
||||
0,5,8381.02,0.737,0.809,72.154,82.173,154.327,2.08,156.408
|
||||
0,6,8395.599,0.31,0.381,60.746,88.193,148.94,0.223,149.163
|
||||
0,1,8447.686,0.287,0.348,15.042,82.895,97.937,3.174,101.111
|
||||
0,0,8380.969,0.55,0.685,84.005,88.633,172.638,1.193,173.831
|
||||
0,4,8474.432,0.295,0.375,10.992,87.808,98.8,15.063,113.864
|
||||
0,8,8469.946,0.996,1.127,55.763,87.871,143.635,0.35,143.985
|
||||
0,0,8554.808,0.306,0.389,4.062,97.274,101.336,1.629,102.966
|
||||
0,9,8501.936,0.364,0.441,57.994,97.65,155.644,0.333,155.977
|
||||
0,5,8537.438,0.409,0.487,24.686,95.581,120.268,0.765,121.034
|
||||
0,7,8446.903,0.418,0.538,166.93,82.688,249.618,12.816,262.434
|
||||
0,3,8470.014,1.107,1.204,144.07,95.186,239.257,0.458,239.715
|
||||
0,1,8548.805,0.291,0.366,65.599,95.008,160.607,1.759,162.367
|
||||
0,2,8381.252,0.64,0.703,232.706,95.11,327.816,2.124,329.941
|
||||
0,4,8588.308,0.451,0.53,47.676,81.686,129.363,19.95,149.313
|
||||
0,6,8544.77,0.425,0.514,94.256,98.361,192.617,1.175,193.793
|
||||
0,8,8613.935,0.482,0.648,66.74,79.822,146.562,13.637,160.199
|
||||
0,5,8658.478,0.364,0.461,23.727,91.555,115.283,0.678,115.961
|
||||
0,0,8657.783,0.359,0.437,29.469,86.909,116.378,1.615,117.994
|
||||
0,9,8657.92,0.434,0.494,52.377,80.121,132.499,2.162,134.661
|
||||
0,7,8709.341,1.143,1.286,2.176,84.412,86.589,18.531,105.121
|
||||
0,0,8775.784,0.34,0.447,2.582,677.582,680.165,1.972,682.138
|
||||
0,4,8737.632,0.477,0.553,40.936,679.191,720.127,46.877,767.005
|
||||
0,1,8711.177,0.458,0.532,46.203,746.914,793.118,0.676,793.795
|
||||
0,2,8711.197,0.549,0.614,36.637,756.865,793.503,0.62,794.123
|
||||
0,3,8709.732,0.968,1.401,729.574,148.167,877.741,1.855,879.597
|
||||
0,9,8792.592,0.382,0.461,647.063,212.999,860.063,2.327,862.391
|
||||
0,5,8774.449,0.442,0.497,665.322,278.888,944.21,1.71,945.921
|
||||
0,8,8774.139,0.542,0.675,666.023,348.013,1014.037,3.225,1017.262
|
||||
0,7,8814.472,0.42,0.499,625.747,350.894,976.641,1.077,977.719
|
||||
0,3,9589.338,0.74,0.84,52.156,212.561,264.717,1.988,266.706
|
||||
0,1,9504.98,0.395,0.478,199.746,152.4,352.146,1.436,353.583
|
||||
0,2,9505.326,0.369,0.408,200.027,212.787,412.815,0.346,413.162
|
||||
0,5,9720.381,0.408,0.468,50.974,150.027,201.002,0.889,201.892
|
||||
0,9,9654.994,0.436,0.496,119.325,206.595,325.92,1.9,327.82
|
||||
0,7,9792.196,0.259,0.853,45.479,147.983,193.463,1.292,194.756
|
||||
0,8,9791.412,0.416,0.474,47.556,209.663,257.22,1.399,258.62
|
||||
0,1,9858.571,0.332,0.388,47.169,146.521,193.691,1.358,195.049
|
||||
0,6,8738.566,0.293,0.349,1167.354,156.58,1323.935,0.934,1324.869
|
||||
0,5,9922.281,0.382,0.438,49.221,145.247,194.469,1.392,195.862
|
||||
0,7,9986.962,0.364,0.42,47.021,150.528,197.549,1.334,198.884
|
||||
0,0,9457.939,0.316,0.395,578.457,150.278,728.735,1.254,729.99
|
||||
0,9,9982.825,0.43,0.5,64.168,199.563,263.731,0.345,264.077
|
||||
0,3,9856.054,0.416,0.472,247.039,147.388,394.428,1.72,396.148
|
||||
0,4,9504.641,0.548,0.619,664.554,141.019,805.573,1.417,806.991
|
||||
0,2,9918.499,0.404,0.459,250.86,142.241,393.101,1.155,394.257
|
|
44
vendor/github.com/aws/aws-sdk-go/awstesting/integration/integration.go
generated
vendored
44
vendor/github.com/aws/aws-sdk-go/awstesting/integration/integration.go
generated
vendored
|
@ -1,44 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
// Package integration performs initialization and validation for integration
|
||||
// tests.
|
||||
package integration
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
)
|
||||
|
||||
// Session is a shared session for all integration tests to use.
|
||||
var Session = session.Must(session.NewSession())
|
||||
|
||||
func init() {
|
||||
logLevel := Session.Config.LogLevel
|
||||
if os.Getenv("DEBUG") != "" {
|
||||
logLevel = aws.LogLevel(aws.LogDebug)
|
||||
}
|
||||
if os.Getenv("DEBUG_SIGNING") != "" {
|
||||
logLevel = aws.LogLevel(aws.LogDebugWithSigning)
|
||||
}
|
||||
if os.Getenv("DEBUG_BODY") != "" {
|
||||
logLevel = aws.LogLevel(aws.LogDebugWithSigning | aws.LogDebugWithHTTPBody)
|
||||
}
|
||||
Session.Config.LogLevel = logLevel
|
||||
|
||||
if aws.StringValue(Session.Config.Region) == "" {
|
||||
panic("AWS_REGION must be configured to run integration tests")
|
||||
}
|
||||
}
|
||||
|
||||
// UniqueID returns a unique UUID-like identifier for use in generating
|
||||
// resources for integration tests.
|
||||
func UniqueID() string {
|
||||
uuid := make([]byte, 16)
|
||||
io.ReadFull(rand.Reader, uuid)
|
||||
return fmt.Sprintf("%x", uuid)
|
||||
}
|
14
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/acm/acm.feature
generated
vendored
14
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/acm/acm.feature
generated
vendored
|
@ -1,14 +0,0 @@
|
|||
#language en
|
||||
@acm @client
|
||||
Feature: AWS Certificate Manager
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListCertificates" API
|
||||
Then the request should be successful
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "GetCertificate" API with:
|
||||
| CertificateArn | arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012 |
|
||||
Then I expect the response error code to be "ResourceNotFoundException"
|
||||
And I expect the response error message not be empty
|
||||
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/acm/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/acm/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package acm provides gucumber integration tests support.
|
||||
package acm
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/acm"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@acm", func() {
|
||||
gucumber.World["client"] = acm.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@apigateway @client
|
||||
Feature: Amazon API Gateway
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "GetAccountRequest" API
|
||||
Then the request should be successful
|
||||
|
||||
Scenario: Handing errors
|
||||
When I attempt to call the "GetRestApi" API with:
|
||||
| RestApiId | api123 |
|
||||
Then I expect the response error code to be "NotFoundException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
Invalid REST API identifier specified
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/apigateway/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/apigateway/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package apigateway provides gucumber integration tests support.
|
||||
package apigateway
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/apigateway"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@apigateway", func() {
|
||||
gucumber.World["client"] = apigateway.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
#language en
|
||||
@applicationdiscoveryservice @client
|
||||
Feature: AWS Application Discovery Service
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeAgents" API
|
||||
Then the request should be successful
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package applicationdiscoveryservice provides gucumber integration tests support.
|
||||
package applicationdiscoveryservice
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/applicationdiscoveryservice"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@applicationdiscoveryservice", func() {
|
||||
gucumber.World["client"] = applicationdiscoveryservice.New(
|
||||
smoke.Session, &aws.Config{Region: aws.String("us-west-2")},
|
||||
)
|
||||
})
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
# language: en
|
||||
@autoscaling @client
|
||||
Feature: Auto Scaling
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeScalingProcessTypes" API
|
||||
Then the value at "Processes" should be a list
|
||||
|
||||
Scenario: Handing errors
|
||||
When I attempt to call the "CreateLaunchConfiguration" API with:
|
||||
| LaunchConfigurationName | |
|
||||
| ImageId | ami-12345678 |
|
||||
| InstanceType | m1.small |
|
||||
Then I expect the response error code to be "InvalidParameter"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
LaunchConfigurationName
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/autoscaling/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/autoscaling/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package autoscaling provides gucumber integration tests support.
|
||||
package autoscaling
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/autoscaling"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@autoscaling", func() {
|
||||
gucumber.World["client"] = autoscaling.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
# language: en
|
||||
@autoscalingplans @client
|
||||
Feature: AWS Auto Scaling Plans
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeScalingPlans" API
|
||||
Then the request should be successful
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/autoscalingplans/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/autoscalingplans/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package autoscalingplans provides gucumber integration tests support.
|
||||
package autoscalingplans
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/autoscalingplans"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@autoscalingplans", func() {
|
||||
gucumber.World["client"] = autoscalingplans.New(smoke.Session)
|
||||
})
|
||||
}
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudformation/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudformation/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cloudformation provides gucumber integration tests support.
|
||||
package cloudformation
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cloudformation"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cloudformation", func() {
|
||||
gucumber.World["client"] = cloudformation.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
# language: en
|
||||
@cloudformation @client
|
||||
Feature: AWS CloudFormation
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListStacks" API
|
||||
Then the value at "StackSummaries" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "CreateStack" API with:
|
||||
| StackName | fakestack |
|
||||
| TemplateURL | http://s3.amazonaws.com/foo/bar |
|
||||
Then I expect the response error code to be "ValidationError"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
TemplateURL must reference a valid S3 object to which you have access.
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudfront/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudfront/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cloudfront provides gucumber integration tests support.
|
||||
package cloudfront
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cloudfront"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cloudfront", func() {
|
||||
gucumber.World["client"] = cloudfront.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
# language: en
|
||||
@cloudfront @client
|
||||
Feature: Amazon CloudFront
|
||||
|
||||
Scenario: Making a basic request
|
||||
When I call the "ListDistributions" API with:
|
||||
| MaxItems | 1 |
|
||||
Then the value at "DistributionList.Items" should be a list
|
||||
|
||||
Scenario: Error handling
|
||||
When I attempt to call the "GetDistribution" API with:
|
||||
| Id | fake-id |
|
||||
Then I expect the response error code to be "NoSuchDistribution"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
The specified distribution does not exist.
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudhsm/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudhsm/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cloudhsm provides gucumber integration tests support.
|
||||
package cloudhsm
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cloudhsm"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cloudhsm", func() {
|
||||
gucumber.World["client"] = cloudhsm.New(smoke.Session)
|
||||
})
|
||||
}
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudhsm/cloudhsm.feature
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudhsm/cloudhsm.feature
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@cloudhsm @client
|
||||
Feature: Amazon CloudHSM
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListHapgs" API
|
||||
Then the value at "HapgList" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeHapg" API with:
|
||||
| HapgArn | bogus-arn |
|
||||
Then I expect the response error code to be "ValidationException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
Value 'bogus-arn' at 'hapgArn' failed to satisfy constraint
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudhsmv2/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudhsmv2/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cloudhsmv2 provides gucumber integration tests support.
|
||||
package cloudhsmv2
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cloudhsmv2"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cloudhsmv2", func() {
|
||||
gucumber.World["client"] = cloudhsmv2.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
# language: en
|
||||
@cloudhsmv2 @client
|
||||
Feature: Amazon CloudHSMv2
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeBackups" API
|
||||
Then the request should be successful
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudsearch/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudsearch/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cloudsearch provides gucumber integration tests support.
|
||||
package cloudsearch
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cloudsearch"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cloudsearch", func() {
|
||||
gucumber.World["client"] = cloudsearch.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@cloudsearch @client
|
||||
Feature: Amazon CloudSearch
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeDomains" API
|
||||
Then the response should contain a "DomainStatusList"
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeIndexFields" API with:
|
||||
| DomainName | fakedomain |
|
||||
Then I expect the response error code to be "ResourceNotFound"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
Domain not found: fakedomain
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudtrail/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudtrail/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cloudtrail provides gucumber integration tests support.
|
||||
package cloudtrail
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cloudtrail"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cloudtrail", func() {
|
||||
gucumber.World["client"] = cloudtrail.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
# language: en
|
||||
@cloudtrail @client
|
||||
Feature: AWS CloudTrail
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeTrails" API
|
||||
Then the request should be successful
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DeleteTrail" API with:
|
||||
| Name | faketrail |
|
||||
Then I expect the response error code to be "TrailNotFoundException"
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudwatch/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudwatch/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cloudwatch provides gucumber integration tests support.
|
||||
package cloudwatch
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cloudwatch", func() {
|
||||
gucumber.World["client"] = cloudwatch.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
# language: en
|
||||
@cloudwatch @monitoring @client
|
||||
Feature: Amazon CloudWatch
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListMetrics" API with:
|
||||
| Namespace | AWS/EC2 |
|
||||
Then the value at "Metrics" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "SetAlarmState" API with:
|
||||
| AlarmName | abc |
|
||||
| StateValue | mno |
|
||||
| StateReason | xyz |
|
||||
Then I expect the response error code to be "ValidationError"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
failed to satisfy constraint
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudwatchlogs/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cloudwatchlogs/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cloudwatchlogs provides gucumber integration tests support.
|
||||
package cloudwatchlogs
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cloudwatchlogs", func() {
|
||||
gucumber.World["client"] = cloudwatchlogs.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
# language: en
|
||||
@cloudwatchlogs @logs
|
||||
Feature: Amazon CloudWatch Logs
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeLogGroups" API
|
||||
Then the value at "logGroups" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "GetLogEvents" API with:
|
||||
| logGroupName | fakegroup |
|
||||
| logStreamName | fakestream |
|
||||
Then I expect the response error code to be "ResourceNotFoundException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
The specified log group does not exist.
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/codecommit/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/codecommit/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package codecommit provides gucumber integration tests support.
|
||||
package codecommit
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/codecommit"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@codecommit", func() {
|
||||
gucumber.World["client"] = codecommit.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@codecommit @client
|
||||
Feature: Amazon CodeCommit
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListRepositories" API
|
||||
Then the value at "repositories" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "ListBranches" API with:
|
||||
| repositoryName | fake-repo |
|
||||
Then I expect the response error code to be "RepositoryDoesNotExistException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
fake-repo does not exist
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/codedeploy/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/codedeploy/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package codedeploy provides gucumber integration tests support.
|
||||
package codedeploy
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/codedeploy"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@codedeploy", func() {
|
||||
gucumber.World["client"] = codedeploy.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@codedeploy @client
|
||||
Feature: Amazon CodeDeploy
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListApplications" API
|
||||
Then the value at "applications" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "GetDeployment" API with:
|
||||
| deploymentId | d-USUAELQEX |
|
||||
Then I expect the response error code to be "DeploymentDoesNotExistException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
The deployment d-USUAELQEX could not be found
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/codepipeline/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/codepipeline/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package codepipeline provides gucumber integration tests support.
|
||||
package codepipeline
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/codepipeline"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@codepipeline", func() {
|
||||
gucumber.World["client"] = codepipeline.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@codepipeline @client
|
||||
Feature: Amazon CodePipeline
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListPipelines" API
|
||||
Then the value at "pipelines" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "GetPipeline" API with:
|
||||
| name | fake-pipeline |
|
||||
Then I expect the response error code to be "PipelineNotFoundException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
does not have a pipeline with name 'fake-pipeline'
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cognitoidentity/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cognitoidentity/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cognitoidentity provides gucumber integration tests support.
|
||||
package cognitoidentity
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cognitoidentity"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cognitoidentity", func() {
|
||||
gucumber.World["client"] = cognitoidentity.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
# language: en
|
||||
@cognitoidentity @client
|
||||
Feature: Amazon Cognito Idenity
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListIdentityPools" API with JSON:
|
||||
"""
|
||||
{"MaxResults": 10}
|
||||
"""
|
||||
Then the value at "IdentityPools" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeIdentityPool" API with:
|
||||
| IdentityPoolId | us-east-1:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee |
|
||||
Then I expect the response error code to be "ResourceNotFoundException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
IdentityPool 'us-east-1:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' not found
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cognitosync/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/cognitosync/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package cognitosync provides gucumber integration tests support.
|
||||
package cognitosync
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/cognitosync"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@cognitosync", func() {
|
||||
gucumber.World["client"] = cognitosync.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@cognitosync @client
|
||||
Feature: Amazon Cognito Sync
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListIdentityPoolUsage" API
|
||||
Then the value at "IdentityPoolUsages" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeIdentityPoolUsage" API with:
|
||||
| IdentityPoolId | us-east-1:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee |
|
||||
Then I expect the response error code to be "ResourceNotFoundException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
IdentityPool 'us-east-1:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' not found
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/configservice/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/configservice/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package configservice provides gucumber integration tests support.
|
||||
package configservice
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/configservice"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@configservice", func() {
|
||||
gucumber.World["client"] = configservice.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
# language: en
|
||||
@configservice @config @client
|
||||
Feature: AWS Config
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeConfigurationRecorders" API
|
||||
Then the value at "ConfigurationRecorders" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "GetResourceConfigHistory" API with:
|
||||
| resourceType | fake-type |
|
||||
| resourceId | fake-id |
|
||||
Then I expect the response error code to be "ValidationException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
failed to satisfy constraint
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/datapipeline/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/datapipeline/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package datapipeline provides gucumber integration tests support.
|
||||
package datapipeline
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/datapipeline"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@datapipeline", func() {
|
||||
gucumber.World["client"] = datapipeline.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@datapipeline @client
|
||||
Feature: AWS Data Pipeline
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListPipelines" API
|
||||
Then the response should contain a "pipelineIdList"
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "GetPipelineDefinition" API with:
|
||||
| pipelineId | fake-id |
|
||||
Then I expect the response error code to be "PipelineNotFoundException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
does not exist
|
||||
"""
|
19
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/devicefarm/client.go
generated
vendored
19
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/devicefarm/client.go
generated
vendored
|
@ -1,19 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package devicefarm provides gucumber integration tests support.
|
||||
package devicefarm
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/devicefarm"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@devicefarm", func() {
|
||||
// FIXME remove custom region
|
||||
gucumber.World["client"] = devicefarm.New(smoke.Session,
|
||||
aws.NewConfig().WithRegion("us-west-2"))
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@devicefarm @client
|
||||
Feature: AWS Device Farm
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListDevices" API
|
||||
Then the value at "devices" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "GetDevice" API with:
|
||||
| arn | arn:aws:devicefarm:us-west-2::device:000000000000000000000000fake-arn |
|
||||
Then I expect the response error code to be "NotFoundException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
No device was found for arn
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/directconnect/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/directconnect/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package directconnect provides gucumber integration tests support.
|
||||
package directconnect
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/directconnect"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@directconnect", func() {
|
||||
gucumber.World["client"] = directconnect.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@directconnect @client
|
||||
Feature: AWS Direct Connect
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeConnections" API
|
||||
Then the value at "connections" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeConnections" API with:
|
||||
| connectionId | fake-connection |
|
||||
Then I expect the response error code to be "DirectConnectClientException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
Connection ID fake-connection has an invalid format
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/directoryservice/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/directoryservice/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package directoryservice provides gucumber integration tests support.
|
||||
package directoryservice
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/directoryservice"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@directoryservice", func() {
|
||||
gucumber.World["client"] = directoryservice.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
# language: en
|
||||
@directoryservice @ds @client
|
||||
Feature: AWS Directory Service
|
||||
|
||||
I want to use AWS Directory Service
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeDirectories" API
|
||||
Then the value at "DirectoryDescriptions" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "CreateDirectory" API with:
|
||||
| Name | |
|
||||
| Password | |
|
||||
| Size | |
|
||||
Then I expect the response error code to be "ValidationException"
|
||||
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/dynamodb/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/dynamodb/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package dynamodb provides gucumber integration tests support.
|
||||
package dynamodb
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/dynamodb"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@dynamodb", func() {
|
||||
gucumber.World["client"] = dynamodb.New(smoke.Session)
|
||||
})
|
||||
}
|
19
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/dynamodb/dynamodb.feature
generated
vendored
19
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/dynamodb/dynamodb.feature
generated
vendored
|
@ -1,19 +0,0 @@
|
|||
# language: en
|
||||
@dynamodb @client
|
||||
Feature: Amazon DynamoDB
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListTables" API with JSON:
|
||||
"""
|
||||
{"Limit": 1}
|
||||
"""
|
||||
Then the value at "TableNames" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeTable" API with:
|
||||
| TableName | fake-table |
|
||||
Then I expect the response error code to be "ResourceNotFoundException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
Requested resource not found: Table: fake-table not found
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/dynamodbstreams/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/dynamodbstreams/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package dynamodbstreams provides gucumber integration tests support.
|
||||
package dynamodbstreams
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/dynamodbstreams"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@dynamodbstreams", func() {
|
||||
gucumber.World["client"] = dynamodbstreams.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@dynamodbstreams @client
|
||||
Feature: Amazon DynamoDB Streams
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListStreams" API
|
||||
Then the value at "Streams" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeStream" API with:
|
||||
| StreamArn | fake-stream |
|
||||
Then I expect the response error code to be "InvalidParameter"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
StreamArn
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/ec2/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/ec2/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package ec2 provides gucumber integration tests support.
|
||||
package ec2
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/ec2"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@ec2", func() {
|
||||
gucumber.World["client"] = ec2.New(smoke.Session)
|
||||
})
|
||||
}
|
18
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/ec2/ec2.feature
generated
vendored
18
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/ec2/ec2.feature
generated
vendored
|
@ -1,18 +0,0 @@
|
|||
# language: en
|
||||
@ec2 @client
|
||||
Feature: Amazon Elastic Compute Cloud
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeRegions" API
|
||||
Then the value at "Regions" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeInstances" API with JSON:
|
||||
"""
|
||||
{"InstanceIds": ["i-12345678"]}
|
||||
"""
|
||||
Then I expect the response error code to be "InvalidInstanceID.NotFound"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
The instance ID 'i-12345678' does not exist
|
||||
"""
|
19
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/ecs/client.go
generated
vendored
19
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/ecs/client.go
generated
vendored
|
@ -1,19 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package ecs provides gucumber integration tests support.
|
||||
package ecs
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/ecs"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@ecs", func() {
|
||||
// FIXME remove custom region
|
||||
gucumber.World["client"] = ecs.New(smoke.Session,
|
||||
aws.NewConfig().WithRegion("us-west-2"))
|
||||
})
|
||||
}
|
14
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/ecs/ecs.feature
generated
vendored
14
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/ecs/ecs.feature
generated
vendored
|
@ -1,14 +0,0 @@
|
|||
# language: en
|
||||
@ecs @client
|
||||
Feature: Amazon ECS
|
||||
|
||||
I want to use Amazon ECS
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListClusters" API
|
||||
Then the value at "clusterArns" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "StopTask" API with:
|
||||
| task | xxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxx |
|
||||
Then the error code should be "ClusterNotFoundException"
|
19
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/efs/client.go
generated
vendored
19
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/efs/client.go
generated
vendored
|
@ -1,19 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package efs provides gucumber integration tests support.
|
||||
package efs
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/efs"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@efs", func() {
|
||||
// FIXME remove custom region
|
||||
gucumber.World["client"] = efs.New(smoke.Session,
|
||||
aws.NewConfig().WithRegion("us-west-2"))
|
||||
})
|
||||
}
|
14
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/efs/efs.feature
generated
vendored
14
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/efs/efs.feature
generated
vendored
|
@ -1,14 +0,0 @@
|
|||
# language: en
|
||||
@efs @elasticfilesystem @client
|
||||
Feature: Amazon Elastic File System
|
||||
|
||||
I want to use Amazon Elastic File System
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeFileSystems" API
|
||||
Then the value at "FileSystems" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DeleteFileSystem" API with:
|
||||
| FileSystemId | fake-id |
|
||||
Then the error code should be "BadRequest"
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/elasticache/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/elasticache/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package elasticache provides gucumber integration tests support.
|
||||
package elasticache
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/elasticache"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@elasticache", func() {
|
||||
gucumber.World["client"] = elasticache.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@elasticache @client
|
||||
Feature: ElastiCache
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeEvents" API
|
||||
Then the value at "Events" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeCacheClusters" API with:
|
||||
| CacheClusterId | fake_cluster |
|
||||
Then I expect the response error code to be "InvalidParameterValue"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
The parameter CacheClusterIdentifier is not a valid identifier.
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/elasticbeanstalk/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/elasticbeanstalk/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package elasticbeanstalk provides gucumber integration tests support.
|
||||
package elasticbeanstalk
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/elasticbeanstalk"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@elasticbeanstalk", func() {
|
||||
gucumber.World["client"] = elasticbeanstalk.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@elasticbeanstalk @client
|
||||
Feature: AWS Elastic Beanstalk
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListAvailableSolutionStacks" API
|
||||
Then the value at "SolutionStacks" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeEnvironmentResources" API with:
|
||||
| EnvironmentId | fake_environment |
|
||||
Then I expect the response error code to be "InvalidParameterValue"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
No Environment found for EnvironmentId = 'fake_environment'.
|
||||
"""
|
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package elasticloadbalancing provides gucumber integration tests support.
|
||||
package elasticloadbalancing
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/elb"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@elasticloadbalancing", func() {
|
||||
gucumber.World["client"] = elb.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
# language: en
|
||||
@elasticloadbalancing @client
|
||||
Feature: Elastic Load Balancing
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "DescribeLoadBalancers" API
|
||||
Then the value at "LoadBalancerDescriptions" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeLoadBalancers" API with JSON:
|
||||
"""
|
||||
{"LoadBalancerNames": ["fake_load_balancer"]}
|
||||
"""
|
||||
Then I expect the response error code to be "ValidationError"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
LoadBalancer name cannot contain characters that are not letters, or digits or the dash.
|
||||
"""
|
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package elastictranscoder provides gucumber integration tests support.
|
||||
package elastictranscoder
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/elastictranscoder"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@elastictranscoder", func() {
|
||||
gucumber.World["client"] = elastictranscoder.New(smoke.Session)
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@elastictranscoder @client
|
||||
Feature: Amazon Elastic Transcoder
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListPresets" API
|
||||
Then the value at "Presets" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "ReadJob" API with:
|
||||
| Id | fake_job |
|
||||
Then I expect the response error code to be "ValidationException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
Value 'fake_job' at 'id' failed to satisfy constraint
|
||||
"""
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/emr/client.go
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/emr/client.go
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
// +build integration
|
||||
|
||||
//Package emr provides gucumber integration tests support.
|
||||
package emr
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/awstesting/integration/smoke"
|
||||
"github.com/aws/aws-sdk-go/service/emr"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gucumber.Before("@emr", func() {
|
||||
gucumber.World["client"] = emr.New(smoke.Session)
|
||||
})
|
||||
}
|
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/emr/emr.feature
generated
vendored
16
vendor/github.com/aws/aws-sdk-go/awstesting/integration/smoke/emr/emr.feature
generated
vendored
|
@ -1,16 +0,0 @@
|
|||
# language: en
|
||||
@emr @client @elasticmapreduce
|
||||
Feature: Amazon EMR
|
||||
|
||||
Scenario: Making a request
|
||||
When I call the "ListClusters" API
|
||||
Then the value at "Clusters" should be a list
|
||||
|
||||
Scenario: Handling errors
|
||||
When I attempt to call the "DescribeCluster" API with:
|
||||
| ClusterId | fake_cluster |
|
||||
Then I expect the response error code to be "InvalidRequestException"
|
||||
And I expect the response error message to include:
|
||||
"""
|
||||
Cluster id 'fake_cluster' is not valid.
|
||||
"""
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue