github.com/aavshr/aws-sdk-go@v1.41.3/aws/request/handlers_test.go (about) 1 package request_test 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/aavshr/aws-sdk-go/aws" 8 "github.com/aavshr/aws-sdk-go/aws/request" 9 "github.com/aavshr/aws-sdk-go/awstesting/unit" 10 "github.com/aavshr/aws-sdk-go/service/s3" 11 ) 12 13 func TestHandlerList(t *testing.T) { 14 s := "" 15 r := &request.Request{} 16 l := request.HandlerList{} 17 l.PushBack(func(r *request.Request) { 18 s += "a" 19 r.Data = s 20 }) 21 l.Run(r) 22 if e, a := "a", s; e != a { 23 t.Errorf("expect %q update got %q", e, a) 24 } 25 if e, a := "a", r.Data.(string); e != a { 26 t.Errorf("expect %q data update got %q", e, a) 27 } 28 } 29 30 func TestMultipleHandlers(t *testing.T) { 31 r := &request.Request{} 32 l := request.HandlerList{} 33 l.PushBack(func(r *request.Request) { r.Data = nil }) 34 l.PushFront(func(r *request.Request) { r.Data = aws.Bool(true) }) 35 l.Run(r) 36 if r.Data != nil { 37 t.Error("Expected handler to execute") 38 } 39 } 40 41 func TestNamedHandlers(t *testing.T) { 42 l := request.HandlerList{} 43 named := request.NamedHandler{Name: "Name", Fn: func(r *request.Request) {}} 44 named2 := request.NamedHandler{Name: "NotName", Fn: func(r *request.Request) {}} 45 l.PushBackNamed(named) 46 l.PushBackNamed(named) 47 l.PushBackNamed(named2) 48 l.PushBack(func(r *request.Request) {}) 49 if e, a := 4, l.Len(); e != a { 50 t.Errorf("expect %d list length, got %d", e, a) 51 } 52 l.Remove(named) 53 if e, a := 2, l.Len(); e != a { 54 t.Errorf("expect %d list length, got %d", e, a) 55 } 56 } 57 58 func TestSwapHandlers(t *testing.T) { 59 firstHandlerCalled := 0 60 swappedOutHandlerCalled := 0 61 swappedInHandlerCalled := 0 62 63 l := request.HandlerList{} 64 named := request.NamedHandler{Name: "Name", Fn: func(r *request.Request) { 65 firstHandlerCalled++ 66 }} 67 named2 := request.NamedHandler{Name: "SwapOutName", Fn: func(r *request.Request) { 68 swappedOutHandlerCalled++ 69 }} 70 l.PushBackNamed(named) 71 l.PushBackNamed(named2) 72 l.PushBackNamed(named) 73 74 l.SwapNamed(request.NamedHandler{Name: "SwapOutName", Fn: func(r *request.Request) { 75 swappedInHandlerCalled++ 76 }}) 77 78 l.Run(&request.Request{}) 79 80 if e, a := 2, firstHandlerCalled; e != a { 81 t.Errorf("expect first handler to be called %d, was called %d times", e, a) 82 } 83 if n := swappedOutHandlerCalled; n != 0 { 84 t.Errorf("expect swapped out handler to not be called, was called %d times", n) 85 } 86 if e, a := 1, swappedInHandlerCalled; e != a { 87 t.Errorf("expect swapped in handler to be called %d, was called %d times", e, a) 88 } 89 } 90 91 func TestSetBackNamed_Exists(t *testing.T) { 92 firstHandlerCalled := 0 93 swappedOutHandlerCalled := 0 94 swappedInHandlerCalled := 0 95 96 l := request.HandlerList{} 97 named := request.NamedHandler{Name: "Name", Fn: func(r *request.Request) { 98 firstHandlerCalled++ 99 }} 100 named2 := request.NamedHandler{Name: "SwapOutName", Fn: func(r *request.Request) { 101 swappedOutHandlerCalled++ 102 }} 103 l.PushBackNamed(named) 104 l.PushBackNamed(named2) 105 106 l.SetBackNamed(request.NamedHandler{Name: "SwapOutName", Fn: func(r *request.Request) { 107 swappedInHandlerCalled++ 108 }}) 109 110 l.Run(&request.Request{}) 111 112 if e, a := 1, firstHandlerCalled; e != a { 113 t.Errorf("expect first handler to be called %d, was called %d times", e, a) 114 } 115 if n := swappedOutHandlerCalled; n != 0 { 116 t.Errorf("expect swapped out handler to not be called, was called %d times", n) 117 } 118 if e, a := 1, swappedInHandlerCalled; e != a { 119 t.Errorf("expect swapped in handler to be called %d, was called %d times", e, a) 120 } 121 } 122 123 func TestSetBackNamed_NotExists(t *testing.T) { 124 firstHandlerCalled := 0 125 secondHandlerCalled := 0 126 swappedInHandlerCalled := 0 127 128 l := request.HandlerList{} 129 named := request.NamedHandler{Name: "Name", Fn: func(r *request.Request) { 130 firstHandlerCalled++ 131 }} 132 named2 := request.NamedHandler{Name: "OtherName", Fn: func(r *request.Request) { 133 secondHandlerCalled++ 134 }} 135 l.PushBackNamed(named) 136 l.PushBackNamed(named2) 137 138 l.SetBackNamed(request.NamedHandler{Name: "SwapOutName", Fn: func(r *request.Request) { 139 swappedInHandlerCalled++ 140 }}) 141 142 l.Run(&request.Request{}) 143 144 if e, a := 1, firstHandlerCalled; e != a { 145 t.Errorf("expect first handler to be called %d, was called %d times", e, a) 146 } 147 if e, a := 1, secondHandlerCalled; e != a { 148 t.Errorf("expect second handler to be called %d, was called %d times", e, a) 149 } 150 if e, a := 1, swappedInHandlerCalled; e != a { 151 t.Errorf("expect swapped in handler to be called %d, was called %d times", e, a) 152 } 153 } 154 155 func TestLoggedHandlers(t *testing.T) { 156 expectedHandlers := []string{"name1", "name2"} 157 l := request.HandlerList{} 158 loggedHandlers := []string{} 159 l.AfterEachFn = request.HandlerListLogItem 160 cfg := aws.Config{Logger: aws.LoggerFunc(func(args ...interface{}) { 161 loggedHandlers = append(loggedHandlers, args[2].(string)) 162 })} 163 164 named1 := request.NamedHandler{Name: "name1", Fn: func(r *request.Request) {}} 165 named2 := request.NamedHandler{Name: "name2", Fn: func(r *request.Request) {}} 166 l.PushBackNamed(named1) 167 l.PushBackNamed(named2) 168 l.Run(&request.Request{Config: cfg}) 169 170 if !reflect.DeepEqual(expectedHandlers, loggedHandlers) { 171 t.Errorf("expect handlers executed %v to match logged handlers, %v", 172 expectedHandlers, loggedHandlers) 173 } 174 } 175 176 func TestStopHandlers(t *testing.T) { 177 l := request.HandlerList{} 178 stopAt := 1 179 l.AfterEachFn = func(item request.HandlerListRunItem) bool { 180 return item.Index != stopAt 181 } 182 183 called := 0 184 l.PushBackNamed(request.NamedHandler{Name: "name1", Fn: func(r *request.Request) { 185 called++ 186 }}) 187 l.PushBackNamed(request.NamedHandler{Name: "name2", Fn: func(r *request.Request) { 188 called++ 189 }}) 190 l.PushBackNamed(request.NamedHandler{Name: "name3", Fn: func(r *request.Request) { 191 t.Fatalf("third handler should not be called") 192 }}) 193 l.Run(&request.Request{}) 194 195 if e, a := 2, called; e != a { 196 t.Errorf("expect %d handlers called, got %d", e, a) 197 } 198 } 199 200 func BenchmarkNewRequest(b *testing.B) { 201 svc := s3.New(unit.Session) 202 203 for i := 0; i < b.N; i++ { 204 r, _ := svc.GetObjectRequest(nil) 205 if r == nil { 206 b.Fatal("r should not be nil") 207 } 208 } 209 } 210 211 func BenchmarkHandlersCopy(b *testing.B) { 212 handlers := request.Handlers{} 213 214 handlers.Validate.PushBack(func(r *request.Request) {}) 215 handlers.Validate.PushBack(func(r *request.Request) {}) 216 handlers.Build.PushBack(func(r *request.Request) {}) 217 handlers.Build.PushBack(func(r *request.Request) {}) 218 handlers.Send.PushBack(func(r *request.Request) {}) 219 handlers.Send.PushBack(func(r *request.Request) {}) 220 handlers.Unmarshal.PushBack(func(r *request.Request) {}) 221 handlers.Unmarshal.PushBack(func(r *request.Request) {}) 222 223 for i := 0; i < b.N; i++ { 224 h := handlers.Copy() 225 if e, a := handlers.Validate.Len(), h.Validate.Len(); e != a { 226 b.Fatalf("expected %d handlers got %d", e, a) 227 } 228 } 229 } 230 231 func BenchmarkHandlersPushBack(b *testing.B) { 232 handlers := request.Handlers{} 233 234 for i := 0; i < b.N; i++ { 235 h := handlers.Copy() 236 h.Validate.PushBack(func(r *request.Request) {}) 237 h.Validate.PushBack(func(r *request.Request) {}) 238 h.Validate.PushBack(func(r *request.Request) {}) 239 h.Validate.PushBack(func(r *request.Request) {}) 240 } 241 } 242 243 func BenchmarkHandlersPushFront(b *testing.B) { 244 handlers := request.Handlers{} 245 246 for i := 0; i < b.N; i++ { 247 h := handlers.Copy() 248 h.Validate.PushFront(func(r *request.Request) {}) 249 h.Validate.PushFront(func(r *request.Request) {}) 250 h.Validate.PushFront(func(r *request.Request) {}) 251 h.Validate.PushFront(func(r *request.Request) {}) 252 } 253 } 254 255 func BenchmarkHandlersClear(b *testing.B) { 256 handlers := request.Handlers{} 257 258 for i := 0; i < b.N; i++ { 259 h := handlers.Copy() 260 h.Validate.PushFront(func(r *request.Request) {}) 261 h.Validate.PushFront(func(r *request.Request) {}) 262 h.Validate.PushFront(func(r *request.Request) {}) 263 h.Validate.PushFront(func(r *request.Request) {}) 264 h.Clear() 265 } 266 }