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(&params)
    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(&params)
    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)