{
    "version": 1,
    "defaults": {
        "configuration": {
            "accessKey": "myaccesskey",
            "sessionToken": "testsessiontoken",
            "region": "us-west-2",
            "environmentVariables": {
                "AWS_CSM_ENABLED": "true",
                "AWS_CSM_CLIENT_ID": "AwsPhpSdkTestApp"
            },
            "sharedConfigFile": {}
        },
        "optionalEventFields": {
            "ApiCall": {},
            "ApiCallAttempt": {}
        }
    },
    "cases": [
        {
            "description": "Test a client call with all PHP SDK event properties",
            "apiCalls": [
                {
                    "serviceId": "CSM Test",
                    "operationName": "TestOperation",
                    "params": {},
                    "attemptResponses": [
                        {
                            "httpStatus": 500,
                            "errorCode": "ServiceUnavailable",
                            "errorMessage": "Service is unavailable",
                            "totalTime": 0.33,
                            "primaryIp": "33.44.55.66",
                            "namelookupTime": 0.22,
                            "responseHeaders": {
                                "x-amz-request-id": "testrequestid1",
                                "x-amzn-RequestId": "testrequestid2",
                                "x-amz-id-2": "testamzid"
                            }
                        },
                        {
                            "httpStatus": 200,
                            "totalTime": 0.34,
                            "primaryIp": "44.55.66.77",
                            "namelookupTime": 0.23,
                            "responseHeaders": {
                                "x-amz-request-id": "testrequestid3",
                                "x-amzn-RequestId": "testrequestid4",
                                "x-amz-id-2": "testamzid2"
                            }
                        }
                    ]
                }
            ],
            "expectedMonitoringEvents": [
                {
                    "Type": "ApiCallAttempt",
                    "Service": "CSM Test",
                    "Api": "TestOperation",
                    "ClientId": "AwsPhpSdkTestApp",
                    "Version": 1,
                    "Timestamp": "ANY_INT",
                    "AttemptLatency": 330,
                    "Fqdn": "csmtest.us-west-2.amazonaws.com",
                    "UserAgent": "ANY_STR",
                    "Region": "us-west-2",
                    "AccessKey": "myaccesskey",
                    "HttpStatusCode": 500,
                    "AwsException": "ServiceUnavailable",
                    "AwsExceptionMessage": "Service is unavailable",
                    "DestinationIp": "33.44.55.66",
                    "DnsLatency": 220,
                    "XAmzRequestId": "testrequestid1",
                    "XAmznRequestId": "testrequestid2",
                    "XAmzId2": "testamzid",
                    "SessionToken": "testsessiontoken"
                },
                {
                    "Type": "ApiCallAttempt",
                    "Service": "CSM Test",
                    "Api": "TestOperation",
                    "ClientId": "AwsPhpSdkTestApp",
                    "Version": 1,
                    "Timestamp": "ANY_INT",
                    "AttemptLatency": 340,
                    "Fqdn": "csmtest.us-west-2.amazonaws.com",
                    "UserAgent": "ANY_STR",
                    "Region": "us-west-2",
                    "AccessKey": "myaccesskey",
                    "HttpStatusCode": 200,
                    "DestinationIp": "44.55.66.77",
                    "DnsLatency": 230,
                    "XAmzRequestId": "testrequestid3",
                    "XAmznRequestId": "testrequestid4",
                    "XAmzId2": "testamzid2",
                    "SessionToken": "testsessiontoken"
                },
                {
                    "Type": "ApiCall",
                    "Service": "CSM Test",
                    "Region": "us-west-2",
                    "Api": "TestOperation",
                    "ClientId": "AwsPhpSdkTestApp",
                    "Timestamp": "ANY_INT",
                    "Version": 1,
                    "AttemptCount": 2,
                    "Latency": "ANY_INT",
                    "MaxRetriesExceeded": 0,
                    "UserAgent": "ANY_STR",
                    "FinalHttpStatusCode": 200
                }
            ]
        },
        {
            "description": "Test a single client API call that exceeds default max retries",
            "apiCalls": [
                {
                    "serviceId": "CSM Test",
                    "operationName": "TestOperation",
                    "params": {},
                    "attemptResponses": [
                        {
                            "httpStatus": 503,
                            "responseHeaders": {},
                            "errorCode": "ServiceUnavailable",
                            "errorMessage": "Service is unavailable"
                        },
                        {
                            "httpStatus": 503,
                            "responseHeaders": {},
                            "errorCode": "ServiceUnavailable",
                            "errorMessage": "Service is unavailable"
                        },
                        {
                            "httpStatus": 503,
                            "responseHeaders": {},
                            "errorCode": "ServiceUnavailable",
                            "errorMessage": "Service is unavailable"
                        },
                        {
                            "httpStatus": 503,
                            "responseHeaders": {},
                            "errorCode": "ServiceUnavailable",
                            "errorMessage": "Service is unavailable"
                        },
                        {
                            "httpStatus": 503,
                            "responseHeaders": {},
                            "errorCode": "ServiceUnavailable",
                            "errorMessage": "Service is unavailable"
                        }
                    ]
                }
            ],
            "expectedMonitoringEvents": [
                {
                    "Type": "ApiCallAttempt",
                    "Service": "CSM Test",
                    "Api": "TestOperation",
                    "ClientId": "AwsPhpSdkTestApp",
                    "Version": 1,
                    "Timestamp": "ANY_INT",
                    "AttemptLatency": "ANY_INT",
                    "Fqdn": "csmtest.us-west-2.amazonaws.com",
                    "UserAgent": "ANY_STR",
                    "Region": "us-west-2",
                    "AccessKey": "myaccesskey",
                    "HttpStatusCode": 503,
                    "DestinationIp": "ANY_STR",
                    "DnsLatency": "ANY_INT",
                    "AwsException": "ServiceUnavailable",
                    "AwsExceptionMessage": "Service is unavailable",
                    "SessionToken": "testsessiontoken"
                },
                {
                    "Type": "ApiCallAttempt",
                    "Service": "CSM Test",
                    "Api": "TestOperation",
                    "ClientId": "AwsPhpSdkTestApp",
                    "Version": 1,
                    "Timestamp": "ANY_INT",
                    "AttemptLatency": "ANY_INT",
                    "Fqdn": "csmtest.us-west-2.amazonaws.com",
                    "UserAgent": "ANY_STR",
                    "Region": "us-west-2",
                    "AccessKey": "myaccesskey",
                    "HttpStatusCode": 503,
                    "DestinationIp": "ANY_STR",
                    "DnsLatency": "ANY_INT",
                    "AwsException": "ServiceUnavailable",
                    "AwsExceptionMessage": "Service is unavailable",
                    "SessionToken": "testsessiontoken"
                },
                {
                    "Type": "ApiCallAttempt",
                    "Service": "CSM Test",
                    "Api": "TestOperation",
                    "ClientId": "AwsPhpSdkTestApp",
                    "Version": 1,
                    "Timestamp": "ANY_INT",
                    "AttemptLatency": "ANY_INT",
                    "Fqdn": "csmtest.us-west-2.amazonaws.com",
                    "UserAgent": "ANY_STR",
                    "Region": "us-west-2",
                    "AccessKey": "myaccesskey",
                    "HttpStatusCode": 503,
                    "DestinationIp": "ANY_STR",
                    "DnsLatency": "ANY_INT",
                    "AwsException": "ServiceUnavailable",
                    "AwsExceptionMessage": "Service is unavailable",
                    "SessionToken": "testsessiontoken"
                },
                {
                    "Type": "ApiCallAttempt",
                    "Service": "CSM Test",
                    "Api": "TestOperation",
                    "ClientId": "AwsPhpSdkTestApp",
                    "Version": 1,
                    "Timestamp": "ANY_INT",
                    "AttemptLatency": "ANY_INT",
                    "Fqdn": "csmtest.us-west-2.amazonaws.com",
                    "UserAgent": "ANY_STR",
                    "Region": "us-west-2",
                    "AccessKey": "myaccesskey",
                    "HttpStatusCode": 503,
                    "DestinationIp": "ANY_STR",
                    "DnsLatency": "ANY_INT",
                    "AwsException": "ServiceUnavailable",
                    "AwsExceptionMessage": "Service is unavailable",
                    "SessionToken": "testsessiontoken"
                },
                {
                    "Type": "ApiCall",
                    "Service": "CSM Test",
                    "Region": "us-west-2",
                    "Api": "TestOperation",
                    "ClientId": "AwsPhpSdkTestApp",
                    "Timestamp": "ANY_INT",
                    "Version": 1,
                    "AttemptCount": 4,
                    "Latency": "ANY_INT",
                    "MaxRetriesExceeded": 1,
                    "UserAgent": "ANY_STR",
                    "FinalHttpStatusCode": 503,
                    "FinalAwsException": "ServiceUnavailable",
                    "FinalAwsExceptionMessage": "Service is unavailable"
                }
            ]
        }
    ]
}
