ROOTPLOIT
Server: LiteSpeed
System: Linux in-mum-web1878.main-hosting.eu 5.14.0-570.21.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 11 07:22:35 EDT 2025 x86_64
User: u435929562 (435929562)
PHP: 7.4.33
Disabled: system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Upload Files
File: //opt/go/pkg/mod/github.com/aws/[email protected]/aws/csm/reporter_internal_test.go
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
		}
	}
}