forked from TrueCloudLab/rclone
Switch to using the dep tool and update all the dependencies
This commit is contained in:
parent
5135ff73cb
commit
98c2d2c41b
5321 changed files with 4483201 additions and 5922 deletions
122
vendor/github.com/aws/aws-sdk-go/awstesting/performance/benchmarks.go
generated
vendored
Normal file
122
vendor/github.com/aws/aws-sdk-go/awstesting/performance/benchmarks.go
generated
vendored
Normal file
|
@ -0,0 +1,122 @@
|
|||
// +build integration
|
||||
|
||||
package performance
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/awstesting/mock"
|
||||
"github.com/gucumber/gucumber"
|
||||
)
|
||||
|
||||
// mapCreateClients allows for the creation of clients
|
||||
func mapCreateClients() {
|
||||
clientFns := []func(){}
|
||||
for _, c := range clients {
|
||||
clientFns = append(clientFns, func() { c.Call([]reflect.Value{reflect.ValueOf(mock.Session)}) })
|
||||
}
|
||||
|
||||
gucumber.World["services"] = clientFns
|
||||
}
|
||||
|
||||
func buildAnArrayOfClients() {
|
||||
methods := []reflect.Value{}
|
||||
params := [][]reflect.Value{}
|
||||
|
||||
for _, c := range clients {
|
||||
method, param, err := findAndGetMethod(c.Call([]reflect.Value{reflect.ValueOf(mock.Session)}))
|
||||
if err == nil {
|
||||
methods = append(methods, method)
|
||||
params = append(params, param)
|
||||
}
|
||||
}
|
||||
|
||||
fns := []func(){}
|
||||
for i := 0; i < len(methods); i++ {
|
||||
m := methods[i]
|
||||
p := params[i]
|
||||
f := func() {
|
||||
reqs := m.Call(p)
|
||||
resp := reqs[0].Interface().(*request.Request).Send()
|
||||
fmt.Println(resp)
|
||||
}
|
||||
fns = append(fns, f)
|
||||
}
|
||||
gucumber.World["clientFns"] = fns
|
||||
}
|
||||
|
||||
// findAndGetMethod will grab the method, params to be passed to the method, and an error.
|
||||
// The method that is found, is a method that doesn't have any required input
|
||||
func findAndGetMethod(client interface{}) (reflect.Value, []reflect.Value, error) {
|
||||
v := reflect.ValueOf(client).Type()
|
||||
n := v.NumMethod()
|
||||
|
||||
outer:
|
||||
for i := 0; i < n; i++ {
|
||||
method := v.Method(i)
|
||||
if method.Type.NumIn() != 2 || strings.HasSuffix(method.Name, "Request") {
|
||||
continue
|
||||
}
|
||||
param := reflect.New(method.Type.In(1).Elem())
|
||||
for j := 0; j < param.Elem().NumField(); j++ {
|
||||
field := param.Elem().Type().Field(j)
|
||||
req := field.Tag.Get("required")
|
||||
|
||||
if req == "true" {
|
||||
continue outer
|
||||
}
|
||||
}
|
||||
|
||||
params := []reflect.Value{reflect.ValueOf(client), param}
|
||||
return method.Func, params, nil
|
||||
}
|
||||
|
||||
return reflect.Value{}, nil, errors.New("No method found")
|
||||
}
|
||||
|
||||
// benchmarkTask takes a unique key to write to the logger with the benchmark
|
||||
// result's data
|
||||
func benchmarkTask(key string, fns []func(), i1 int) error {
|
||||
gucumber.World["error"] = nil
|
||||
memStatStart := &runtime.MemStats{}
|
||||
runtime.ReadMemStats(memStatStart)
|
||||
|
||||
results := testing.Benchmark(func(b *testing.B) {
|
||||
for _, f := range fns {
|
||||
for i := 0; i < i1; i++ {
|
||||
f()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
results.N = i1
|
||||
memStatEnd := &runtime.MemStats{}
|
||||
runtime.ReadMemStats(memStatEnd)
|
||||
l, err := newBenchmarkLogger("stdout")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
l.log(key, results)
|
||||
|
||||
toDynamodb := os.Getenv("AWS_TESTING_LOG_RESULTS") == "true"
|
||||
if toDynamodb {
|
||||
l, err := newBenchmarkLogger("dynamodb")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
l.log(key+"_start_benchmarks", memStatStart)
|
||||
l.log(key+"_end_benchmarks", memStatEnd)
|
||||
}
|
||||
|
||||
if memStatStart.Alloc < memStatEnd.Alloc {
|
||||
return errors.New("Leaked memory")
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue