157 lines
4.3 KiB
Go
157 lines
4.3 KiB
Go
package request_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
"github.com/aws/aws-sdk-go/aws/request"
|
|
"github.com/aws/aws-sdk-go/awstesting/unit"
|
|
"github.com/aws/aws-sdk-go/service/s3"
|
|
)
|
|
|
|
func TestHandlerList(t *testing.T) {
|
|
s := ""
|
|
r := &request.Request{}
|
|
l := request.HandlerList{}
|
|
l.PushBack(func(r *request.Request) {
|
|
s += "a"
|
|
r.Data = s
|
|
})
|
|
l.Run(r)
|
|
assert.Equal(t, "a", s)
|
|
assert.Equal(t, "a", r.Data)
|
|
}
|
|
|
|
func TestMultipleHandlers(t *testing.T) {
|
|
r := &request.Request{}
|
|
l := request.HandlerList{}
|
|
l.PushBack(func(r *request.Request) { r.Data = nil })
|
|
l.PushFront(func(r *request.Request) { r.Data = aws.Bool(true) })
|
|
l.Run(r)
|
|
if r.Data != nil {
|
|
t.Error("Expected handler to execute")
|
|
}
|
|
}
|
|
|
|
func TestNamedHandlers(t *testing.T) {
|
|
l := request.HandlerList{}
|
|
named := request.NamedHandler{Name: "Name", Fn: func(r *request.Request) {}}
|
|
named2 := request.NamedHandler{Name: "NotName", Fn: func(r *request.Request) {}}
|
|
l.PushBackNamed(named)
|
|
l.PushBackNamed(named)
|
|
l.PushBackNamed(named2)
|
|
l.PushBack(func(r *request.Request) {})
|
|
assert.Equal(t, 4, l.Len())
|
|
l.Remove(named)
|
|
assert.Equal(t, 2, l.Len())
|
|
}
|
|
|
|
func TestLoggedHandlers(t *testing.T) {
|
|
expectedHandlers := []string{"name1", "name2"}
|
|
l := request.HandlerList{}
|
|
loggedHandlers := []string{}
|
|
l.AfterEachFn = request.HandlerListLogItem
|
|
cfg := aws.Config{Logger: aws.LoggerFunc(func(args ...interface{}) {
|
|
loggedHandlers = append(loggedHandlers, args[2].(string))
|
|
})}
|
|
|
|
named1 := request.NamedHandler{Name: "name1", Fn: func(r *request.Request) {}}
|
|
named2 := request.NamedHandler{Name: "name2", Fn: func(r *request.Request) {}}
|
|
l.PushBackNamed(named1)
|
|
l.PushBackNamed(named2)
|
|
l.Run(&request.Request{Config: cfg})
|
|
|
|
assert.Equal(t, expectedHandlers, loggedHandlers)
|
|
}
|
|
|
|
func TestStopHandlers(t *testing.T) {
|
|
l := request.HandlerList{}
|
|
stopAt := 1
|
|
l.AfterEachFn = func(item request.HandlerListRunItem) bool {
|
|
return item.Index != stopAt
|
|
}
|
|
|
|
called := 0
|
|
l.PushBackNamed(request.NamedHandler{Name: "name1", Fn: func(r *request.Request) {
|
|
called++
|
|
}})
|
|
l.PushBackNamed(request.NamedHandler{Name: "name2", Fn: func(r *request.Request) {
|
|
called++
|
|
}})
|
|
l.PushBackNamed(request.NamedHandler{Name: "name3", Fn: func(r *request.Request) {
|
|
assert.Fail(t, "third handler should not be called")
|
|
}})
|
|
l.Run(&request.Request{})
|
|
|
|
assert.Equal(t, 2, called, "Expect only two handlers to be called")
|
|
}
|
|
|
|
func BenchmarkNewRequest(b *testing.B) {
|
|
svc := s3.New(unit.Session)
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
r, _ := svc.GetObjectRequest(nil)
|
|
if r == nil {
|
|
b.Fatal("r should not be nil")
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkHandlersCopy(b *testing.B) {
|
|
handlers := request.Handlers{}
|
|
|
|
handlers.Validate.PushBack(func(r *request.Request) {})
|
|
handlers.Validate.PushBack(func(r *request.Request) {})
|
|
handlers.Build.PushBack(func(r *request.Request) {})
|
|
handlers.Build.PushBack(func(r *request.Request) {})
|
|
handlers.Send.PushBack(func(r *request.Request) {})
|
|
handlers.Send.PushBack(func(r *request.Request) {})
|
|
handlers.Unmarshal.PushBack(func(r *request.Request) {})
|
|
handlers.Unmarshal.PushBack(func(r *request.Request) {})
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
h := handlers.Copy()
|
|
if e, a := handlers.Validate.Len(), h.Validate.Len(); e != a {
|
|
b.Fatalf("expected %d handlers got %d", e, a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkHandlersPushBack(b *testing.B) {
|
|
handlers := request.Handlers{}
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
h := handlers.Copy()
|
|
h.Validate.PushBack(func(r *request.Request) {})
|
|
h.Validate.PushBack(func(r *request.Request) {})
|
|
h.Validate.PushBack(func(r *request.Request) {})
|
|
h.Validate.PushBack(func(r *request.Request) {})
|
|
}
|
|
}
|
|
|
|
func BenchmarkHandlersPushFront(b *testing.B) {
|
|
handlers := request.Handlers{}
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
h := handlers.Copy()
|
|
h.Validate.PushFront(func(r *request.Request) {})
|
|
h.Validate.PushFront(func(r *request.Request) {})
|
|
h.Validate.PushFront(func(r *request.Request) {})
|
|
h.Validate.PushFront(func(r *request.Request) {})
|
|
}
|
|
}
|
|
|
|
func BenchmarkHandlersClear(b *testing.B) {
|
|
handlers := request.Handlers{}
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
h := handlers.Copy()
|
|
h.Validate.PushFront(func(r *request.Request) {})
|
|
h.Validate.PushFront(func(r *request.Request) {})
|
|
h.Validate.PushFront(func(r *request.Request) {})
|
|
h.Validate.PushFront(func(r *request.Request) {})
|
|
h.Clear()
|
|
}
|
|
}
|