github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/resource_aws_cloudwatch_log_group_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "regexp" 6 "testing" 7 8 "github.com/aws/aws-sdk-go/service/cloudwatchlogs" 9 "github.com/hashicorp/terraform/helper/acctest" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAWSCloudWatchLogGroup_basic(t *testing.T) { 15 var lg cloudwatchlogs.LogGroup 16 rInt := acctest.RandInt() 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 Providers: testAccProviders, 21 CheckDestroy: testAccCheckAWSCloudWatchLogGroupDestroy, 22 Steps: []resource.TestStep{ 23 { 24 Config: testAccAWSCloudWatchLogGroupConfig(rInt), 25 Check: resource.ComposeTestCheckFunc( 26 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.foobar", &lg), 27 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "retention_in_days", "0"), 28 ), 29 }, 30 }, 31 }) 32 } 33 34 func TestAccAWSCloudWatchLogGroup_namePrefix(t *testing.T) { 35 var lg cloudwatchlogs.LogGroup 36 37 resource.Test(t, resource.TestCase{ 38 PreCheck: func() { testAccPreCheck(t) }, 39 Providers: testAccProviders, 40 CheckDestroy: testAccCheckAWSCloudWatchLogGroupDestroy, 41 Steps: []resource.TestStep{ 42 { 43 Config: testAccAWSCloudWatchLogGroup_namePrefix, 44 Check: resource.ComposeTestCheckFunc( 45 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.test", &lg), 46 resource.TestMatchResourceAttr("aws_cloudwatch_log_group.test", "name", regexp.MustCompile("^tf-test-")), 47 ), 48 }, 49 }, 50 }) 51 } 52 53 func TestAccAWSCloudWatchLogGroup_generatedName(t *testing.T) { 54 var lg cloudwatchlogs.LogGroup 55 56 resource.Test(t, resource.TestCase{ 57 PreCheck: func() { testAccPreCheck(t) }, 58 Providers: testAccProviders, 59 CheckDestroy: testAccCheckAWSCloudWatchLogGroupDestroy, 60 Steps: []resource.TestStep{ 61 { 62 Config: testAccAWSCloudWatchLogGroup_generatedName, 63 Check: resource.ComposeTestCheckFunc( 64 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.test", &lg), 65 ), 66 }, 67 }, 68 }) 69 } 70 71 func TestAccAWSCloudWatchLogGroup_retentionPolicy(t *testing.T) { 72 var lg cloudwatchlogs.LogGroup 73 rInt := acctest.RandInt() 74 75 resource.Test(t, resource.TestCase{ 76 PreCheck: func() { testAccPreCheck(t) }, 77 Providers: testAccProviders, 78 CheckDestroy: testAccCheckAWSCloudWatchLogGroupDestroy, 79 Steps: []resource.TestStep{ 80 { 81 Config: testAccAWSCloudWatchLogGroupConfig_withRetention(rInt), 82 Check: resource.ComposeTestCheckFunc( 83 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.foobar", &lg), 84 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "retention_in_days", "365"), 85 ), 86 }, 87 { 88 Config: testAccAWSCloudWatchLogGroupConfigModified_withRetention(rInt), 89 Check: resource.ComposeTestCheckFunc( 90 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.foobar", &lg), 91 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "retention_in_days", "0"), 92 ), 93 }, 94 }, 95 }) 96 } 97 98 func TestAccAWSCloudWatchLogGroup_multiple(t *testing.T) { 99 var lg cloudwatchlogs.LogGroup 100 rInt := acctest.RandInt() 101 102 resource.Test(t, resource.TestCase{ 103 PreCheck: func() { testAccPreCheck(t) }, 104 Providers: testAccProviders, 105 CheckDestroy: testAccCheckAWSCloudWatchLogGroupDestroy, 106 Steps: []resource.TestStep{ 107 { 108 Config: testAccAWSCloudWatchLogGroupConfig_multiple(rInt), 109 Check: resource.ComposeTestCheckFunc( 110 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.alpha", &lg), 111 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.alpha", "retention_in_days", "14"), 112 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.beta", &lg), 113 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.beta", "retention_in_days", "0"), 114 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.charlie", &lg), 115 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.charlie", "retention_in_days", "3653"), 116 ), 117 }, 118 }, 119 }) 120 } 121 122 func TestAccAWSCloudWatchLogGroup_disappears(t *testing.T) { 123 var lg cloudwatchlogs.LogGroup 124 rInt := acctest.RandInt() 125 126 resource.Test(t, resource.TestCase{ 127 PreCheck: func() { testAccPreCheck(t) }, 128 Providers: testAccProviders, 129 CheckDestroy: testAccCheckAWSCloudWatchLogGroupDestroy, 130 Steps: []resource.TestStep{ 131 { 132 Config: testAccAWSCloudWatchLogGroupConfig(rInt), 133 Check: resource.ComposeTestCheckFunc( 134 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.foobar", &lg), 135 testAccCheckCloudWatchLogGroupDisappears(&lg), 136 ), 137 ExpectNonEmptyPlan: true, 138 }, 139 }, 140 }) 141 } 142 143 func TestAccAWSCloudWatchLogGroup_tagging(t *testing.T) { 144 var lg cloudwatchlogs.LogGroup 145 rInt := acctest.RandInt() 146 147 resource.Test(t, resource.TestCase{ 148 PreCheck: func() { testAccPreCheck(t) }, 149 Providers: testAccProviders, 150 CheckDestroy: testAccCheckAWSCloudWatchLogGroupDestroy, 151 Steps: []resource.TestStep{ 152 { 153 Config: testAccAWSCloudWatchLogGroupConfigWithTags(rInt), 154 Check: resource.ComposeTestCheckFunc( 155 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.foobar", &lg), 156 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "tags.%", "2"), 157 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "tags.Environment", "Production"), 158 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "tags.Foo", "Bar"), 159 ), 160 }, 161 { 162 Config: testAccAWSCloudWatchLogGroupConfigWithTagsUpdated(rInt), 163 Check: resource.ComposeTestCheckFunc( 164 testAccCheckCloudWatchLogGroupExists("aws_cloudwatch_log_group.foobar", &lg), 165 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "tags.%", "3"), 166 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "tags.Environment", "Development"), 167 resource.TestCheckResourceAttr("aws_cloudwatch_log_group.foobar", "tags.Bar", "baz"), 168 ), 169 }, 170 }, 171 }) 172 } 173 174 func testAccCheckCloudWatchLogGroupDisappears(lg *cloudwatchlogs.LogGroup) resource.TestCheckFunc { 175 return func(s *terraform.State) error { 176 conn := testAccProvider.Meta().(*AWSClient).cloudwatchlogsconn 177 opts := &cloudwatchlogs.DeleteLogGroupInput{ 178 LogGroupName: lg.LogGroupName, 179 } 180 if _, err := conn.DeleteLogGroup(opts); err != nil { 181 return err 182 } 183 return nil 184 } 185 } 186 187 func testAccCheckCloudWatchLogGroupExists(n string, lg *cloudwatchlogs.LogGroup) resource.TestCheckFunc { 188 return func(s *terraform.State) error { 189 rs, ok := s.RootModule().Resources[n] 190 if !ok { 191 return fmt.Errorf("Not found: %s", n) 192 } 193 194 conn := testAccProvider.Meta().(*AWSClient).cloudwatchlogsconn 195 logGroup, exists, err := lookupCloudWatchLogGroup(conn, rs.Primary.ID, nil) 196 if err != nil { 197 return err 198 } 199 if !exists { 200 return fmt.Errorf("Bad: LogGroup %q does not exist", rs.Primary.ID) 201 } 202 203 *lg = *logGroup 204 205 return nil 206 } 207 } 208 209 func testAccCheckAWSCloudWatchLogGroupDestroy(s *terraform.State) error { 210 conn := testAccProvider.Meta().(*AWSClient).cloudwatchlogsconn 211 212 for _, rs := range s.RootModule().Resources { 213 if rs.Type != "aws_cloudwatch_log_group" { 214 continue 215 } 216 _, exists, err := lookupCloudWatchLogGroup(conn, rs.Primary.ID, nil) 217 if err != nil { 218 return nil 219 } 220 221 if exists { 222 return fmt.Errorf("Bad: LogGroup still exists: %q", rs.Primary.ID) 223 } 224 225 } 226 227 return nil 228 } 229 230 func testAccAWSCloudWatchLogGroupConfig(rInt int) string { 231 return fmt.Sprintf(` 232 resource "aws_cloudwatch_log_group" "foobar" { 233 name = "foo-bar-%d" 234 } 235 `, rInt) 236 } 237 238 func testAccAWSCloudWatchLogGroupConfigWithTags(rInt int) string { 239 return fmt.Sprintf(` 240 resource "aws_cloudwatch_log_group" "foobar" { 241 name = "foo-bar-%d" 242 243 tags { 244 Environment = "Production" 245 Foo = "Bar" 246 } 247 } 248 `, rInt) 249 } 250 251 func testAccAWSCloudWatchLogGroupConfigWithTagsUpdated(rInt int) string { 252 return fmt.Sprintf(` 253 resource "aws_cloudwatch_log_group" "foobar" { 254 name = "foo-bar-%d" 255 256 tags { 257 Environment = "Development" 258 Foo = "Bar" 259 Bar = "baz" 260 } 261 } 262 `, rInt) 263 } 264 265 func testAccAWSCloudWatchLogGroupConfig_withRetention(rInt int) string { 266 return fmt.Sprintf(` 267 resource "aws_cloudwatch_log_group" "foobar" { 268 name = "foo-bar-%d" 269 retention_in_days = 365 270 } 271 `, rInt) 272 } 273 274 func testAccAWSCloudWatchLogGroupConfigModified_withRetention(rInt int) string { 275 return fmt.Sprintf(` 276 resource "aws_cloudwatch_log_group" "foobar" { 277 name = "foo-bar-%d" 278 } 279 `, rInt) 280 } 281 282 func testAccAWSCloudWatchLogGroupConfig_multiple(rInt int) string { 283 return fmt.Sprintf(` 284 resource "aws_cloudwatch_log_group" "alpha" { 285 name = "foo-bar-%d" 286 retention_in_days = 14 287 } 288 resource "aws_cloudwatch_log_group" "beta" { 289 name = "foo-bar-%d" 290 } 291 resource "aws_cloudwatch_log_group" "charlie" { 292 name = "foo-bar-%d" 293 retention_in_days = 3653 294 } 295 `, rInt, rInt+1, rInt+2) 296 } 297 298 const testAccAWSCloudWatchLogGroup_namePrefix = ` 299 resource "aws_cloudwatch_log_group" "test" { 300 name_prefix = "tf-test-" 301 } 302 ` 303 304 const testAccAWSCloudWatchLogGroup_generatedName = ` 305 resource "aws_cloudwatch_log_group" "test" {} 306 `