github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/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 `