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  }