github.com/aavshr/aws-sdk-go@v1.41.3/aws/csm/reporter_internal_test.go (about)

     1  package csm
     2  
     3  import (
     4  	"net/http"
     5  	"testing"
     6  
     7  	"github.com/aavshr/aws-sdk-go/aws"
     8  	"github.com/aavshr/aws-sdk-go/aws/client"
     9  	"github.com/aavshr/aws-sdk-go/aws/client/metadata"
    10  	"github.com/aavshr/aws-sdk-go/aws/credentials"
    11  	"github.com/aavshr/aws-sdk-go/aws/defaults"
    12  	"github.com/aavshr/aws-sdk-go/aws/request"
    13  )
    14  
    15  func TestMaxRetriesExceeded(t *testing.T) {
    16  	md := metadata.ClientInfo{
    17  		Endpoint: "http://127.0.0.1",
    18  	}
    19  
    20  	cfg := aws.Config{
    21  		Region:      aws.String("foo"),
    22  		Credentials: credentials.NewStaticCredentials("", "", ""),
    23  	}
    24  
    25  	op := &request.Operation{}
    26  	cases := []struct {
    27  		name                    string
    28  		httpStatusCode          int
    29  		expectedMaxRetriesValue int
    30  		expectedMetrics         int
    31  	}{
    32  		{
    33  			name:                    "max retry reached",
    34  			httpStatusCode:          http.StatusBadGateway,
    35  			expectedMaxRetriesValue: 1,
    36  		},
    37  		{
    38  			name:                    "status ok",
    39  			httpStatusCode:          http.StatusOK,
    40  			expectedMaxRetriesValue: 0,
    41  		},
    42  	}
    43  
    44  	for _, c := range cases {
    45  		r := request.New(cfg, md, defaults.Handlers(), client.DefaultRetryer{NumMaxRetries: 2}, op, nil, nil)
    46  		reporter := newReporter("", "")
    47  		r.Handlers.Send.Clear()
    48  		reporter.InjectHandlers(&r.Handlers)
    49  
    50  		r.Handlers.Send.PushBack(func(r *request.Request) {
    51  			r.HTTPResponse = &http.Response{
    52  				StatusCode: c.httpStatusCode,
    53  			}
    54  		})
    55  		r.Send()
    56  
    57  		for {
    58  			m := <-reporter.metricsCh.ch
    59  
    60  			if *m.Type != "ApiCall" {
    61  				// ignore non-ApiCall metrics since MaxRetriesExceeded is only on ApiCall events
    62  				continue
    63  			}
    64  
    65  			if val := *m.MaxRetriesExceeded; val != c.expectedMaxRetriesValue {
    66  				t.Errorf("%s: expected %d, but received %d", c.name, c.expectedMaxRetriesValue, val)
    67  			}
    68  
    69  			break
    70  		}
    71  	}
    72  }