         }
     }
 
+    /// test validation
+    func testAWSValidationFail<Input: AWSShape>(client: AWSClient, operation: String, path: String="/", httpMethod: String="POST", input: Input) {
+        do {
+            _ = try client.debugCreateAWSRequest(operation: operation, path: path, httpMethod: httpMethod, input: input)
+            XCTFail()
+        } catch AWSClientError.validationError(let message) {
+            print(message ?? "")
+        } catch {
+            XCTFail(error.localizedDescription)
+        }
+    }
+    
+    func testAWSValidationSuccess<Input: AWSShape>(client: AWSClient, operation: String, path: String="/", httpMethod: String="POST", input: Input) {
+        do {
+            _ = try client.debugCreateAWSRequest(operation: operation, path: path, httpMethod: httpMethod, input: input)
+        } catch {
+            XCTFail(error.localizedDescription)
+        }
+    }
+    
     func testS3PutBucketLifecycleConfigurationRequest() {
         let expectedResult = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><LifecycleConfiguration xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\"><Rule><AbortIncompleteMultipartUpload><DaysAfterInitiation>7</DaysAfterInitiation></AbortIncompleteMultipartUpload><Status>Enabled</Status></Rule><Rule><Expiration><Days>30</Days><ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker></Expiration><Filter><Prefix>temp</Prefix></Filter><Status>Enabled</Status></Rule><Rule><Status>Enabled</Status><Transition><Days>20</Days><StorageClass>GLACIER</StorageClass></Transition><Transition><Days>180</Days><StorageClass>DEEP_ARCHIVE</StorageClass></Transition></Rule><Rule><NoncurrentVersionExpiration><NoncurrentDays>90</NoncurrentDays></NoncurrentVersionExpiration><Status>Disabled</Status></Rule></LifecycleConfiguration>"
 

        testAWSShapeRequest(client: SES().client, operation: "SendEmail", input: request, expected: expectedResult)
    }

    static var allTests : [(String, (AWSRequestTests) -> () throws -> Void)] {
        return [
            ("testS3PutBucketLifecycleConfigurationRequest", testS3PutBucketLifecycleConfigurationRequest),

            ("testEC2CreateInstanceExportTask", testEC2CreateInstanceExportTask),
            ("testIAMSimulateCustomPolicy", testIAMSimulateCustomPolicy),
            ("testSESSendEmail", testSESSendEmail),
            ("testS3GetObjectAclValidate", testS3GetObjectAclValidate),
            ("testIAMAttachGroupPolicyValidate", testIAMAttachGroupPolicyValidate),
        ]
    }
}
