github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/daemon/logger/awslogs/cwlogsiface_mock_test.go (about) 1 package awslogs // import "github.com/Prakhar-Agarwal-byte/moby/daemon/logger/awslogs" 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/aws/aws-sdk-go-v2/feature/ec2/imds" 8 "github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs" 9 ) 10 11 type mockClient struct { 12 createLogGroupFunc func(context.Context, *cloudwatchlogs.CreateLogGroupInput, ...func(*cloudwatchlogs.Options)) (*cloudwatchlogs.CreateLogGroupOutput, error) 13 createLogStreamFunc func(context.Context, *cloudwatchlogs.CreateLogStreamInput, ...func(*cloudwatchlogs.Options)) (*cloudwatchlogs.CreateLogStreamOutput, error) 14 putLogEventsFunc func(context.Context, *cloudwatchlogs.PutLogEventsInput, ...func(*cloudwatchlogs.Options)) (*cloudwatchlogs.PutLogEventsOutput, error) 15 } 16 17 func (m *mockClient) CreateLogGroup(ctx context.Context, input *cloudwatchlogs.CreateLogGroupInput, opts ...func(*cloudwatchlogs.Options)) (*cloudwatchlogs.CreateLogGroupOutput, error) { 18 return m.createLogGroupFunc(ctx, input, opts...) 19 } 20 21 func (m *mockClient) CreateLogStream(ctx context.Context, input *cloudwatchlogs.CreateLogStreamInput, opts ...func(*cloudwatchlogs.Options)) (*cloudwatchlogs.CreateLogStreamOutput, error) { 22 return m.createLogStreamFunc(ctx, input, opts...) 23 } 24 25 func (m *mockClient) PutLogEvents(ctx context.Context, input *cloudwatchlogs.PutLogEventsInput, opts ...func(*cloudwatchlogs.Options)) (*cloudwatchlogs.PutLogEventsOutput, error) { 26 if err := checkPutLogEventsConstraints(input); err != nil { 27 return nil, err 28 } 29 return m.putLogEventsFunc(ctx, input, opts...) 30 } 31 32 func checkPutLogEventsConstraints(input *cloudwatchlogs.PutLogEventsInput) error { 33 events := input.LogEvents 34 // Checked enforced limits in mock 35 totalBytes := 0 36 for _, evt := range events { 37 if evt.Message == nil { 38 continue 39 } 40 eventBytes := len([]byte(*evt.Message)) 41 if eventBytes > maximumBytesPerEvent { 42 // exceeded per event message size limits 43 return fmt.Errorf("maximum bytes per event exceeded: Event too large %d, max allowed: %d", eventBytes, maximumBytesPerEvent) 44 } 45 // total event bytes including overhead 46 totalBytes += eventBytes + perEventBytes 47 } 48 49 if totalBytes > maximumBytesPerPut { 50 // exceeded per put maximum size limit 51 return fmt.Errorf("maximum bytes per put exceeded: Upload too large %d, max allowed: %d", totalBytes, maximumBytesPerPut) 52 } 53 return nil 54 } 55 56 type mockmetadataclient struct { 57 regionResult chan *regionResult 58 } 59 60 type regionResult struct { 61 successResult string 62 errorResult error 63 } 64 65 func newMockMetadataClient() *mockmetadataclient { 66 return &mockmetadataclient{ 67 regionResult: make(chan *regionResult, 1), 68 } 69 } 70 71 func (m *mockmetadataclient) GetRegion(context.Context, *imds.GetRegionInput, ...func(*imds.Options)) (*imds.GetRegionOutput, error) { 72 output := <-m.regionResult 73 err := output.errorResult 74 if err != nil { 75 return nil, err 76 } 77 return &imds.GetRegionOutput{Region: output.successResult}, err 78 }