github.com/mohanarpit/terraform@v0.6.16-0.20160909104007-291f29853544/builtin/providers/aws/resource_aws_cloudwatch_log_metric_filter_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/cloudwatchlogs"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  func TestAccAWSCloudWatchLogMetricFilter_basic(t *testing.T) {
    14  	var mf cloudwatchlogs.MetricFilter
    15  
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckAWSCloudWatchLogMetricFilterDestroy,
    20  		Steps: []resource.TestStep{
    21  			resource.TestStep{
    22  				Config: testAccAWSCloudWatchLogMetricFilterConfig,
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckCloudWatchLogMetricFilterExists("aws_cloudwatch_log_metric_filter.foobar", &mf),
    25  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "name", "MyAppAccessCount"),
    26  					testAccCheckCloudWatchLogMetricFilterName(&mf, "MyAppAccessCount"),
    27  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "pattern", ""),
    28  					testAccCheckCloudWatchLogMetricFilterPattern(&mf, ""),
    29  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "log_group_name", "MyApp/access.log"),
    30  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "metric_transformation.0.name", "EventCount"),
    31  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "metric_transformation.0.namespace", "YourNamespace"),
    32  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "metric_transformation.0.value", "1"),
    33  					testAccCheckCloudWatchLogMetricFilterTransformation(&mf, &cloudwatchlogs.MetricTransformation{
    34  						MetricName:      aws.String("EventCount"),
    35  						MetricNamespace: aws.String("YourNamespace"),
    36  						MetricValue:     aws.String("1"),
    37  					}),
    38  				),
    39  			},
    40  			resource.TestStep{
    41  				Config: testAccAWSCloudWatchLogMetricFilterConfigModified,
    42  				Check: resource.ComposeTestCheckFunc(
    43  					testAccCheckCloudWatchLogMetricFilterExists("aws_cloudwatch_log_metric_filter.foobar", &mf),
    44  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "name", "MyAppAccessCount"),
    45  					testAccCheckCloudWatchLogMetricFilterName(&mf, "MyAppAccessCount"),
    46  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "pattern", "{ $.errorCode = \"AccessDenied\" }"),
    47  					testAccCheckCloudWatchLogMetricFilterPattern(&mf, "{ $.errorCode = \"AccessDenied\" }"),
    48  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "log_group_name", "MyApp/access.log"),
    49  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "metric_transformation.0.name", "AccessDeniedCount"),
    50  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "metric_transformation.0.namespace", "MyNamespace"),
    51  					resource.TestCheckResourceAttr("aws_cloudwatch_log_metric_filter.foobar", "metric_transformation.0.value", "2"),
    52  					testAccCheckCloudWatchLogMetricFilterTransformation(&mf, &cloudwatchlogs.MetricTransformation{
    53  						MetricName:      aws.String("AccessDeniedCount"),
    54  						MetricNamespace: aws.String("MyNamespace"),
    55  						MetricValue:     aws.String("2"),
    56  					}),
    57  				),
    58  			},
    59  		},
    60  	})
    61  }
    62  
    63  func testAccCheckCloudWatchLogMetricFilterName(mf *cloudwatchlogs.MetricFilter, name string) resource.TestCheckFunc {
    64  	return func(s *terraform.State) error {
    65  		if name != *mf.FilterName {
    66  			return fmt.Errorf("Expected filter name: %q, given: %q", name, *mf.FilterName)
    67  		}
    68  		return nil
    69  	}
    70  }
    71  
    72  func testAccCheckCloudWatchLogMetricFilterPattern(mf *cloudwatchlogs.MetricFilter, pattern string) resource.TestCheckFunc {
    73  	return func(s *terraform.State) error {
    74  		if mf.FilterPattern == nil {
    75  			if pattern != "" {
    76  				return fmt.Errorf("Received empty filter pattern, expected: %q", pattern)
    77  			}
    78  			return nil
    79  		}
    80  
    81  		if pattern != *mf.FilterPattern {
    82  			return fmt.Errorf("Expected filter pattern: %q, given: %q", pattern, *mf.FilterPattern)
    83  		}
    84  		return nil
    85  	}
    86  }
    87  
    88  func testAccCheckCloudWatchLogMetricFilterTransformation(mf *cloudwatchlogs.MetricFilter,
    89  	t *cloudwatchlogs.MetricTransformation) resource.TestCheckFunc {
    90  	return func(s *terraform.State) error {
    91  		given := mf.MetricTransformations[0]
    92  		expected := t
    93  
    94  		if *given.MetricName != *expected.MetricName {
    95  			return fmt.Errorf("Expected metric name: %q, received: %q",
    96  				*expected.MetricName, *given.MetricName)
    97  		}
    98  
    99  		if *given.MetricNamespace != *expected.MetricNamespace {
   100  			return fmt.Errorf("Expected metric namespace: %q, received: %q",
   101  				*expected.MetricNamespace, *given.MetricNamespace)
   102  		}
   103  
   104  		if *given.MetricValue != *expected.MetricValue {
   105  			return fmt.Errorf("Expected metric value: %q, received: %q",
   106  				*expected.MetricValue, *given.MetricValue)
   107  		}
   108  
   109  		return nil
   110  	}
   111  }
   112  
   113  func testAccCheckCloudWatchLogMetricFilterExists(n string, mf *cloudwatchlogs.MetricFilter) resource.TestCheckFunc {
   114  	return func(s *terraform.State) error {
   115  		rs, ok := s.RootModule().Resources[n]
   116  		if !ok {
   117  			return fmt.Errorf("Not found: %s", n)
   118  		}
   119  
   120  		conn := testAccProvider.Meta().(*AWSClient).cloudwatchlogsconn
   121  		metricFilter, err := lookupCloudWatchLogMetricFilter(conn, rs.Primary.ID, rs.Primary.Attributes["log_group_name"], nil)
   122  		if err != nil {
   123  			return err
   124  		}
   125  
   126  		*mf = *metricFilter
   127  
   128  		return nil
   129  	}
   130  }
   131  
   132  func testAccCheckAWSCloudWatchLogMetricFilterDestroy(s *terraform.State) error {
   133  	conn := testAccProvider.Meta().(*AWSClient).cloudwatchlogsconn
   134  
   135  	for _, rs := range s.RootModule().Resources {
   136  		if rs.Type != "aws_cloudwatch_log_metric_filter" {
   137  			continue
   138  		}
   139  
   140  		_, err := lookupCloudWatchLogMetricFilter(conn, rs.Primary.ID, rs.Primary.Attributes["log_group_name"], nil)
   141  		if err == nil {
   142  			return fmt.Errorf("MetricFilter Still Exists: %s", rs.Primary.ID)
   143  		}
   144  	}
   145  
   146  	return nil
   147  }
   148  
   149  var testAccAWSCloudWatchLogMetricFilterConfig = `
   150  resource "aws_cloudwatch_log_metric_filter" "foobar" {
   151    name = "MyAppAccessCount"
   152    pattern = ""
   153    log_group_name = "${aws_cloudwatch_log_group.dada.name}"
   154  
   155    metric_transformation {
   156    	name = "EventCount"
   157    	namespace = "YourNamespace"
   158    	value = "1"
   159    }
   160  }
   161  
   162  resource "aws_cloudwatch_log_group" "dada" {
   163  	name = "MyApp/access.log"
   164  }
   165  `
   166  
   167  var testAccAWSCloudWatchLogMetricFilterConfigModified = `
   168  resource "aws_cloudwatch_log_metric_filter" "foobar" {
   169    name = "MyAppAccessCount"
   170    pattern = <<PATTERN
   171  { $.errorCode = "AccessDenied" }
   172  PATTERN
   173    log_group_name = "${aws_cloudwatch_log_group.dada.name}"
   174  
   175    metric_transformation {
   176    	name = "AccessDeniedCount"
   177    	namespace = "MyNamespace"
   178    	value = "2"
   179    }
   180  }
   181  
   182  resource "aws_cloudwatch_log_group" "dada" {
   183  	name = "MyApp/access.log"
   184  }
   185  `