github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/resource_aws_flow_log_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/service/ec2"
     9  	"github.com/hashicorp/terraform/helper/acctest"
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  )
    13  
    14  func TestAccAWSFlowLog_basic(t *testing.T) {
    15  	var flowLog ec2.FlowLog
    16  
    17  	rInt := acctest.RandInt()
    18  
    19  	resource.Test(t, resource.TestCase{
    20  		PreCheck:      func() { testAccPreCheck(t) },
    21  		IDRefreshName: "aws_flow_log.test_flow_log",
    22  		Providers:     testAccProviders,
    23  		CheckDestroy:  testAccCheckFlowLogDestroy,
    24  		Steps: []resource.TestStep{
    25  			resource.TestStep{
    26  				Config: testAccFlowLogConfig_basic(rInt),
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckFlowLogExists("aws_flow_log.test_flow_log", &flowLog),
    29  					testAccCheckAWSFlowLogAttributes(&flowLog),
    30  				),
    31  			},
    32  		},
    33  	})
    34  }
    35  
    36  func TestAccAWSFlowLog_subnet(t *testing.T) {
    37  	var flowLog ec2.FlowLog
    38  
    39  	rInt := acctest.RandInt()
    40  
    41  	resource.Test(t, resource.TestCase{
    42  		PreCheck:      func() { testAccPreCheck(t) },
    43  		IDRefreshName: "aws_flow_log.test_flow_log_subnet",
    44  		Providers:     testAccProviders,
    45  		CheckDestroy:  testAccCheckFlowLogDestroy,
    46  		Steps: []resource.TestStep{
    47  			resource.TestStep{
    48  				Config: testAccFlowLogConfig_subnet(rInt),
    49  				Check: resource.ComposeTestCheckFunc(
    50  					testAccCheckFlowLogExists("aws_flow_log.test_flow_log_subnet", &flowLog),
    51  					testAccCheckAWSFlowLogAttributes(&flowLog),
    52  				),
    53  			},
    54  		},
    55  	})
    56  }
    57  
    58  func testAccCheckFlowLogExists(n string, flowLog *ec2.FlowLog) resource.TestCheckFunc {
    59  	return func(s *terraform.State) error {
    60  		rs, ok := s.RootModule().Resources[n]
    61  		if !ok {
    62  			return fmt.Errorf("Not found: %s", n)
    63  		}
    64  
    65  		if rs.Primary.ID == "" {
    66  			return fmt.Errorf("No Flow Log ID is set")
    67  		}
    68  
    69  		conn := testAccProvider.Meta().(*AWSClient).ec2conn
    70  		describeOpts := &ec2.DescribeFlowLogsInput{
    71  			FlowLogIds: []*string{aws.String(rs.Primary.ID)},
    72  		}
    73  		resp, err := conn.DescribeFlowLogs(describeOpts)
    74  		if err != nil {
    75  			return err
    76  		}
    77  
    78  		if len(resp.FlowLogs) > 0 {
    79  			*flowLog = *resp.FlowLogs[0]
    80  			return nil
    81  		}
    82  		return fmt.Errorf("No Flow Logs found for id (%s)", rs.Primary.ID)
    83  	}
    84  }
    85  
    86  func testAccCheckAWSFlowLogAttributes(flowLog *ec2.FlowLog) resource.TestCheckFunc {
    87  	return func(s *terraform.State) error {
    88  		if flowLog.FlowLogStatus != nil && *flowLog.FlowLogStatus == "ACTIVE" {
    89  			return nil
    90  		}
    91  		if flowLog.FlowLogStatus == nil {
    92  			return fmt.Errorf("Flow Log status is not ACTIVE, is nil")
    93  		} else {
    94  			return fmt.Errorf("Flow Log status is not ACTIVE, got: %s", *flowLog.FlowLogStatus)
    95  		}
    96  	}
    97  }
    98  
    99  func testAccCheckFlowLogDestroy(s *terraform.State) error {
   100  	for _, rs := range s.RootModule().Resources {
   101  		if rs.Type != "aws_flow_log" {
   102  			continue
   103  		}
   104  
   105  		return nil
   106  	}
   107  
   108  	return nil
   109  }
   110  
   111  func testAccFlowLogConfig_basic(rInt int) string {
   112  	return fmt.Sprintf(`
   113  resource "aws_vpc" "default" {
   114          cidr_block = "10.0.0.0/16"
   115          tags {
   116                  Name = "tf-flow-log-test"
   117          }
   118  }
   119  
   120  resource "aws_subnet" "test_subnet" {
   121          vpc_id = "${aws_vpc.default.id}"
   122          cidr_block = "10.0.1.0/24"
   123  
   124          tags {
   125                  Name = "tf-flow-test"
   126          }
   127  }
   128  
   129  resource "aws_iam_role" "test_role" {
   130      name = "tf_test_flow_log_basic_%d"
   131      assume_role_policy = <<EOF
   132  {
   133    "Version": "2012-10-17",
   134    "Statement": [
   135      {
   136        "Effect": "Allow",
   137        "Principal": {
   138          "Service": [
   139            "ec2.amazonaws.com"
   140          ]
   141        },
   142        "Action": [
   143          "sts:AssumeRole"
   144        ]
   145      }
   146    ]
   147  }
   148  EOF
   149  }
   150  
   151  resource "aws_cloudwatch_log_group" "foobar" {
   152      name = "tf-test-fl-%d"
   153  }
   154  resource "aws_flow_log" "test_flow_log" {
   155          log_group_name = "${aws_cloudwatch_log_group.foobar.name}"
   156          iam_role_arn = "${aws_iam_role.test_role.arn}"
   157          vpc_id = "${aws_vpc.default.id}"
   158          traffic_type = "ALL"
   159  }
   160  
   161  resource "aws_flow_log" "test_flow_log_subnet" {
   162          log_group_name = "${aws_cloudwatch_log_group.foobar.name}"
   163          iam_role_arn = "${aws_iam_role.test_role.arn}"
   164          subnet_id = "${aws_subnet.test_subnet.id}"
   165          traffic_type = "ALL"
   166  }
   167  `, rInt, rInt)
   168  }
   169  
   170  func testAccFlowLogConfig_subnet(rInt int) string {
   171  	return fmt.Sprintf(`
   172  resource "aws_vpc" "default" {
   173          cidr_block = "10.0.0.0/16"
   174          tags {
   175                  Name = "tf-flow-log-test"
   176          }
   177  }
   178  
   179  resource "aws_subnet" "test_subnet" {
   180          vpc_id = "${aws_vpc.default.id}"
   181          cidr_block = "10.0.1.0/24"
   182  
   183          tags {
   184                  Name = "tf-flow-test"
   185          }
   186  }
   187  
   188  resource "aws_iam_role" "test_role" {
   189      name = "tf_test_flow_log_subnet_%d"
   190      assume_role_policy = <<EOF
   191  {
   192    "Version": "2012-10-17",
   193    "Statement": [
   194      {
   195        "Effect": "Allow",
   196        "Principal": {
   197          "Service": [
   198            "ec2.amazonaws.com"
   199          ]
   200        },
   201        "Action": [
   202          "sts:AssumeRole"
   203        ]
   204      }
   205    ]
   206  }
   207  EOF
   208  }
   209  resource "aws_cloudwatch_log_group" "foobar" {
   210      name = "tf-test-fl-%d"
   211  }
   212  
   213  resource "aws_flow_log" "test_flow_log_subnet" {
   214          log_group_name = "${aws_cloudwatch_log_group.foobar.name}"
   215          iam_role_arn = "${aws_iam_role.test_role.arn}"
   216          subnet_id = "${aws_subnet.test_subnet.id}"
   217          traffic_type = "ALL"
   218  }
   219  `, rInt, rInt)
   220  }