// Code generated by smithy-go-codegen DO NOT EDIT.

//go:build response_snapshot

package computeoptimizer

import (
	"bufio"
	"bytes"
	"context"
	"errors"
	"fmt"
	"github.com/aws/aws-sdk-go-v2/service/computeoptimizer/types"
	smithyendpoints "github.com/aws/smithy-go/endpoints"
	"github.com/aws/smithy-go/middleware"
	"github.com/aws/smithy-go/ptr"
	smithytesting "github.com/aws/smithy-go/testing"
	smithyhttp "github.com/aws/smithy-go/transport/http"
	"io"
	"io/fs"
	"net/http"
	"net/url"
	"os"
	"strconv"
	"strings"
	"testing"
	"time"
)

const serdeRespSSPrefix = "response_snapshot"

func serdeRespSSPath(op string) string {
	return fmt.Sprintf("%s/%s.snap", serdeRespSSPrefix, op)
}

// serdeRespReadSnapshot parses a frozen wire response fixture: a status-code
// line, HTTP headers, a blank line, then the raw body.
func serdeRespReadSnapshot(op string) (int, http.Header, []byte, error) {
	raw, err := os.ReadFile(serdeRespSSPath(op))
	if err != nil {
		return 0, nil, nil, err
	}

	r := bufio.NewReader(bytes.NewReader(raw))
	statusLine, err := r.ReadString('\n')
	if err != nil {
		return 0, nil, nil, fmt.Errorf("read status line: %w", err)
	}
	status, err := strconv.Atoi(strings.TrimSpace(statusLine))
	if err != nil {
		return 0, nil, nil, fmt.Errorf("parse status: %w", err)
	}

	header := http.Header{}
	for {
		line, err := r.ReadString('\n')
		if err != nil && err != io.EOF {
			return 0, nil, nil, err
		}
		trimmed := strings.TrimRight(line, "\r\n")
		if trimmed == "" {
			break
		}
		k, v, ok := strings.Cut(trimmed, ": ")
		if !ok {
			return 0, nil, nil, fmt.Errorf("malformed header %q", trimmed)
		}
		header.Add(k, v)
		if err == io.EOF {
			break
		}
	}

	body, err := io.ReadAll(r)
	if err != nil {
		return 0, nil, nil, err
	}
	return status, header, body, nil
}

type serdeRespEndpointResolver struct{}

func (*serdeRespEndpointResolver) ResolveEndpoint(ctx context.Context, params EndpointParameters) (smithyendpoints.Endpoint, error) {
	return smithyendpoints.Endpoint{URI: url.URL{Scheme: "https", Host: "test.example.com"}}, nil
}

func serdeRespClient(status int, header http.Header, body []byte) *Client {
	return New(Options{
		Region: "us-east-1",
		HTTPClient: smithyhttp.ClientDoFunc(func(req *http.Request) (*http.Response, error) {
			resp := &http.Response{StatusCode: status, Header: header, Request: req}
			if len(body) > 0 {
				resp.ContentLength = int64(len(body))
				resp.Body = io.NopCloser(bytes.NewReader(body))
			} else {
				resp.Body = http.NoBody
			}
			return resp, nil
		}),
		EndpointResolverV2: &serdeRespEndpointResolver{},
		APIOptions: []func(*middleware.Stack) error{
			func(s *middleware.Stack) error {
				s.Finalize.Clear()
				s.Initialize.Remove("OperationInputValidation")
				return nil
			},
		},
	})
}
func TestCheckResponseSnapshot_DeleteRecommendationPreferences(t *testing.T) {
	want := &DeleteRecommendationPreferencesOutput{}
	status, header, body, err := serdeRespReadSnapshot("DeleteRecommendationPreferences.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "DeleteRecommendationPreferences.response", err)
	}
}

func TestCheckResponseSnapshot_DescribeRecommendationExportJobs(t *testing.T) {
	want := &DescribeRecommendationExportJobsOutput{
		RecommendationExportJobs: []types.RecommendationExportJob{
			{
				JobId: ptr.String("__JobId__"),
				Destination: &types.ExportDestination{
					S3: &types.S3Destination{
						Bucket:      ptr.String("__Bucket__"),
						Key:         ptr.String("__Key__"),
						MetadataKey: ptr.String("__MetadataKey__"),
					},
				},
				ResourceType:         types.ResourceType("Ec2Instance"),
				Status:               types.JobStatus("Queued"),
				CreationTimestamp:    ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				LastUpdatedTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				FailureReason:        ptr.String("__FailureReason__"),
			},
			{
				JobId: ptr.String("__JobId__"),
				Destination: &types.ExportDestination{
					S3: &types.S3Destination{
						Bucket:      ptr.String("__Bucket__"),
						Key:         ptr.String("__Key__"),
						MetadataKey: ptr.String("__MetadataKey__"),
					},
				},
				ResourceType:         types.ResourceType("Ec2Instance"),
				Status:               types.JobStatus("Queued"),
				CreationTimestamp:    ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				LastUpdatedTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				FailureReason:        ptr.String("__FailureReason__"),
			},
		},
		NextToken: ptr.String("__NextToken__"),
	}
	status, header, body, err := serdeRespReadSnapshot("DescribeRecommendationExportJobs.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.DescribeRecommendationExportJobs(context.Background(), &DescribeRecommendationExportJobsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "DescribeRecommendationExportJobs.response", err)
	}
}

