File: reporter_internal_test.go

package info (click to toggle)
golang-github-aws-aws-sdk-go 1.16.18%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, buster-backports, experimental
  • size: 93,084 kB
  • sloc: ruby: 193; makefile: 174; xml: 11
file content (72 lines) | stat: -rw-r--r-- 1,705 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package csm

import (
	"net/http"
	"testing"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/client"
	"github.com/aws/aws-sdk-go/aws/client/metadata"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/defaults"
	"github.com/aws/aws-sdk-go/aws/request"
)

func TestMaxRetriesExceeded(t *testing.T) {
	md := metadata.ClientInfo{
		Endpoint: "http://127.0.0.1",
	}

	cfg := aws.Config{
		Region:      aws.String("foo"),
		Credentials: credentials.NewStaticCredentials("", "", ""),
	}

	op := &request.Operation{}
	cases := []struct {
		name                    string
		httpStatusCode          int
		expectedMaxRetriesValue int
		expectedMetrics         int
	}{
		{
			name:                    "max retry reached",
			httpStatusCode:          http.StatusBadGateway,
			expectedMaxRetriesValue: 1,
		},
		{
			name:                    "status ok",
			httpStatusCode:          http.StatusOK,
			expectedMaxRetriesValue: 0,
		},
	}

	for _, c := range cases {
		r := request.New(cfg, md, defaults.Handlers(), client.DefaultRetryer{NumMaxRetries: 2}, op, nil, nil)
		reporter := newReporter("", "")
		r.Handlers.Send.Clear()
		reporter.InjectHandlers(&r.Handlers)

		r.Handlers.Send.PushBack(func(r *request.Request) {
			r.HTTPResponse = &http.Response{
				StatusCode: c.httpStatusCode,
			}
		})
		r.Send()

		for {
			m := <-reporter.metricsCh.ch

			if *m.Type != "ApiCall" {
				// ignore non-ApiCall metrics since MaxRetriesExceeded is only on ApiCall events
				continue
			}

			if val := *m.MaxRetriesExceeded; val != c.expectedMaxRetriesValue {
				t.Errorf("%s: expected %d, but received %d", c.name, c.expectedMaxRetriesValue, val)
			}

			break
		}
	}
}