github.com/wangzhucn/terraform@v0.6.7-0.20151109233120-4eea011b56b3/builtin/providers/aws/resource_aws_cloudtrail_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "math/rand" 6 "testing" 7 "time" 8 9 "github.com/aws/aws-sdk-go/aws" 10 "github.com/aws/aws-sdk-go/service/cloudtrail" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestAccAWSCloudTrail_basic(t *testing.T) { 16 var trail cloudtrail.Trail 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 Providers: testAccProviders, 21 CheckDestroy: testAccCheckAWSCloudTrailDestroy, 22 Steps: []resource.TestStep{ 23 resource.TestStep{ 24 Config: testAccAWSCloudTrailConfig, 25 Check: resource.ComposeTestCheckFunc( 26 testAccCheckCloudTrailExists("aws_cloudtrail.foobar", &trail), 27 resource.TestCheckResourceAttr("aws_cloudtrail.foobar", "include_global_service_events", "true"), 28 ), 29 }, 30 resource.TestStep{ 31 Config: testAccAWSCloudTrailConfigModified, 32 Check: resource.ComposeTestCheckFunc( 33 testAccCheckCloudTrailExists("aws_cloudtrail.foobar", &trail), 34 resource.TestCheckResourceAttr("aws_cloudtrail.foobar", "s3_key_prefix", "/prefix"), 35 resource.TestCheckResourceAttr("aws_cloudtrail.foobar", "include_global_service_events", "false"), 36 ), 37 }, 38 }, 39 }) 40 } 41 42 func testAccCheckCloudTrailExists(n string, trail *cloudtrail.Trail) resource.TestCheckFunc { 43 return func(s *terraform.State) error { 44 rs, ok := s.RootModule().Resources[n] 45 if !ok { 46 return fmt.Errorf("Not found: %s", n) 47 } 48 49 conn := testAccProvider.Meta().(*AWSClient).cloudtrailconn 50 params := cloudtrail.DescribeTrailsInput{ 51 TrailNameList: []*string{aws.String(rs.Primary.ID)}, 52 } 53 resp, err := conn.DescribeTrails(¶ms) 54 if err != nil { 55 return err 56 } 57 if len(resp.TrailList) == 0 { 58 return fmt.Errorf("Trail not found") 59 } 60 *trail = *resp.TrailList[0] 61 62 return nil 63 } 64 } 65 66 func testAccCheckAWSCloudTrailDestroy(s *terraform.State) error { 67 conn := testAccProvider.Meta().(*AWSClient).cloudtrailconn 68 69 for _, rs := range s.RootModule().Resources { 70 if rs.Type != "aws_cloudtrail" { 71 continue 72 } 73 74 params := cloudtrail.DescribeTrailsInput{ 75 TrailNameList: []*string{aws.String(rs.Primary.ID)}, 76 } 77 78 resp, err := conn.DescribeTrails(¶ms) 79 80 if err == nil { 81 if len(resp.TrailList) != 0 && 82 *resp.TrailList[0].Name == rs.Primary.ID { 83 return fmt.Errorf("CloudTrail still exists: %s", rs.Primary.ID) 84 } 85 } 86 } 87 88 return nil 89 } 90 91 var cloudTrailRandInt = rand.New(rand.NewSource(time.Now().UnixNano())).Int() 92 93 var testAccAWSCloudTrailConfig = fmt.Sprintf(` 94 resource "aws_cloudtrail" "foobar" { 95 name = "tf-trail-foobar" 96 s3_bucket_name = "${aws_s3_bucket.foo.id}" 97 } 98 99 resource "aws_s3_bucket" "foo" { 100 bucket = "tf-test-trail-%d" 101 force_destroy = true 102 policy = <<POLICY 103 { 104 "Version": "2012-10-17", 105 "Statement": [ 106 { 107 "Sid": "AWSCloudTrailAclCheck", 108 "Effect": "Allow", 109 "Principal": "*", 110 "Action": "s3:GetBucketAcl", 111 "Resource": "arn:aws:s3:::tf-test-trail-%d" 112 }, 113 { 114 "Sid": "AWSCloudTrailWrite", 115 "Effect": "Allow", 116 "Principal": "*", 117 "Action": "s3:PutObject", 118 "Resource": "arn:aws:s3:::tf-test-trail-%d/*", 119 "Condition": { 120 "StringEquals": { 121 "s3:x-amz-acl": "bucket-owner-full-control" 122 } 123 } 124 } 125 ] 126 } 127 POLICY 128 } 129 `, cloudTrailRandInt, cloudTrailRandInt, cloudTrailRandInt) 130 131 var testAccAWSCloudTrailConfigModified = fmt.Sprintf(` 132 resource "aws_cloudtrail" "foobar" { 133 name = "tf-trail-foobar" 134 s3_bucket_name = "${aws_s3_bucket.foo.id}" 135 s3_key_prefix = "/prefix" 136 include_global_service_events = false 137 } 138 139 resource "aws_s3_bucket" "foo" { 140 bucket = "tf-test-trail-%d" 141 force_destroy = true 142 policy = <<POLICY 143 { 144 "Version": "2012-10-17", 145 "Statement": [ 146 { 147 "Sid": "AWSCloudTrailAclCheck", 148 "Effect": "Allow", 149 "Principal": "*", 150 "Action": "s3:GetBucketAcl", 151 "Resource": "arn:aws:s3:::tf-test-trail-%d" 152 }, 153 { 154 "Sid": "AWSCloudTrailWrite", 155 "Effect": "Allow", 156 "Principal": "*", 157 "Action": "s3:PutObject", 158 "Resource": "arn:aws:s3:::tf-test-trail-%d/*", 159 "Condition": { 160 "StringEquals": { 161 "s3:x-amz-acl": "bucket-owner-full-control" 162 } 163 } 164 } 165 ] 166 } 167 POLICY 168 } 169 `, cloudTrailRandInt, cloudTrailRandInt, cloudTrailRandInt)