func TestCheckResponseSnapshot_ExportAutoScalingGroupRecommendations(t *testing.T) {
	want := &ExportAutoScalingGroupRecommendationsOutput{
		JobId: ptr.String("__JobId__"),
		S3Destination: &types.S3Destination{
			Bucket:      ptr.String("__Bucket__"),
			Key:         ptr.String("__Key__"),
			MetadataKey: ptr.String("__MetadataKey__"),
		},
	}
	status, header, body, err := serdeRespReadSnapshot("ExportAutoScalingGroupRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.ExportAutoScalingGroupRecommendations(context.Background(), &ExportAutoScalingGroupRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "ExportAutoScalingGroupRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_ExportEBSVolumeRecommendations(t *testing.T) {
	want := &ExportEBSVolumeRecommendationsOutput{
		JobId: ptr.String("__JobId__"),
		S3Destination: &types.S3Destination{
			Bucket:      ptr.String("__Bucket__"),
			Key:         ptr.String("__Key__"),
			MetadataKey: ptr.String("__MetadataKey__"),
		},
	}
	status, header, body, err := serdeRespReadSnapshot("ExportEBSVolumeRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.ExportEBSVolumeRecommendations(context.Background(), &ExportEBSVolumeRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "ExportEBSVolumeRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_ExportEC2InstanceRecommendations(t *testing.T) {
	want := &ExportEC2InstanceRecommendationsOutput{
		JobId: ptr.String("__JobId__"),
		S3Destination: &types.S3Destination{
			Bucket:      ptr.String("__Bucket__"),
			Key:         ptr.String("__Key__"),
			MetadataKey: ptr.String("__MetadataKey__"),
		},
	}
	status, header, body, err := serdeRespReadSnapshot("ExportEC2InstanceRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.ExportEC2InstanceRecommendations(context.Background(), &ExportEC2InstanceRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "ExportEC2InstanceRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_ExportECSServiceRecommendations(t *testing.T) {
	want := &ExportECSServiceRecommendationsOutput{
		JobId: ptr.String("__JobId__"),
		S3Destination: &types.S3Destination{
			Bucket:      ptr.String("__Bucket__"),
			Key:         ptr.String("__Key__"),
			MetadataKey: ptr.String("__MetadataKey__"),
		},
	}
	status, header, body, err := serdeRespReadSnapshot("ExportECSServiceRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.ExportECSServiceRecommendations(context.Background(), &ExportECSServiceRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "ExportECSServiceRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_ExportIdleRecommendations(t *testing.T) {
	want := &ExportIdleRecommendationsOutput{
		JobId: ptr.String("__JobId__"),
		S3Destination: &types.S3Destination{
			Bucket:      ptr.String("__Bucket__"),
			Key:         ptr.String("__Key__"),
			MetadataKey: ptr.String("__MetadataKey__"),
		},
	}
	status, header, body, err := serdeRespReadSnapshot("ExportIdleRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.ExportIdleRecommendations(context.Background(), &ExportIdleRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "ExportIdleRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_ExportLambdaFunctionRecommendations(t *testing.T) {
	want := &ExportLambdaFunctionRecommendationsOutput{
		JobId: ptr.String("__JobId__"),
		S3Destination: &types.S3Destination{
			Bucket:      ptr.String("__Bucket__"),
			Key:         ptr.String("__Key__"),
			MetadataKey: ptr.String("__MetadataKey__"),
		},
	}
	status, header, body, err := serdeRespReadSnapshot("ExportLambdaFunctionRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.ExportLambdaFunctionRecommendations(context.Background(), &ExportLambdaFunctionRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "ExportLambdaFunctionRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_ExportLicenseRecommendations(t *testing.T) {
	want := &ExportLicenseRecommendationsOutput{
		JobId: ptr.String("__JobId__"),
		S3Destination: &types.S3Destination{
			Bucket:      ptr.String("__Bucket__"),
			Key:         ptr.String("__Key__"),
			MetadataKey: ptr.String("__MetadataKey__"),
		},
	}
	status, header, body, err := serdeRespReadSnapshot("ExportLicenseRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.ExportLicenseRecommendations(context.Background(), &ExportLicenseRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "ExportLicenseRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_ExportRDSDatabaseRecommendations(t *testing.T) {
	want := &ExportRDSDatabaseRecommendationsOutput{
		JobId: ptr.String("__JobId__"),
		S3Destination: &types.S3Destination{
			Bucket:      ptr.String("__Bucket__"),
			Key:         ptr.String("__Key__"),
			MetadataKey: ptr.String("__MetadataKey__"),
		},
	}
	status, header, body, err := serdeRespReadSnapshot("ExportRDSDatabaseRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.ExportRDSDatabaseRecommendations(context.Background(), &ExportRDSDatabaseRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "ExportRDSDatabaseRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetAutoScalingGroupRecommendations(t *testing.T) {
	want := &GetAutoScalingGroupRecommendationsOutput{
		NextToken: ptr.String("__NextToken__"),
		AutoScalingGroupRecommendations: []types.AutoScalingGroupRecommendation{
			{
				AccountId:            ptr.String("__AccountId__"),
				AutoScalingGroupArn:  ptr.String("__AutoScalingGroupArn__"),
				AutoScalingGroupName: ptr.String("__AutoScalingGroupName__"),
				Finding:              types.Finding("Underprovisioned"),
				UtilizationMetrics: []types.UtilizationMetric{
					{
						Name:      types.MetricName("Cpu"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.MetricName("Cpu"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookBackPeriodInDays: 1.0,
				CurrentConfiguration: &types.AutoScalingGroupConfiguration{
					DesiredCapacity:                          1,
					MinSize:                                  1,
					MaxSize:                                  1,
					InstanceType:                             ptr.String("__InstanceType__"),
					AllocationStrategy:                       types.AllocationStrategy("Prioritized"),
					EstimatedInstanceHourReductionPercentage: ptr.Float64(1.0),
					Type:                                     types.AsgType("SingleInstanceType"),
					MixedInstanceTypes: []string{
						"__Member__",
						"__Member__",
					},
				},
				CurrentInstanceGpuInfo: &types.GpuInfo{
					Gpus: []types.Gpu{
						{
							GpuCount:           1,
							GpuMemorySizeInMiB: 1,
						},
						{
							GpuCount:           1,
							GpuMemorySizeInMiB: 1,
						},
					},
				},
				RecommendationOptions: []types.AutoScalingGroupRecommendationOption{
					{
						Configuration: &types.AutoScalingGroupConfiguration{
							DesiredCapacity:                          1,
							MinSize:                                  1,
							MaxSize:                                  1,
							InstanceType:                             ptr.String("__InstanceType__"),
							AllocationStrategy:                       types.AllocationStrategy("Prioritized"),
							EstimatedInstanceHourReductionPercentage: ptr.Float64(1.0),
							Type:                                     types.AsgType("SingleInstanceType"),
							MixedInstanceTypes: []string{
								"__Member__",
								"__Member__",
							},
						},
						InstanceGpuInfo: &types.GpuInfo{
							Gpus: []types.Gpu{
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
							},
						},
						ProjectedUtilizationMetrics: []types.UtilizationMetric{
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.AutoScalingGroupSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.AutoScalingGroupEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						MigrationEffort: types.MigrationEffort("VeryLow"),
					},
					{
						Configuration: &types.AutoScalingGroupConfiguration{
							DesiredCapacity:                          1,
							MinSize:                                  1,
							MaxSize:                                  1,
							InstanceType:                             ptr.String("__InstanceType__"),
							AllocationStrategy:                       types.AllocationStrategy("Prioritized"),
							EstimatedInstanceHourReductionPercentage: ptr.Float64(1.0),
							Type:                                     types.AsgType("SingleInstanceType"),
							MixedInstanceTypes: []string{
								"__Member__",
								"__Member__",
							},
						},
						InstanceGpuInfo: &types.GpuInfo{
							Gpus: []types.Gpu{
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
							},
						},
						ProjectedUtilizationMetrics: []types.UtilizationMetric{
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.AutoScalingGroupSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.AutoScalingGroupEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						MigrationEffort: types.MigrationEffort("VeryLow"),
					},
				},
				LastRefreshTimestamp:   ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.EffectiveRecommendationPreferences{
					CpuVendorArchitectures: []types.CpuVendorArchitecture{
						types.CpuVendorArchitecture("AWS_ARM64"),
						types.CpuVendorArchitecture("AWS_ARM64"),
					},
					EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
					InferredWorkloadTypes:         types.InferredWorkloadTypesPreference("Active"),
					ExternalMetricsPreference: &types.ExternalMetricsPreference{
						Source: types.ExternalMetricsSource("Datadog"),
					},
					LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
					UtilizationPreferences: []types.UtilizationPreference{
						{
							MetricName: types.CustomizableMetricName("CpuUtilization"),
							MetricParameters: &types.CustomizableMetricParameters{
								Threshold: types.CustomizableMetricThreshold("P90"),
								Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
							},
						},
						{
							MetricName: types.CustomizableMetricName("CpuUtilization"),
							MetricParameters: &types.CustomizableMetricParameters{
								Threshold: types.CustomizableMetricThreshold("P90"),
								Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
							},
						},
					},
					PreferredResources: []types.EffectivePreferredResource{
						{
							Name: types.PreferredResourceName("Ec2InstanceTypes"),
							IncludeList: []string{
								"__Member__",
								"__Member__",
							},
							EffectiveIncludeList: []string{
								"__Member__",
								"__Member__",
							},
							ExcludeList: []string{
								"__Member__",
								"__Member__",
							},
						},
						{
							Name: types.PreferredResourceName("Ec2InstanceTypes"),
							IncludeList: []string{
								"__Member__",
								"__Member__",
							},
							EffectiveIncludeList: []string{
								"__Member__",
								"__Member__",
							},
							ExcludeList: []string{
								"__Member__",
								"__Member__",
							},
						},
					},
					SavingsEstimationMode: &types.InstanceSavingsEstimationMode{
						Source: types.InstanceSavingsEstimationModeSource("PublicPricing"),
					},
				},
				InferredWorkloadTypes: []types.InferredWorkloadType{
					types.InferredWorkloadType("AmazonEmr"),
					types.InferredWorkloadType("AmazonEmr"),
				},
			},
			{
				AccountId:            ptr.String("__AccountId__"),
				AutoScalingGroupArn:  ptr.String("__AutoScalingGroupArn__"),
				AutoScalingGroupName: ptr.String("__AutoScalingGroupName__"),
				Finding:              types.Finding("Underprovisioned"),
				UtilizationMetrics: []types.UtilizationMetric{
					{
						Name:      types.MetricName("Cpu"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.MetricName("Cpu"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookBackPeriodInDays: 1.0,
				CurrentConfiguration: &types.AutoScalingGroupConfiguration{
					DesiredCapacity:                          1,
					MinSize:                                  1,
					MaxSize:                                  1,
					InstanceType:                             ptr.String("__InstanceType__"),
					AllocationStrategy:                       types.AllocationStrategy("Prioritized"),
					EstimatedInstanceHourReductionPercentage: ptr.Float64(1.0),
					Type:                                     types.AsgType("SingleInstanceType"),
					MixedInstanceTypes: []string{
						"__Member__",
						"__Member__",
					},
				},
				CurrentInstanceGpuInfo: &types.GpuInfo{
					Gpus: []types.Gpu{
						{
							GpuCount:           1,
							GpuMemorySizeInMiB: 1,
						},
						{
							GpuCount:           1,
							GpuMemorySizeInMiB: 1,
						},
					},
				},
				RecommendationOptions: []types.AutoScalingGroupRecommendationOption{
					{
						Configuration: &types.AutoScalingGroupConfiguration{
							DesiredCapacity:                          1,
							MinSize:                                  1,
							MaxSize:                                  1,
							InstanceType:                             ptr.String("__InstanceType__"),
							AllocationStrategy:                       types.AllocationStrategy("Prioritized"),
							EstimatedInstanceHourReductionPercentage: ptr.Float64(1.0),
							Type:                                     types.AsgType("SingleInstanceType"),
							MixedInstanceTypes: []string{
								"__Member__",
								"__Member__",
							},
						},
						InstanceGpuInfo: &types.GpuInfo{
							Gpus: []types.Gpu{
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
							},
						},
						ProjectedUtilizationMetrics: []types.UtilizationMetric{
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.AutoScalingGroupSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.AutoScalingGroupEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						MigrationEffort: types.MigrationEffort("VeryLow"),
					},
					{
						Configuration: &types.AutoScalingGroupConfiguration{
							DesiredCapacity:                          1,
							MinSize:                                  1,
							MaxSize:                                  1,
							InstanceType:                             ptr.String("__InstanceType__"),
							AllocationStrategy:                       types.AllocationStrategy("Prioritized"),
							EstimatedInstanceHourReductionPercentage: ptr.Float64(1.0),
							Type:                                     types.AsgType("SingleInstanceType"),
							MixedInstanceTypes: []string{
								"__Member__",
								"__Member__",
							},
						},
						InstanceGpuInfo: &types.GpuInfo{
							Gpus: []types.Gpu{
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
							},
						},
						ProjectedUtilizationMetrics: []types.UtilizationMetric{
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.AutoScalingGroupSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.AutoScalingGroupEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						MigrationEffort: types.MigrationEffort("VeryLow"),
					},
				},
				LastRefreshTimestamp:   ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.EffectiveRecommendationPreferences{
					CpuVendorArchitectures: []types.CpuVendorArchitecture{
						types.CpuVendorArchitecture("AWS_ARM64"),
						types.CpuVendorArchitecture("AWS_ARM64"),
					},
					EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
					InferredWorkloadTypes:         types.InferredWorkloadTypesPreference("Active"),
					ExternalMetricsPreference: &types.ExternalMetricsPreference{
						Source: types.ExternalMetricsSource("Datadog"),
					},
					LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
					UtilizationPreferences: []types.UtilizationPreference{
						{
							MetricName: types.CustomizableMetricName("CpuUtilization"),
							MetricParameters: &types.CustomizableMetricParameters{
								Threshold: types.CustomizableMetricThreshold("P90"),
								Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
							},
						},
						{
							MetricName: types.CustomizableMetricName("CpuUtilization"),
							MetricParameters: &types.CustomizableMetricParameters{
								Threshold: types.CustomizableMetricThreshold("P90"),
								Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
							},
						},
					},
					PreferredResources: []types.EffectivePreferredResource{
						{
							Name: types.PreferredResourceName("Ec2InstanceTypes"),
							IncludeList: []string{
								"__Member__",
								"__Member__",
							},
							EffectiveIncludeList: []string{
								"__Member__",
								"__Member__",
							},
							ExcludeList: []string{
								"__Member__",
								"__Member__",
							},
						},
						{
							Name: types.PreferredResourceName("Ec2InstanceTypes"),
							IncludeList: []string{
								"__Member__",
								"__Member__",
							},
							EffectiveIncludeList: []string{
								"__Member__",
								"__Member__",
							},
							ExcludeList: []string{
								"__Member__",
								"__Member__",
							},
						},
					},
					SavingsEstimationMode: &types.InstanceSavingsEstimationMode{
						Source: types.InstanceSavingsEstimationModeSource("PublicPricing"),
					},
				},
				InferredWorkloadTypes: []types.InferredWorkloadType{
					types.InferredWorkloadType("AmazonEmr"),
					types.InferredWorkloadType("AmazonEmr"),
				},
			},
		},
		Errors: []types.GetRecommendationError{
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetAutoScalingGroupRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetAutoScalingGroupRecommendations(context.Background(), &GetAutoScalingGroupRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetAutoScalingGroupRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetEBSVolumeRecommendations(t *testing.T) {
	want := &GetEBSVolumeRecommendationsOutput{
		NextToken: ptr.String("__NextToken__"),
		VolumeRecommendations: []types.VolumeRecommendation{
			{
				VolumeArn: ptr.String("__VolumeArn__"),
				AccountId: ptr.String("__AccountId__"),
				CurrentConfiguration: &types.VolumeConfiguration{
					VolumeType:               ptr.String("__VolumeType__"),
					VolumeSize:               1,
					VolumeBaselineIOPS:       1,
					VolumeBurstIOPS:          1,
					VolumeBaselineThroughput: 1,
					VolumeBurstThroughput:    1,
					RootVolume:               ptr.Bool(true),
				},
				Finding: types.EBSFinding("Optimized"),
				UtilizationMetrics: []types.EBSUtilizationMetric{
					{
						Name:      types.EBSMetricName("VolumeReadOpsPerSecond"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.EBSMetricName("VolumeReadOpsPerSecond"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookBackPeriodInDays: 1.0,
				VolumeRecommendationOptions: []types.VolumeRecommendationOption{
					{
						Configuration: &types.VolumeConfiguration{
							VolumeType:               ptr.String("__VolumeType__"),
							VolumeSize:               1,
							VolumeBaselineIOPS:       1,
							VolumeBurstIOPS:          1,
							VolumeBaselineThroughput: 1,
							VolumeBurstThroughput:    1,
							RootVolume:               ptr.Bool(true),
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.EBSSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EBSEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
					{
						Configuration: &types.VolumeConfiguration{
							VolumeType:               ptr.String("__VolumeType__"),
							VolumeSize:               1,
							VolumeBaselineIOPS:       1,
							VolumeBurstIOPS:          1,
							VolumeBaselineThroughput: 1,
							VolumeBurstThroughput:    1,
							RootVolume:               ptr.Bool(true),
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.EBSSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EBSEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
				},
				LastRefreshTimestamp:   ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.EBSEffectiveRecommendationPreferences{
					SavingsEstimationMode: &types.EBSSavingsEstimationMode{
						Source: types.EBSSavingsEstimationModeSource("PublicPricing"),
					},
					LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
				},
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
			{
				VolumeArn: ptr.String("__VolumeArn__"),
				AccountId: ptr.String("__AccountId__"),
				CurrentConfiguration: &types.VolumeConfiguration{
					VolumeType:               ptr.String("__VolumeType__"),
					VolumeSize:               1,
					VolumeBaselineIOPS:       1,
					VolumeBurstIOPS:          1,
					VolumeBaselineThroughput: 1,
					VolumeBurstThroughput:    1,
					RootVolume:               ptr.Bool(true),
				},
				Finding: types.EBSFinding("Optimized"),
				UtilizationMetrics: []types.EBSUtilizationMetric{
					{
						Name:      types.EBSMetricName("VolumeReadOpsPerSecond"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.EBSMetricName("VolumeReadOpsPerSecond"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookBackPeriodInDays: 1.0,
				VolumeRecommendationOptions: []types.VolumeRecommendationOption{
					{
						Configuration: &types.VolumeConfiguration{
							VolumeType:               ptr.String("__VolumeType__"),
							VolumeSize:               1,
							VolumeBaselineIOPS:       1,
							VolumeBurstIOPS:          1,
							VolumeBaselineThroughput: 1,
							VolumeBurstThroughput:    1,
							RootVolume:               ptr.Bool(true),
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.EBSSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EBSEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
					{
						Configuration: &types.VolumeConfiguration{
							VolumeType:               ptr.String("__VolumeType__"),
							VolumeSize:               1,
							VolumeBaselineIOPS:       1,
							VolumeBurstIOPS:          1,
							VolumeBaselineThroughput: 1,
							VolumeBurstThroughput:    1,
							RootVolume:               ptr.Bool(true),
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.EBSSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EBSEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
				},
				LastRefreshTimestamp:   ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.EBSEffectiveRecommendationPreferences{
					SavingsEstimationMode: &types.EBSSavingsEstimationMode{
						Source: types.EBSSavingsEstimationModeSource("PublicPricing"),
					},
					LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
				},
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
		},
		Errors: []types.GetRecommendationError{
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetEBSVolumeRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetEBSVolumeRecommendations(context.Background(), &GetEBSVolumeRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetEBSVolumeRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetEC2InstanceRecommendations(t *testing.T) {
	want := &GetEC2InstanceRecommendationsOutput{
		NextToken: ptr.String("__NextToken__"),
		InstanceRecommendations: []types.InstanceRecommendation{
			{
				InstanceArn:         ptr.String("__InstanceArn__"),
				AccountId:           ptr.String("__AccountId__"),
				InstanceName:        ptr.String("__InstanceName__"),
				CurrentInstanceType: ptr.String("__CurrentInstanceType__"),
				Finding:             types.Finding("Underprovisioned"),
				FindingReasonCodes: []types.InstanceRecommendationFindingReasonCode{
					types.InstanceRecommendationFindingReasonCode("CPUOverprovisioned"),
					types.InstanceRecommendationFindingReasonCode("CPUOverprovisioned"),
				},
				UtilizationMetrics: []types.UtilizationMetric{
					{
						Name:      types.MetricName("Cpu"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.MetricName("Cpu"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookBackPeriodInDays: 1.0,
				RecommendationOptions: []types.InstanceRecommendationOption{
					{
						InstanceType: ptr.String("__InstanceType__"),
						InstanceGpuInfo: &types.GpuInfo{
							Gpus: []types.Gpu{
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
							},
						},
						ProjectedUtilizationMetrics: []types.UtilizationMetric{
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PlatformDifferences: []types.PlatformDifference{
							types.PlatformDifference("Hypervisor"),
							types.PlatformDifference("Hypervisor"),
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.InstanceSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.InstanceEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						MigrationEffort: types.MigrationEffort("VeryLow"),
					},
					{
						InstanceType: ptr.String("__InstanceType__"),
						InstanceGpuInfo: &types.GpuInfo{
							Gpus: []types.Gpu{
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
							},
						},
						ProjectedUtilizationMetrics: []types.UtilizationMetric{
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PlatformDifferences: []types.PlatformDifference{
							types.PlatformDifference("Hypervisor"),
							types.PlatformDifference("Hypervisor"),
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.InstanceSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.InstanceEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						MigrationEffort: types.MigrationEffort("VeryLow"),
					},
				},
				RecommendationSources: []types.RecommendationSource{
					{
						RecommendationSourceArn:  ptr.String("__RecommendationSourceArn__"),
						RecommendationSourceType: types.RecommendationSourceType("Ec2Instance"),
					},
					{
						RecommendationSourceArn:  ptr.String("__RecommendationSourceArn__"),
						RecommendationSourceType: types.RecommendationSourceType("Ec2Instance"),
					},
				},
				LastRefreshTimestamp:   ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.EffectiveRecommendationPreferences{
					CpuVendorArchitectures: []types.CpuVendorArchitecture{
						types.CpuVendorArchitecture("AWS_ARM64"),
						types.CpuVendorArchitecture("AWS_ARM64"),
					},
					EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
					InferredWorkloadTypes:         types.InferredWorkloadTypesPreference("Active"),
					ExternalMetricsPreference: &types.ExternalMetricsPreference{
						Source: types.ExternalMetricsSource("Datadog"),
					},
					LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
					UtilizationPreferences: []types.UtilizationPreference{
						{
							MetricName: types.CustomizableMetricName("CpuUtilization"),
							MetricParameters: &types.CustomizableMetricParameters{
								Threshold: types.CustomizableMetricThreshold("P90"),
								Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
							},
						},
						{
							MetricName: types.CustomizableMetricName("CpuUtilization"),
							MetricParameters: &types.CustomizableMetricParameters{
								Threshold: types.CustomizableMetricThreshold("P90"),
								Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
							},
						},
					},
					PreferredResources: []types.EffectivePreferredResource{
						{
							Name: types.PreferredResourceName("Ec2InstanceTypes"),
							IncludeList: []string{
								"__Member__",
								"__Member__",
							},
							EffectiveIncludeList: []string{
								"__Member__",
								"__Member__",
							},
							ExcludeList: []string{
								"__Member__",
								"__Member__",
							},
						},
						{
							Name: types.PreferredResourceName("Ec2InstanceTypes"),
							IncludeList: []string{
								"__Member__",
								"__Member__",
							},
							EffectiveIncludeList: []string{
								"__Member__",
								"__Member__",
							},
							ExcludeList: []string{
								"__Member__",
								"__Member__",
							},
						},
					},
					SavingsEstimationMode: &types.InstanceSavingsEstimationMode{
						Source: types.InstanceSavingsEstimationModeSource("PublicPricing"),
					},
				},
				InferredWorkloadTypes: []types.InferredWorkloadType{
					types.InferredWorkloadType("AmazonEmr"),
					types.InferredWorkloadType("AmazonEmr"),
				},
				InstanceState: types.InstanceState("pending"),
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
				ExternalMetricStatus: &types.ExternalMetricStatus{
					StatusCode:   types.ExternalMetricStatusCode("NO_EXTERNAL_METRIC_SET"),
					StatusReason: ptr.String("__StatusReason__"),
				},
				CurrentInstanceGpuInfo: &types.GpuInfo{
					Gpus: []types.Gpu{
						{
							GpuCount:           1,
							GpuMemorySizeInMiB: 1,
						},
						{
							GpuCount:           1,
							GpuMemorySizeInMiB: 1,
						},
					},
				},
				Idle: types.InstanceIdle("True"),
			},
			{
				InstanceArn:         ptr.String("__InstanceArn__"),
				AccountId:           ptr.String("__AccountId__"),
				InstanceName:        ptr.String("__InstanceName__"),
				CurrentInstanceType: ptr.String("__CurrentInstanceType__"),
				Finding:             types.Finding("Underprovisioned"),
				FindingReasonCodes: []types.InstanceRecommendationFindingReasonCode{
					types.InstanceRecommendationFindingReasonCode("CPUOverprovisioned"),
					types.InstanceRecommendationFindingReasonCode("CPUOverprovisioned"),
				},
				UtilizationMetrics: []types.UtilizationMetric{
					{
						Name:      types.MetricName("Cpu"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.MetricName("Cpu"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookBackPeriodInDays: 1.0,
				RecommendationOptions: []types.InstanceRecommendationOption{
					{
						InstanceType: ptr.String("__InstanceType__"),
						InstanceGpuInfo: &types.GpuInfo{
							Gpus: []types.Gpu{
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
							},
						},
						ProjectedUtilizationMetrics: []types.UtilizationMetric{
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PlatformDifferences: []types.PlatformDifference{
							types.PlatformDifference("Hypervisor"),
							types.PlatformDifference("Hypervisor"),
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.InstanceSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.InstanceEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						MigrationEffort: types.MigrationEffort("VeryLow"),
					},
					{
						InstanceType: ptr.String("__InstanceType__"),
						InstanceGpuInfo: &types.GpuInfo{
							Gpus: []types.Gpu{
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
								{
									GpuCount:           1,
									GpuMemorySizeInMiB: 1,
								},
							},
						},
						ProjectedUtilizationMetrics: []types.UtilizationMetric{
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.MetricName("Cpu"),
								Statistic: types.MetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PlatformDifferences: []types.PlatformDifference{
							types.PlatformDifference("Hypervisor"),
							types.PlatformDifference("Hypervisor"),
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.InstanceSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.InstanceEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						MigrationEffort: types.MigrationEffort("VeryLow"),
					},
				},
				RecommendationSources: []types.RecommendationSource{
					{
						RecommendationSourceArn:  ptr.String("__RecommendationSourceArn__"),
						RecommendationSourceType: types.RecommendationSourceType("Ec2Instance"),
					},
					{
						RecommendationSourceArn:  ptr.String("__RecommendationSourceArn__"),
						RecommendationSourceType: types.RecommendationSourceType("Ec2Instance"),
					},
				},
				LastRefreshTimestamp:   ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.EffectiveRecommendationPreferences{
					CpuVendorArchitectures: []types.CpuVendorArchitecture{
						types.CpuVendorArchitecture("AWS_ARM64"),
						types.CpuVendorArchitecture("AWS_ARM64"),
					},
					EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
					InferredWorkloadTypes:         types.InferredWorkloadTypesPreference("Active"),
					ExternalMetricsPreference: &types.ExternalMetricsPreference{
						Source: types.ExternalMetricsSource("Datadog"),
					},
					LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
					UtilizationPreferences: []types.UtilizationPreference{
						{
							MetricName: types.CustomizableMetricName("CpuUtilization"),
							MetricParameters: &types.CustomizableMetricParameters{
								Threshold: types.CustomizableMetricThreshold("P90"),
								Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
							},
						},
						{
							MetricName: types.CustomizableMetricName("CpuUtilization"),
							MetricParameters: &types.CustomizableMetricParameters{
								Threshold: types.CustomizableMetricThreshold("P90"),
								Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
							},
						},
					},
					PreferredResources: []types.EffectivePreferredResource{
						{
							Name: types.PreferredResourceName("Ec2InstanceTypes"),
							IncludeList: []string{
								"__Member__",
								"__Member__",
							},
							EffectiveIncludeList: []string{
								"__Member__",
								"__Member__",
							},
							ExcludeList: []string{
								"__Member__",
								"__Member__",
							},
						},
						{
							Name: types.PreferredResourceName("Ec2InstanceTypes"),
							IncludeList: []string{
								"__Member__",
								"__Member__",
							},
							EffectiveIncludeList: []string{
								"__Member__",
								"__Member__",
							},
							ExcludeList: []string{
								"__Member__",
								"__Member__",
							},
						},
					},
					SavingsEstimationMode: &types.InstanceSavingsEstimationMode{
						Source: types.InstanceSavingsEstimationModeSource("PublicPricing"),
					},
				},
				InferredWorkloadTypes: []types.InferredWorkloadType{
					types.InferredWorkloadType("AmazonEmr"),
					types.InferredWorkloadType("AmazonEmr"),
				},
				InstanceState: types.InstanceState("pending"),
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
				ExternalMetricStatus: &types.ExternalMetricStatus{
					StatusCode:   types.ExternalMetricStatusCode("NO_EXTERNAL_METRIC_SET"),
					StatusReason: ptr.String("__StatusReason__"),
				},
				CurrentInstanceGpuInfo: &types.GpuInfo{
					Gpus: []types.Gpu{
						{
							GpuCount:           1,
							GpuMemorySizeInMiB: 1,
						},
						{
							GpuCount:           1,
							GpuMemorySizeInMiB: 1,
						},
					},
				},
				Idle: types.InstanceIdle("True"),
			},
		},
		Errors: []types.GetRecommendationError{
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetEC2InstanceRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetEC2InstanceRecommendations(context.Background(), &GetEC2InstanceRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetEC2InstanceRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetEC2RecommendationProjectedMetrics(t *testing.T) {
	want := &GetEC2RecommendationProjectedMetricsOutput{
		RecommendedOptionProjectedMetrics: []types.RecommendedOptionProjectedMetric{
			{
				RecommendedInstanceType: ptr.String("__RecommendedInstanceType__"),
				Rank:                    1,
				ProjectedMetrics: []types.ProjectedMetric{
					{
						Name: types.MetricName("Cpu"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						Values: []float64{
							1.0,
							1.0,
						},
					},
					{
						Name: types.MetricName("Cpu"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						Values: []float64{
							1.0,
							1.0,
						},
					},
				},
			},
			{
				RecommendedInstanceType: ptr.String("__RecommendedInstanceType__"),
				Rank:                    1,
				ProjectedMetrics: []types.ProjectedMetric{
					{
						Name: types.MetricName("Cpu"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						Values: []float64{
							1.0,
							1.0,
						},
					},
					{
						Name: types.MetricName("Cpu"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						Values: []float64{
							1.0,
							1.0,
						},
					},
				},
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetEC2RecommendationProjectedMetrics.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetEC2RecommendationProjectedMetrics(context.Background(), &GetEC2RecommendationProjectedMetricsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetEC2RecommendationProjectedMetrics.response", err)
	}
}

func TestCheckResponseSnapshot_GetECSServiceRecommendationProjectedMetrics(t *testing.T) {
	want := &GetECSServiceRecommendationProjectedMetricsOutput{
		RecommendedOptionProjectedMetrics: []types.ECSServiceRecommendedOptionProjectedMetric{
			{
				RecommendedCpuUnits:   1,
				RecommendedMemorySize: 1,
				ProjectedMetrics: []types.ECSServiceProjectedMetric{
					{
						Name: types.ECSServiceMetricName("Cpu"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						UpperBoundValues: []float64{
							1.0,
							1.0,
						},
						LowerBoundValues: []float64{
							1.0,
							1.0,
						},
					},
					{
						Name: types.ECSServiceMetricName("Cpu"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						UpperBoundValues: []float64{
							1.0,
							1.0,
						},
						LowerBoundValues: []float64{
							1.0,
							1.0,
						},
					},
				},
			},
			{
				RecommendedCpuUnits:   1,
				RecommendedMemorySize: 1,
				ProjectedMetrics: []types.ECSServiceProjectedMetric{
					{
						Name: types.ECSServiceMetricName("Cpu"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						UpperBoundValues: []float64{
							1.0,
							1.0,
						},
						LowerBoundValues: []float64{
							1.0,
							1.0,
						},
					},
					{
						Name: types.ECSServiceMetricName("Cpu"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						UpperBoundValues: []float64{
							1.0,
							1.0,
						},
						LowerBoundValues: []float64{
							1.0,
							1.0,
						},
					},
				},
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetECSServiceRecommendationProjectedMetrics.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetECSServiceRecommendationProjectedMetrics(context.Background(), &GetECSServiceRecommendationProjectedMetricsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetECSServiceRecommendationProjectedMetrics.response", err)
	}
}

func TestCheckResponseSnapshot_GetECSServiceRecommendations(t *testing.T) {
	want := &GetECSServiceRecommendationsOutput{
		NextToken: ptr.String("__NextToken__"),
		EcsServiceRecommendations: []types.ECSServiceRecommendation{
			{
				ServiceArn: ptr.String("__ServiceArn__"),
				AccountId:  ptr.String("__AccountId__"),
				CurrentServiceConfiguration: &types.ServiceConfiguration{
					Memory: ptr.Int32(1),
					Cpu:    ptr.Int32(1),
					ContainerConfigurations: []types.ContainerConfiguration{
						{
							ContainerName: ptr.String("__ContainerName__"),
							MemorySizeConfiguration: &types.MemorySizeConfiguration{
								Memory:            ptr.Int32(1),
								MemoryReservation: ptr.Int32(1),
							},
							Cpu: ptr.Int32(1),
						},
						{
							ContainerName: ptr.String("__ContainerName__"),
							MemorySizeConfiguration: &types.MemorySizeConfiguration{
								Memory:            ptr.Int32(1),
								MemoryReservation: ptr.Int32(1),
							},
							Cpu: ptr.Int32(1),
						},
					},
					AutoScalingConfiguration: types.AutoScalingConfiguration("TargetTrackingScalingCpu"),
					TaskDefinitionArn:        ptr.String("__TaskDefinitionArn__"),
				},
				UtilizationMetrics: []types.ECSServiceUtilizationMetric{
					{
						Name:      types.ECSServiceMetricName("Cpu"),
						Statistic: types.ECSServiceMetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.ECSServiceMetricName("Cpu"),
						Statistic: types.ECSServiceMetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookbackPeriodInDays: 1.0,
				LaunchType:           types.ECSServiceLaunchType("EC2"),
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Finding:              types.ECSServiceRecommendationFinding("Optimized"),
				FindingReasonCodes: []types.ECSServiceRecommendationFindingReasonCode{
					types.ECSServiceRecommendationFindingReasonCode("MemoryOverprovisioned"),
					types.ECSServiceRecommendationFindingReasonCode("MemoryOverprovisioned"),
				},
				ServiceRecommendationOptions: []types.ECSServiceRecommendationOption{
					{
						Memory: ptr.Int32(1),
						Cpu:    ptr.Int32(1),
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.ECSSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.ECSEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						ProjectedUtilizationMetrics: []types.ECSServiceProjectedUtilizationMetric{
							{
								Name:            types.ECSServiceMetricName("Cpu"),
								Statistic:       types.ECSServiceMetricStatistic("Maximum"),
								LowerBoundValue: 1.0,
								UpperBoundValue: 1.0,
							},
							{
								Name:            types.ECSServiceMetricName("Cpu"),
								Statistic:       types.ECSServiceMetricStatistic("Maximum"),
								LowerBoundValue: 1.0,
								UpperBoundValue: 1.0,
							},
						},
						ContainerRecommendations: []types.ContainerRecommendation{
							{
								ContainerName: ptr.String("__ContainerName__"),
								MemorySizeConfiguration: &types.MemorySizeConfiguration{
									Memory:            ptr.Int32(1),
									MemoryReservation: ptr.Int32(1),
								},
								Cpu: ptr.Int32(1),
							},
							{
								ContainerName: ptr.String("__ContainerName__"),
								MemorySizeConfiguration: &types.MemorySizeConfiguration{
									Memory:            ptr.Int32(1),
									MemoryReservation: ptr.Int32(1),
								},
								Cpu: ptr.Int32(1),
							},
						},
					},
					{
						Memory: ptr.Int32(1),
						Cpu:    ptr.Int32(1),
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.ECSSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.ECSEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						ProjectedUtilizationMetrics: []types.ECSServiceProjectedUtilizationMetric{
							{
								Name:            types.ECSServiceMetricName("Cpu"),
								Statistic:       types.ECSServiceMetricStatistic("Maximum"),
								LowerBoundValue: 1.0,
								UpperBoundValue: 1.0,
							},
							{
								Name:            types.ECSServiceMetricName("Cpu"),
								Statistic:       types.ECSServiceMetricStatistic("Maximum"),
								LowerBoundValue: 1.0,
								UpperBoundValue: 1.0,
							},
						},
						ContainerRecommendations: []types.ContainerRecommendation{
							{
								ContainerName: ptr.String("__ContainerName__"),
								MemorySizeConfiguration: &types.MemorySizeConfiguration{
									Memory:            ptr.Int32(1),
									MemoryReservation: ptr.Int32(1),
								},
								Cpu: ptr.Int32(1),
							},
							{
								ContainerName: ptr.String("__ContainerName__"),
								MemorySizeConfiguration: &types.MemorySizeConfiguration{
									Memory:            ptr.Int32(1),
									MemoryReservation: ptr.Int32(1),
								},
								Cpu: ptr.Int32(1),
							},
						},
					},
				},
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.ECSEffectiveRecommendationPreferences{
					SavingsEstimationMode: &types.ECSSavingsEstimationMode{
						Source: types.ECSSavingsEstimationModeSource("PublicPricing"),
					},
					LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
				},
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
			{
				ServiceArn: ptr.String("__ServiceArn__"),
				AccountId:  ptr.String("__AccountId__"),
				CurrentServiceConfiguration: &types.ServiceConfiguration{
					Memory: ptr.Int32(1),
					Cpu:    ptr.Int32(1),
					ContainerConfigurations: []types.ContainerConfiguration{
						{
							ContainerName: ptr.String("__ContainerName__"),
							MemorySizeConfiguration: &types.MemorySizeConfiguration{
								Memory:            ptr.Int32(1),
								MemoryReservation: ptr.Int32(1),
							},
							Cpu: ptr.Int32(1),
						},
						{
							ContainerName: ptr.String("__ContainerName__"),
							MemorySizeConfiguration: &types.MemorySizeConfiguration{
								Memory:            ptr.Int32(1),
								MemoryReservation: ptr.Int32(1),
							},
							Cpu: ptr.Int32(1),
						},
					},
					AutoScalingConfiguration: types.AutoScalingConfiguration("TargetTrackingScalingCpu"),
					TaskDefinitionArn:        ptr.String("__TaskDefinitionArn__"),
				},
				UtilizationMetrics: []types.ECSServiceUtilizationMetric{
					{
						Name:      types.ECSServiceMetricName("Cpu"),
						Statistic: types.ECSServiceMetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.ECSServiceMetricName("Cpu"),
						Statistic: types.ECSServiceMetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookbackPeriodInDays: 1.0,
				LaunchType:           types.ECSServiceLaunchType("EC2"),
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Finding:              types.ECSServiceRecommendationFinding("Optimized"),
				FindingReasonCodes: []types.ECSServiceRecommendationFindingReasonCode{
					types.ECSServiceRecommendationFindingReasonCode("MemoryOverprovisioned"),
					types.ECSServiceRecommendationFindingReasonCode("MemoryOverprovisioned"),
				},
				ServiceRecommendationOptions: []types.ECSServiceRecommendationOption{
					{
						Memory: ptr.Int32(1),
						Cpu:    ptr.Int32(1),
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.ECSSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.ECSEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						ProjectedUtilizationMetrics: []types.ECSServiceProjectedUtilizationMetric{
							{
								Name:            types.ECSServiceMetricName("Cpu"),
								Statistic:       types.ECSServiceMetricStatistic("Maximum"),
								LowerBoundValue: 1.0,
								UpperBoundValue: 1.0,
							},
							{
								Name:            types.ECSServiceMetricName("Cpu"),
								Statistic:       types.ECSServiceMetricStatistic("Maximum"),
								LowerBoundValue: 1.0,
								UpperBoundValue: 1.0,
							},
						},
						ContainerRecommendations: []types.ContainerRecommendation{
							{
								ContainerName: ptr.String("__ContainerName__"),
								MemorySizeConfiguration: &types.MemorySizeConfiguration{
									Memory:            ptr.Int32(1),
									MemoryReservation: ptr.Int32(1),
								},
								Cpu: ptr.Int32(1),
							},
							{
								ContainerName: ptr.String("__ContainerName__"),
								MemorySizeConfiguration: &types.MemorySizeConfiguration{
									Memory:            ptr.Int32(1),
									MemoryReservation: ptr.Int32(1),
								},
								Cpu: ptr.Int32(1),
							},
						},
					},
					{
						Memory: ptr.Int32(1),
						Cpu:    ptr.Int32(1),
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.ECSSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.ECSEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						ProjectedUtilizationMetrics: []types.ECSServiceProjectedUtilizationMetric{
							{
								Name:            types.ECSServiceMetricName("Cpu"),
								Statistic:       types.ECSServiceMetricStatistic("Maximum"),
								LowerBoundValue: 1.0,
								UpperBoundValue: 1.0,
							},
							{
								Name:            types.ECSServiceMetricName("Cpu"),
								Statistic:       types.ECSServiceMetricStatistic("Maximum"),
								LowerBoundValue: 1.0,
								UpperBoundValue: 1.0,
							},
						},
						ContainerRecommendations: []types.ContainerRecommendation{
							{
								ContainerName: ptr.String("__ContainerName__"),
								MemorySizeConfiguration: &types.MemorySizeConfiguration{
									Memory:            ptr.Int32(1),
									MemoryReservation: ptr.Int32(1),
								},
								Cpu: ptr.Int32(1),
							},
							{
								ContainerName: ptr.String("__ContainerName__"),
								MemorySizeConfiguration: &types.MemorySizeConfiguration{
									Memory:            ptr.Int32(1),
									MemoryReservation: ptr.Int32(1),
								},
								Cpu: ptr.Int32(1),
							},
						},
					},
				},
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.ECSEffectiveRecommendationPreferences{
					SavingsEstimationMode: &types.ECSSavingsEstimationMode{
						Source: types.ECSSavingsEstimationModeSource("PublicPricing"),
					},
					LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
				},
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
		},
		Errors: []types.GetRecommendationError{
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetECSServiceRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetECSServiceRecommendations(context.Background(), &GetECSServiceRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetECSServiceRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetEffectiveRecommendationPreferences(t *testing.T) {
	want := &GetEffectiveRecommendationPreferencesOutput{
		EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
		ExternalMetricsPreference: &types.ExternalMetricsPreference{
			Source: types.ExternalMetricsSource("Datadog"),
		},
		LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
		UtilizationPreferences: []types.UtilizationPreference{
			{
				MetricName: types.CustomizableMetricName("CpuUtilization"),
				MetricParameters: &types.CustomizableMetricParameters{
					Threshold: types.CustomizableMetricThreshold("P90"),
					Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
				},
			},
			{
				MetricName: types.CustomizableMetricName("CpuUtilization"),
				MetricParameters: &types.CustomizableMetricParameters{
					Threshold: types.CustomizableMetricThreshold("P90"),
					Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
				},
			},
		},
		PreferredResources: []types.EffectivePreferredResource{
			{
				Name: types.PreferredResourceName("Ec2InstanceTypes"),
				IncludeList: []string{
					"__Member__",
					"__Member__",
				},
				EffectiveIncludeList: []string{
					"__Member__",
					"__Member__",
				},
				ExcludeList: []string{
					"__Member__",
					"__Member__",
				},
			},
			{
				Name: types.PreferredResourceName("Ec2InstanceTypes"),
				IncludeList: []string{
					"__Member__",
					"__Member__",
				},
				EffectiveIncludeList: []string{
					"__Member__",
					"__Member__",
				},
				ExcludeList: []string{
					"__Member__",
					"__Member__",
				},
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetEffectiveRecommendationPreferences.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetEffectiveRecommendationPreferences(context.Background(), &GetEffectiveRecommendationPreferencesInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetEffectiveRecommendationPreferences.response", err)
	}
}

func TestCheckResponseSnapshot_GetEnrollmentStatus(t *testing.T) {
	want := &GetEnrollmentStatusOutput{
		Status:                        types.Status("Active"),
		StatusReason:                  ptr.String("__StatusReason__"),
		MemberAccountsEnrolled:        true,
		LastUpdatedTimestamp:          ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
		NumberOfMemberAccountsOptedIn: ptr.Int32(1),
	}
	status, header, body, err := serdeRespReadSnapshot("GetEnrollmentStatus.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetEnrollmentStatus(context.Background(), &GetEnrollmentStatusInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetEnrollmentStatus.response", err)
	}
}

func TestCheckResponseSnapshot_GetEnrollmentStatusesForOrganization(t *testing.T) {
	want := &GetEnrollmentStatusesForOrganizationOutput{
		AccountEnrollmentStatuses: []types.AccountEnrollmentStatus{
			{
				AccountId:            ptr.String("__AccountId__"),
				Status:               types.Status("Active"),
				StatusReason:         ptr.String("__StatusReason__"),
				LastUpdatedTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
			},
			{
				AccountId:            ptr.String("__AccountId__"),
				Status:               types.Status("Active"),
				StatusReason:         ptr.String("__StatusReason__"),
				LastUpdatedTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
			},
		},
		NextToken: ptr.String("__NextToken__"),
	}
	status, header, body, err := serdeRespReadSnapshot("GetEnrollmentStatusesForOrganization.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetEnrollmentStatusesForOrganization(context.Background(), &GetEnrollmentStatusesForOrganizationInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetEnrollmentStatusesForOrganization.response", err)
	}
}

func TestCheckResponseSnapshot_GetIdleRecommendations(t *testing.T) {
	want := &GetIdleRecommendationsOutput{
		NextToken: ptr.String("__NextToken__"),
		IdleRecommendations: []types.IdleRecommendation{
			{
				ResourceArn:        ptr.String("__ResourceArn__"),
				ResourceId:         ptr.String("__ResourceId__"),
				ResourceType:       types.IdleRecommendationResourceType("EC2Instance"),
				AccountId:          ptr.String("__AccountId__"),
				Finding:            types.IdleFinding("Idle"),
				FindingDescription: ptr.String("__FindingDescription__"),
				SavingsOpportunity: &types.IdleSavingsOpportunity{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.IdleEstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				SavingsOpportunityAfterDiscounts: &types.IdleSavingsOpportunityAfterDiscounts{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.IdleEstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				UtilizationMetrics: []types.IdleUtilizationMetric{
					{
						Name:      types.IdleMetricName("CPU"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
						Dimensions: []types.IdleDimension{
							{
								Key: ptr.String("__Key__"),
								Values: []string{
									"__Member__",
									"__Member__",
								},
							},
							{
								Key: ptr.String("__Key__"),
								Values: []string{
									"__Member__",
									"__Member__",
								},
							},
						},
					},
					{
						Name:      types.IdleMetricName("CPU"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
						Dimensions: []types.IdleDimension{
							{
								Key: ptr.String("__Key__"),
								Values: []string{
									"__Member__",
									"__Member__",
								},
							},
							{
								Key: ptr.String("__Key__"),
								Values: []string{
									"__Member__",
									"__Member__",
								},
							},
						},
					},
				},
				LookBackPeriodInDays: 1.0,
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
			{
				ResourceArn:        ptr.String("__ResourceArn__"),
				ResourceId:         ptr.String("__ResourceId__"),
				ResourceType:       types.IdleRecommendationResourceType("EC2Instance"),
				AccountId:          ptr.String("__AccountId__"),
				Finding:            types.IdleFinding("Idle"),
				FindingDescription: ptr.String("__FindingDescription__"),
				SavingsOpportunity: &types.IdleSavingsOpportunity{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.IdleEstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				SavingsOpportunityAfterDiscounts: &types.IdleSavingsOpportunityAfterDiscounts{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.IdleEstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				UtilizationMetrics: []types.IdleUtilizationMetric{
					{
						Name:      types.IdleMetricName("CPU"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
						Dimensions: []types.IdleDimension{
							{
								Key: ptr.String("__Key__"),
								Values: []string{
									"__Member__",
									"__Member__",
								},
							},
							{
								Key: ptr.String("__Key__"),
								Values: []string{
									"__Member__",
									"__Member__",
								},
							},
						},
					},
					{
						Name:      types.IdleMetricName("CPU"),
						Statistic: types.MetricStatistic("Maximum"),
						Value:     1.0,
						Dimensions: []types.IdleDimension{
							{
								Key: ptr.String("__Key__"),
								Values: []string{
									"__Member__",
									"__Member__",
								},
							},
							{
								Key: ptr.String("__Key__"),
								Values: []string{
									"__Member__",
									"__Member__",
								},
							},
						},
					},
				},
				LookBackPeriodInDays: 1.0,
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
		},
		Errors: []types.IdleRecommendationError{
			{
				Identifier:   ptr.String("__Identifier__"),
				Code:         ptr.String("__Code__"),
				Message:      ptr.String("__Message__"),
				ResourceType: types.IdleRecommendationResourceType("EC2Instance"),
			},
			{
				Identifier:   ptr.String("__Identifier__"),
				Code:         ptr.String("__Code__"),
				Message:      ptr.String("__Message__"),
				ResourceType: types.IdleRecommendationResourceType("EC2Instance"),
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetIdleRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetIdleRecommendations(context.Background(), &GetIdleRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetIdleRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetLambdaFunctionRecommendations(t *testing.T) {
	want := &GetLambdaFunctionRecommendationsOutput{
		NextToken: ptr.String("__NextToken__"),
		LambdaFunctionRecommendations: []types.LambdaFunctionRecommendation{
			{
				FunctionArn:         ptr.String("__FunctionArn__"),
				FunctionVersion:     ptr.String("__FunctionVersion__"),
				AccountId:           ptr.String("__AccountId__"),
				CurrentMemorySize:   1,
				NumberOfInvocations: 1,
				UtilizationMetrics: []types.LambdaFunctionUtilizationMetric{
					{
						Name:      types.LambdaFunctionMetricName("Duration"),
						Statistic: types.LambdaFunctionMetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.LambdaFunctionMetricName("Duration"),
						Statistic: types.LambdaFunctionMetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookbackPeriodInDays: 1.0,
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Finding:              types.LambdaFunctionRecommendationFinding("Optimized"),
				FindingReasonCodes: []types.LambdaFunctionRecommendationFindingReasonCode{
					types.LambdaFunctionRecommendationFindingReasonCode("MemoryOverprovisioned"),
					types.LambdaFunctionRecommendationFindingReasonCode("MemoryOverprovisioned"),
				},
				MemorySizeRecommendationOptions: []types.LambdaFunctionMemoryRecommendationOption{
					{
						Rank:       1,
						MemorySize: 1,
						ProjectedUtilizationMetrics: []types.LambdaFunctionMemoryProjectedMetric{
							{
								Name:      types.LambdaFunctionMemoryMetricName("Duration"),
								Statistic: types.LambdaFunctionMemoryMetricStatistic("LowerBound"),
								Value:     1.0,
							},
							{
								Name:      types.LambdaFunctionMemoryMetricName("Duration"),
								Statistic: types.LambdaFunctionMemoryMetricStatistic("LowerBound"),
								Value:     1.0,
							},
						},
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.LambdaSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.LambdaEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
					{
						Rank:       1,
						MemorySize: 1,
						ProjectedUtilizationMetrics: []types.LambdaFunctionMemoryProjectedMetric{
							{
								Name:      types.LambdaFunctionMemoryMetricName("Duration"),
								Statistic: types.LambdaFunctionMemoryMetricStatistic("LowerBound"),
								Value:     1.0,
							},
							{
								Name:      types.LambdaFunctionMemoryMetricName("Duration"),
								Statistic: types.LambdaFunctionMemoryMetricStatistic("LowerBound"),
								Value:     1.0,
							},
						},
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.LambdaSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.LambdaEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
				},
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.LambdaEffectiveRecommendationPreferences{
					SavingsEstimationMode: &types.LambdaSavingsEstimationMode{
						Source: types.LambdaSavingsEstimationModeSource("PublicPricing"),
					},
				},
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
			{
				FunctionArn:         ptr.String("__FunctionArn__"),
				FunctionVersion:     ptr.String("__FunctionVersion__"),
				AccountId:           ptr.String("__AccountId__"),
				CurrentMemorySize:   1,
				NumberOfInvocations: 1,
				UtilizationMetrics: []types.LambdaFunctionUtilizationMetric{
					{
						Name:      types.LambdaFunctionMetricName("Duration"),
						Statistic: types.LambdaFunctionMetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.LambdaFunctionMetricName("Duration"),
						Statistic: types.LambdaFunctionMetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				LookbackPeriodInDays: 1.0,
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Finding:              types.LambdaFunctionRecommendationFinding("Optimized"),
				FindingReasonCodes: []types.LambdaFunctionRecommendationFindingReasonCode{
					types.LambdaFunctionRecommendationFindingReasonCode("MemoryOverprovisioned"),
					types.LambdaFunctionRecommendationFindingReasonCode("MemoryOverprovisioned"),
				},
				MemorySizeRecommendationOptions: []types.LambdaFunctionMemoryRecommendationOption{
					{
						Rank:       1,
						MemorySize: 1,
						ProjectedUtilizationMetrics: []types.LambdaFunctionMemoryProjectedMetric{
							{
								Name:      types.LambdaFunctionMemoryMetricName("Duration"),
								Statistic: types.LambdaFunctionMemoryMetricStatistic("LowerBound"),
								Value:     1.0,
							},
							{
								Name:      types.LambdaFunctionMemoryMetricName("Duration"),
								Statistic: types.LambdaFunctionMemoryMetricStatistic("LowerBound"),
								Value:     1.0,
							},
						},
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.LambdaSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.LambdaEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
					{
						Rank:       1,
						MemorySize: 1,
						ProjectedUtilizationMetrics: []types.LambdaFunctionMemoryProjectedMetric{
							{
								Name:      types.LambdaFunctionMemoryMetricName("Duration"),
								Statistic: types.LambdaFunctionMemoryMetricStatistic("LowerBound"),
								Value:     1.0,
							},
							{
								Name:      types.LambdaFunctionMemoryMetricName("Duration"),
								Statistic: types.LambdaFunctionMemoryMetricStatistic("LowerBound"),
								Value:     1.0,
							},
						},
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.LambdaSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.LambdaEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
				},
				CurrentPerformanceRisk: types.CurrentPerformanceRisk("VeryLow"),
				EffectiveRecommendationPreferences: &types.LambdaEffectiveRecommendationPreferences{
					SavingsEstimationMode: &types.LambdaSavingsEstimationMode{
						Source: types.LambdaSavingsEstimationModeSource("PublicPricing"),
					},
				},
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetLambdaFunctionRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetLambdaFunctionRecommendations(context.Background(), &GetLambdaFunctionRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetLambdaFunctionRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetLicenseRecommendations(t *testing.T) {
	want := &GetLicenseRecommendationsOutput{
		NextToken: ptr.String("__NextToken__"),
		LicenseRecommendations: []types.LicenseRecommendation{
			{
				ResourceArn: ptr.String("__ResourceArn__"),
				AccountId:   ptr.String("__AccountId__"),
				CurrentLicenseConfiguration: &types.LicenseConfiguration{
					NumberOfCores:   1,
					InstanceType:    ptr.String("__InstanceType__"),
					OperatingSystem: ptr.String("__OperatingSystem__"),
					LicenseEdition:  types.LicenseEdition("Enterprise"),
					LicenseName:     types.LicenseName("SQLServer"),
					LicenseModel:    types.LicenseModel("LicenseIncluded"),
					LicenseVersion:  ptr.String("__LicenseVersion__"),
					MetricsSource: []types.MetricSource{
						{
							Provider:    types.MetricSourceProvider("CloudWatchApplicationInsights"),
							ProviderArn: ptr.String("__ProviderArn__"),
						},
						{
							Provider:    types.MetricSourceProvider("CloudWatchApplicationInsights"),
							ProviderArn: ptr.String("__ProviderArn__"),
						},
					},
				},
				LookbackPeriodInDays: 1.0,
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Finding:              types.LicenseFinding("InsufficientMetrics"),
				FindingReasonCodes: []types.LicenseFindingReasonCode{
					types.LicenseFindingReasonCode("InvalidCloudWatchApplicationInsightsSetup"),
					types.LicenseFindingReasonCode("InvalidCloudWatchApplicationInsightsSetup"),
				},
				LicenseRecommendationOptions: []types.LicenseRecommendationOption{
					{
						Rank:            1,
						OperatingSystem: ptr.String("__OperatingSystem__"),
						LicenseEdition:  types.LicenseEdition("Enterprise"),
						LicenseModel:    types.LicenseModel("LicenseIncluded"),
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
					{
						Rank:            1,
						OperatingSystem: ptr.String("__OperatingSystem__"),
						LicenseEdition:  types.LicenseEdition("Enterprise"),
						LicenseModel:    types.LicenseModel("LicenseIncluded"),
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
				},
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
			{
				ResourceArn: ptr.String("__ResourceArn__"),
				AccountId:   ptr.String("__AccountId__"),
				CurrentLicenseConfiguration: &types.LicenseConfiguration{
					NumberOfCores:   1,
					InstanceType:    ptr.String("__InstanceType__"),
					OperatingSystem: ptr.String("__OperatingSystem__"),
					LicenseEdition:  types.LicenseEdition("Enterprise"),
					LicenseName:     types.LicenseName("SQLServer"),
					LicenseModel:    types.LicenseModel("LicenseIncluded"),
					LicenseVersion:  ptr.String("__LicenseVersion__"),
					MetricsSource: []types.MetricSource{
						{
							Provider:    types.MetricSourceProvider("CloudWatchApplicationInsights"),
							ProviderArn: ptr.String("__ProviderArn__"),
						},
						{
							Provider:    types.MetricSourceProvider("CloudWatchApplicationInsights"),
							ProviderArn: ptr.String("__ProviderArn__"),
						},
					},
				},
				LookbackPeriodInDays: 1.0,
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Finding:              types.LicenseFinding("InsufficientMetrics"),
				FindingReasonCodes: []types.LicenseFindingReasonCode{
					types.LicenseFindingReasonCode("InvalidCloudWatchApplicationInsightsSetup"),
					types.LicenseFindingReasonCode("InvalidCloudWatchApplicationInsightsSetup"),
				},
				LicenseRecommendationOptions: []types.LicenseRecommendationOption{
					{
						Rank:            1,
						OperatingSystem: ptr.String("__OperatingSystem__"),
						LicenseEdition:  types.LicenseEdition("Enterprise"),
						LicenseModel:    types.LicenseModel("LicenseIncluded"),
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
					{
						Rank:            1,
						OperatingSystem: ptr.String("__OperatingSystem__"),
						LicenseEdition:  types.LicenseEdition("Enterprise"),
						LicenseModel:    types.LicenseModel("LicenseIncluded"),
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
				},
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
		},
		Errors: []types.GetRecommendationError{
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetLicenseRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetLicenseRecommendations(context.Background(), &GetLicenseRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetLicenseRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetRDSDatabaseRecommendationProjectedMetrics(t *testing.T) {
	want := &GetRDSDatabaseRecommendationProjectedMetricsOutput{
		RecommendedOptionProjectedMetrics: []types.RDSDatabaseRecommendedOptionProjectedMetric{
			{
				RecommendedDBInstanceClass: ptr.String("__RecommendedDBInstanceClass__"),
				Rank:                       1,
				ProjectedMetrics: []types.RDSDatabaseProjectedMetric{
					{
						Name: types.RDSDBMetricName("CPU"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						Values: []float64{
							1.0,
							1.0,
						},
					},
					{
						Name: types.RDSDBMetricName("CPU"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						Values: []float64{
							1.0,
							1.0,
						},
					},
				},
			},
			{
				RecommendedDBInstanceClass: ptr.String("__RecommendedDBInstanceClass__"),
				Rank:                       1,
				ProjectedMetrics: []types.RDSDatabaseProjectedMetric{
					{
						Name: types.RDSDBMetricName("CPU"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						Values: []float64{
							1.0,
							1.0,
						},
					},
					{
						Name: types.RDSDBMetricName("CPU"),
						Timestamps: []time.Time{
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
							time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
						},
						Values: []float64{
							1.0,
							1.0,
						},
					},
				},
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetRDSDatabaseRecommendationProjectedMetrics.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetRDSDatabaseRecommendationProjectedMetrics(context.Background(), &GetRDSDatabaseRecommendationProjectedMetricsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetRDSDatabaseRecommendationProjectedMetrics.response", err)
	}
}

func TestCheckResponseSnapshot_GetRDSDatabaseRecommendations(t *testing.T) {
	want := &GetRDSDatabaseRecommendationsOutput{
		NextToken: ptr.String("__NextToken__"),
		RdsDBRecommendations: []types.RDSDBRecommendation{
			{
				ResourceArn:            ptr.String("__ResourceArn__"),
				AccountId:              ptr.String("__AccountId__"),
				Engine:                 ptr.String("__Engine__"),
				EngineVersion:          ptr.String("__EngineVersion__"),
				PromotionTier:          ptr.Int32(1),
				CurrentDBInstanceClass: ptr.String("__CurrentDBInstanceClass__"),
				CurrentStorageConfiguration: &types.DBStorageConfiguration{
					StorageType:         ptr.String("__StorageType__"),
					AllocatedStorage:    1,
					Iops:                ptr.Int32(1),
					MaxAllocatedStorage: ptr.Int32(1),
					StorageThroughput:   ptr.Int32(1),
				},
				DbClusterIdentifier: ptr.String("__DbClusterIdentifier__"),
				Idle:                types.Idle("True"),
				InstanceFinding:     types.RDSInstanceFinding("Optimized"),
				StorageFinding:      types.RDSStorageFinding("Optimized"),
				InstanceFindingReasonCodes: []types.RDSInstanceFindingReasonCode{
					types.RDSInstanceFindingReasonCode("CPUOverprovisioned"),
					types.RDSInstanceFindingReasonCode("CPUOverprovisioned"),
				},
				CurrentInstancePerformanceRisk:                        types.RDSCurrentInstancePerformanceRisk("VeryLow"),
				CurrentStorageEstimatedMonthlyVolumeIOPsCostVariation: types.RDSEstimatedMonthlyVolumeIOPsCostVariation("None"),
				StorageFindingReasonCodes: []types.RDSStorageFindingReasonCode{
					types.RDSStorageFindingReasonCode("EBSVolumeAllocatedStorageUnderprovisioned"),
					types.RDSStorageFindingReasonCode("EBSVolumeAllocatedStorageUnderprovisioned"),
				},
				InstanceRecommendationOptions: []types.RDSDBInstanceRecommendationOption{
					{
						DbInstanceClass: ptr.String("__DbInstanceClass__"),
						ProjectedUtilizationMetrics: []types.RDSDBUtilizationMetric{
							{
								Name:      types.RDSDBMetricName("CPU"),
								Statistic: types.RDSDBMetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.RDSDBMetricName("CPU"),
								Statistic: types.RDSDBMetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.RDSInstanceSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.RDSInstanceEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
					{
						DbInstanceClass: ptr.String("__DbInstanceClass__"),
						ProjectedUtilizationMetrics: []types.RDSDBUtilizationMetric{
							{
								Name:      types.RDSDBMetricName("CPU"),
								Statistic: types.RDSDBMetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.RDSDBMetricName("CPU"),
								Statistic: types.RDSDBMetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.RDSInstanceSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.RDSInstanceEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
				},
				StorageRecommendationOptions: []types.RDSDBStorageRecommendationOption{
					{
						StorageConfiguration: &types.DBStorageConfiguration{
							StorageType:         ptr.String("__StorageType__"),
							AllocatedStorage:    1,
							Iops:                ptr.Int32(1),
							MaxAllocatedStorage: ptr.Int32(1),
							StorageThroughput:   ptr.Int32(1),
						},
						Rank: 1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.RDSStorageSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.RDSStorageEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						EstimatedMonthlyVolumeIOPsCostVariation: types.RDSEstimatedMonthlyVolumeIOPsCostVariation("None"),
					},
					{
						StorageConfiguration: &types.DBStorageConfiguration{
							StorageType:         ptr.String("__StorageType__"),
							AllocatedStorage:    1,
							Iops:                ptr.Int32(1),
							MaxAllocatedStorage: ptr.Int32(1),
							StorageThroughput:   ptr.Int32(1),
						},
						Rank: 1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.RDSStorageSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.RDSStorageEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						EstimatedMonthlyVolumeIOPsCostVariation: types.RDSEstimatedMonthlyVolumeIOPsCostVariation("None"),
					},
				},
				UtilizationMetrics: []types.RDSDBUtilizationMetric{
					{
						Name:      types.RDSDBMetricName("CPU"),
						Statistic: types.RDSDBMetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.RDSDBMetricName("CPU"),
						Statistic: types.RDSDBMetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				EffectiveRecommendationPreferences: &types.RDSEffectiveRecommendationPreferences{
					CpuVendorArchitectures: []types.CpuVendorArchitecture{
						types.CpuVendorArchitecture("AWS_ARM64"),
						types.CpuVendorArchitecture("AWS_ARM64"),
					},
					EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
					LookBackPeriod:                types.LookBackPeriodPreference("DAYS_14"),
					SavingsEstimationMode: &types.RDSSavingsEstimationMode{
						Source: types.RDSSavingsEstimationModeSource("PublicPricing"),
					},
				},
				LookbackPeriodInDays: 1.0,
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
			{
				ResourceArn:            ptr.String("__ResourceArn__"),
				AccountId:              ptr.String("__AccountId__"),
				Engine:                 ptr.String("__Engine__"),
				EngineVersion:          ptr.String("__EngineVersion__"),
				PromotionTier:          ptr.Int32(1),
				CurrentDBInstanceClass: ptr.String("__CurrentDBInstanceClass__"),
				CurrentStorageConfiguration: &types.DBStorageConfiguration{
					StorageType:         ptr.String("__StorageType__"),
					AllocatedStorage:    1,
					Iops:                ptr.Int32(1),
					MaxAllocatedStorage: ptr.Int32(1),
					StorageThroughput:   ptr.Int32(1),
				},
				DbClusterIdentifier: ptr.String("__DbClusterIdentifier__"),
				Idle:                types.Idle("True"),
				InstanceFinding:     types.RDSInstanceFinding("Optimized"),
				StorageFinding:      types.RDSStorageFinding("Optimized"),
				InstanceFindingReasonCodes: []types.RDSInstanceFindingReasonCode{
					types.RDSInstanceFindingReasonCode("CPUOverprovisioned"),
					types.RDSInstanceFindingReasonCode("CPUOverprovisioned"),
				},
				CurrentInstancePerformanceRisk:                        types.RDSCurrentInstancePerformanceRisk("VeryLow"),
				CurrentStorageEstimatedMonthlyVolumeIOPsCostVariation: types.RDSEstimatedMonthlyVolumeIOPsCostVariation("None"),
				StorageFindingReasonCodes: []types.RDSStorageFindingReasonCode{
					types.RDSStorageFindingReasonCode("EBSVolumeAllocatedStorageUnderprovisioned"),
					types.RDSStorageFindingReasonCode("EBSVolumeAllocatedStorageUnderprovisioned"),
				},
				InstanceRecommendationOptions: []types.RDSDBInstanceRecommendationOption{
					{
						DbInstanceClass: ptr.String("__DbInstanceClass__"),
						ProjectedUtilizationMetrics: []types.RDSDBUtilizationMetric{
							{
								Name:      types.RDSDBMetricName("CPU"),
								Statistic: types.RDSDBMetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.RDSDBMetricName("CPU"),
								Statistic: types.RDSDBMetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.RDSInstanceSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.RDSInstanceEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
					{
						DbInstanceClass: ptr.String("__DbInstanceClass__"),
						ProjectedUtilizationMetrics: []types.RDSDBUtilizationMetric{
							{
								Name:      types.RDSDBMetricName("CPU"),
								Statistic: types.RDSDBMetricStatistic("Maximum"),
								Value:     1.0,
							},
							{
								Name:      types.RDSDBMetricName("CPU"),
								Statistic: types.RDSDBMetricStatistic("Maximum"),
								Value:     1.0,
							},
						},
						PerformanceRisk: 1.0,
						Rank:            1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.RDSInstanceSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.RDSInstanceEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
					},
				},
				StorageRecommendationOptions: []types.RDSDBStorageRecommendationOption{
					{
						StorageConfiguration: &types.DBStorageConfiguration{
							StorageType:         ptr.String("__StorageType__"),
							AllocatedStorage:    1,
							Iops:                ptr.Int32(1),
							MaxAllocatedStorage: ptr.Int32(1),
							StorageThroughput:   ptr.Int32(1),
						},
						Rank: 1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.RDSStorageSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.RDSStorageEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						EstimatedMonthlyVolumeIOPsCostVariation: types.RDSEstimatedMonthlyVolumeIOPsCostVariation("None"),
					},
					{
						StorageConfiguration: &types.DBStorageConfiguration{
							StorageType:         ptr.String("__StorageType__"),
							AllocatedStorage:    1,
							Iops:                ptr.Int32(1),
							MaxAllocatedStorage: ptr.Int32(1),
							StorageThroughput:   ptr.Int32(1),
						},
						Rank: 1,
						SavingsOpportunity: &types.SavingsOpportunity{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						SavingsOpportunityAfterDiscounts: &types.RDSStorageSavingsOpportunityAfterDiscounts{
							SavingsOpportunityPercentage: 1.0,
							EstimatedMonthlySavings: &types.RDSStorageEstimatedMonthlySavings{
								Currency: types.Currency("USD"),
								Value:    1.0,
							},
						},
						EstimatedMonthlyVolumeIOPsCostVariation: types.RDSEstimatedMonthlyVolumeIOPsCostVariation("None"),
					},
				},
				UtilizationMetrics: []types.RDSDBUtilizationMetric{
					{
						Name:      types.RDSDBMetricName("CPU"),
						Statistic: types.RDSDBMetricStatistic("Maximum"),
						Value:     1.0,
					},
					{
						Name:      types.RDSDBMetricName("CPU"),
						Statistic: types.RDSDBMetricStatistic("Maximum"),
						Value:     1.0,
					},
				},
				EffectiveRecommendationPreferences: &types.RDSEffectiveRecommendationPreferences{
					CpuVendorArchitectures: []types.CpuVendorArchitecture{
						types.CpuVendorArchitecture("AWS_ARM64"),
						types.CpuVendorArchitecture("AWS_ARM64"),
					},
					EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
					LookBackPeriod:                types.LookBackPeriodPreference("DAYS_14"),
					SavingsEstimationMode: &types.RDSSavingsEstimationMode{
						Source: types.RDSSavingsEstimationModeSource("PublicPricing"),
					},
				},
				LookbackPeriodInDays: 1.0,
				LastRefreshTimestamp: ptr.Time(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
				Tags: []types.Tag{
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
					{
						Key:   ptr.String("__Key__"),
						Value: ptr.String("__Value__"),
					},
				},
			},
		},
		Errors: []types.GetRecommendationError{
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
			{
				Identifier: ptr.String("__Identifier__"),
				Code:       ptr.String("__Code__"),
				Message:    ptr.String("__Message__"),
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetRDSDatabaseRecommendations.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetRDSDatabaseRecommendations(context.Background(), &GetRDSDatabaseRecommendationsInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetRDSDatabaseRecommendations.response", err)
	}
}

func TestCheckResponseSnapshot_GetRecommendationPreferences(t *testing.T) {
	want := &GetRecommendationPreferencesOutput{
		NextToken: ptr.String("__NextToken__"),
		RecommendationPreferencesDetails: []types.RecommendationPreferencesDetail{
			{
				Scope: &types.Scope{
					Name:  types.ScopeName("Organization"),
					Value: ptr.String("__Value__"),
				},
				ResourceType:                  types.ResourceType("Ec2Instance"),
				EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
				InferredWorkloadTypes:         types.InferredWorkloadTypesPreference("Active"),
				ExternalMetricsPreference: &types.ExternalMetricsPreference{
					Source: types.ExternalMetricsSource("Datadog"),
				},
				LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
				UtilizationPreferences: []types.UtilizationPreference{
					{
						MetricName: types.CustomizableMetricName("CpuUtilization"),
						MetricParameters: &types.CustomizableMetricParameters{
							Threshold: types.CustomizableMetricThreshold("P90"),
							Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
						},
					},
					{
						MetricName: types.CustomizableMetricName("CpuUtilization"),
						MetricParameters: &types.CustomizableMetricParameters{
							Threshold: types.CustomizableMetricThreshold("P90"),
							Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
						},
					},
				},
				PreferredResources: []types.EffectivePreferredResource{
					{
						Name: types.PreferredResourceName("Ec2InstanceTypes"),
						IncludeList: []string{
							"__Member__",
							"__Member__",
						},
						EffectiveIncludeList: []string{
							"__Member__",
							"__Member__",
						},
						ExcludeList: []string{
							"__Member__",
							"__Member__",
						},
					},
					{
						Name: types.PreferredResourceName("Ec2InstanceTypes"),
						IncludeList: []string{
							"__Member__",
							"__Member__",
						},
						EffectiveIncludeList: []string{
							"__Member__",
							"__Member__",
						},
						ExcludeList: []string{
							"__Member__",
							"__Member__",
						},
					},
				},
				SavingsEstimationMode: types.SavingsEstimationMode("AfterDiscounts"),
			},
			{
				Scope: &types.Scope{
					Name:  types.ScopeName("Organization"),
					Value: ptr.String("__Value__"),
				},
				ResourceType:                  types.ResourceType("Ec2Instance"),
				EnhancedInfrastructureMetrics: types.EnhancedInfrastructureMetrics("Active"),
				InferredWorkloadTypes:         types.InferredWorkloadTypesPreference("Active"),
				ExternalMetricsPreference: &types.ExternalMetricsPreference{
					Source: types.ExternalMetricsSource("Datadog"),
				},
				LookBackPeriod: types.LookBackPeriodPreference("DAYS_14"),
				UtilizationPreferences: []types.UtilizationPreference{
					{
						MetricName: types.CustomizableMetricName("CpuUtilization"),
						MetricParameters: &types.CustomizableMetricParameters{
							Threshold: types.CustomizableMetricThreshold("P90"),
							Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
						},
					},
					{
						MetricName: types.CustomizableMetricName("CpuUtilization"),
						MetricParameters: &types.CustomizableMetricParameters{
							Threshold: types.CustomizableMetricThreshold("P90"),
							Headroom:  types.CustomizableMetricHeadroom("PERCENT_30"),
						},
					},
				},
				PreferredResources: []types.EffectivePreferredResource{
					{
						Name: types.PreferredResourceName("Ec2InstanceTypes"),
						IncludeList: []string{
							"__Member__",
							"__Member__",
						},
						EffectiveIncludeList: []string{
							"__Member__",
							"__Member__",
						},
						ExcludeList: []string{
							"__Member__",
							"__Member__",
						},
					},
					{
						Name: types.PreferredResourceName("Ec2InstanceTypes"),
						IncludeList: []string{
							"__Member__",
							"__Member__",
						},
						EffectiveIncludeList: []string{
							"__Member__",
							"__Member__",
						},
						ExcludeList: []string{
							"__Member__",
							"__Member__",
						},
					},
				},
				SavingsEstimationMode: types.SavingsEstimationMode("AfterDiscounts"),
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetRecommendationPreferences.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetRecommendationPreferences(context.Background(), &GetRecommendationPreferencesInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetRecommendationPreferences.response", err)
	}
}

func TestCheckResponseSnapshot_GetRecommendationSummaries(t *testing.T) {
	want := &GetRecommendationSummariesOutput{
		NextToken: ptr.String("__NextToken__"),
		RecommendationSummaries: []types.RecommendationSummary{
			{
				Summaries: []types.Summary{
					{
						Name:  types.Finding("Underprovisioned"),
						Value: 1.0,
						ReasonCodeSummaries: []types.ReasonCodeSummary{
							{
								Name:  types.FindingReasonCode("MemoryOverprovisioned"),
								Value: 1.0,
							},
							{
								Name:  types.FindingReasonCode("MemoryOverprovisioned"),
								Value: 1.0,
							},
						},
					},
					{
						Name:  types.Finding("Underprovisioned"),
						Value: 1.0,
						ReasonCodeSummaries: []types.ReasonCodeSummary{
							{
								Name:  types.FindingReasonCode("MemoryOverprovisioned"),
								Value: 1.0,
							},
							{
								Name:  types.FindingReasonCode("MemoryOverprovisioned"),
								Value: 1.0,
							},
						},
					},
				},
				IdleSummaries: []types.IdleSummary{
					{
						Name:  types.IdleFinding("Idle"),
						Value: 1.0,
					},
					{
						Name:  types.IdleFinding("Idle"),
						Value: 1.0,
					},
				},
				RecommendationResourceType: types.RecommendationSourceType("Ec2Instance"),
				AccountId:                  ptr.String("__AccountId__"),
				SavingsOpportunity: &types.SavingsOpportunity{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				IdleSavingsOpportunity: &types.SavingsOpportunity{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				AggregatedSavingsOpportunity: &types.SavingsOpportunity{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				CurrentPerformanceRiskRatings: &types.CurrentPerformanceRiskRatings{
					High:    1,
					Medium:  1,
					Low:     1,
					VeryLow: 1,
				},
				InferredWorkloadSavings: []types.InferredWorkloadSaving{
					{
						InferredWorkloadTypes: []types.InferredWorkloadType{
							types.InferredWorkloadType("AmazonEmr"),
							types.InferredWorkloadType("AmazonEmr"),
						},
						EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
							Currency: types.Currency("USD"),
							Value:    1.0,
						},
					},
					{
						InferredWorkloadTypes: []types.InferredWorkloadType{
							types.InferredWorkloadType("AmazonEmr"),
							types.InferredWorkloadType("AmazonEmr"),
						},
						EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
							Currency: types.Currency("USD"),
							Value:    1.0,
						},
					},
				},
			},
			{
				Summaries: []types.Summary{
					{
						Name:  types.Finding("Underprovisioned"),
						Value: 1.0,
						ReasonCodeSummaries: []types.ReasonCodeSummary{
							{
								Name:  types.FindingReasonCode("MemoryOverprovisioned"),
								Value: 1.0,
							},
							{
								Name:  types.FindingReasonCode("MemoryOverprovisioned"),
								Value: 1.0,
							},
						},
					},
					{
						Name:  types.Finding("Underprovisioned"),
						Value: 1.0,
						ReasonCodeSummaries: []types.ReasonCodeSummary{
							{
								Name:  types.FindingReasonCode("MemoryOverprovisioned"),
								Value: 1.0,
							},
							{
								Name:  types.FindingReasonCode("MemoryOverprovisioned"),
								Value: 1.0,
							},
						},
					},
				},
				IdleSummaries: []types.IdleSummary{
					{
						Name:  types.IdleFinding("Idle"),
						Value: 1.0,
					},
					{
						Name:  types.IdleFinding("Idle"),
						Value: 1.0,
					},
				},
				RecommendationResourceType: types.RecommendationSourceType("Ec2Instance"),
				AccountId:                  ptr.String("__AccountId__"),
				SavingsOpportunity: &types.SavingsOpportunity{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				IdleSavingsOpportunity: &types.SavingsOpportunity{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				AggregatedSavingsOpportunity: &types.SavingsOpportunity{
					SavingsOpportunityPercentage: 1.0,
					EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
						Currency: types.Currency("USD"),
						Value:    1.0,
					},
				},
				CurrentPerformanceRiskRatings: &types.CurrentPerformanceRiskRatings{
					High:    1,
					Medium:  1,
					Low:     1,
					VeryLow: 1,
				},
				InferredWorkloadSavings: []types.InferredWorkloadSaving{
					{
						InferredWorkloadTypes: []types.InferredWorkloadType{
							types.InferredWorkloadType("AmazonEmr"),
							types.InferredWorkloadType("AmazonEmr"),
						},
						EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
							Currency: types.Currency("USD"),
							Value:    1.0,
						},
					},
					{
						InferredWorkloadTypes: []types.InferredWorkloadType{
							types.InferredWorkloadType("AmazonEmr"),
							types.InferredWorkloadType("AmazonEmr"),
						},
						EstimatedMonthlySavings: &types.EstimatedMonthlySavings{
							Currency: types.Currency("USD"),
							Value:    1.0,
						},
					},
				},
			},
		},
	}
	status, header, body, err := serdeRespReadSnapshot("GetRecommendationSummaries.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.GetRecommendationSummaries(context.Background(), &GetRecommendationSummariesInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "GetRecommendationSummaries.response", err)
	}
}

func TestCheckResponseSnapshot_PutRecommendationPreferences(t *testing.T) {
	want := &PutRecommendationPreferencesOutput{}
	status, header, body, err := serdeRespReadSnapshot("PutRecommendationPreferences.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.PutRecommendationPreferences(context.Background(), &PutRecommendationPreferencesInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "PutRecommendationPreferences.response", err)
	}
}

func TestCheckResponseSnapshot_UpdateEnrollmentStatus(t *testing.T) {
	want := &UpdateEnrollmentStatusOutput{
		Status:       types.Status("Active"),
		StatusReason: ptr.String("__StatusReason__"),
	}
	status, header, body, err := serdeRespReadSnapshot("UpdateEnrollmentStatus.response")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	got, err := svc.UpdateEnrollmentStatus(context.Background(), &UpdateEnrollmentStatusInput{})
	if err != nil {
		t.Fatal(err)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("response snapshot mismatch for %s: %v", "UpdateEnrollmentStatus.response", err)
	}
}

func TestCheckResponseSnapshot_Error_AccessDeniedException(t *testing.T) {
	want := &types.AccessDeniedException{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("AccessDeniedException.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.AccessDeniedException
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.AccessDeniedException, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "AccessDeniedException.error", err)
	}
}

func TestCheckResponseSnapshot_Error_InternalServerException(t *testing.T) {
	want := &types.InternalServerException{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("InternalServerException.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.InternalServerException
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.InternalServerException, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "InternalServerException.error", err)
	}
}

func TestCheckResponseSnapshot_Error_InvalidParameterValueException(t *testing.T) {
	want := &types.InvalidParameterValueException{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("InvalidParameterValueException.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.InvalidParameterValueException
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.InvalidParameterValueException, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "InvalidParameterValueException.error", err)
	}
}

func TestCheckResponseSnapshot_Error_LimitExceededException(t *testing.T) {
	want := &types.LimitExceededException{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("LimitExceededException.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.ExportAutoScalingGroupRecommendations(context.Background(), &ExportAutoScalingGroupRecommendationsInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.LimitExceededException
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.LimitExceededException, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "LimitExceededException.error", err)
	}
}

func TestCheckResponseSnapshot_Error_MissingAuthenticationToken(t *testing.T) {
	want := &types.MissingAuthenticationToken{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("MissingAuthenticationToken.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.MissingAuthenticationToken
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.MissingAuthenticationToken, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "MissingAuthenticationToken.error", err)
	}
}

func TestCheckResponseSnapshot_Error_OptInRequiredException(t *testing.T) {
	want := &types.OptInRequiredException{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("OptInRequiredException.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.OptInRequiredException
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.OptInRequiredException, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "OptInRequiredException.error", err)
	}
}

func TestCheckResponseSnapshot_Error_ResourceNotFoundException(t *testing.T) {
	want := &types.ResourceNotFoundException{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("ResourceNotFoundException.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.ResourceNotFoundException
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.ResourceNotFoundException, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "ResourceNotFoundException.error", err)
	}
}

func TestCheckResponseSnapshot_Error_ServiceUnavailableException(t *testing.T) {
	want := &types.ServiceUnavailableException{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("ServiceUnavailableException.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.ServiceUnavailableException
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.ServiceUnavailableException, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "ServiceUnavailableException.error", err)
	}
}

func TestCheckResponseSnapshot_Error_ThrottlingException(t *testing.T) {
	want := &types.ThrottlingException{
		Message: ptr.String("__Message__"),
	}
	status, header, body, err := serdeRespReadSnapshot("ThrottlingException.error")
	if errors.Is(err, fs.ErrNotExist) {
		t.Skip("no response snapshot fixture")
	}
	if err != nil {
		t.Fatal(err)
	}
	svc := serdeRespClient(status, header, body)
	_, opErr := svc.DeleteRecommendationPreferences(context.Background(), &DeleteRecommendationPreferencesInput{})
	if opErr == nil {
		t.Fatal("expected error, got nil")
	}
	var got *types.ThrottlingException
	if !errors.As(opErr, &got) {
		t.Fatalf("expected types.ThrottlingException, got %v", opErr)
	}
	if err := smithytesting.CompareValues(want, got); err != nil {
		t.Errorf("error response snapshot mismatch for %s: %v", "ThrottlingException.error", err)
	}
}
