github.com/IBM-Cloud/terraform@v0.6.4-0.20170726051544-8872b87621df/builtin/providers/pagerduty/resource_pagerduty_service_test.go (about) 1 package pagerduty 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/PagerDuty/go-pagerduty" 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestAccPagerDutyService_Basic(t *testing.T) { 14 username := fmt.Sprintf("tf-%s", acctest.RandString(5)) 15 email := fmt.Sprintf("%s@foo.com", username) 16 escalationPolicy := fmt.Sprintf("tf-%s", acctest.RandString(5)) 17 service := fmt.Sprintf("tf-%s", acctest.RandString(5)) 18 serviceUpdated := fmt.Sprintf("tf-%s", acctest.RandString(5)) 19 20 resource.Test(t, resource.TestCase{ 21 PreCheck: func() { testAccPreCheck(t) }, 22 Providers: testAccProviders, 23 CheckDestroy: testAccCheckPagerDutyServiceDestroy, 24 Steps: []resource.TestStep{ 25 { 26 Config: testAccCheckPagerDutyServiceConfig(username, email, escalationPolicy, service), 27 Check: resource.ComposeTestCheckFunc( 28 testAccCheckPagerDutyServiceExists("pagerduty_service.foo"), 29 resource.TestCheckResourceAttr( 30 "pagerduty_service.foo", "name", service), 31 resource.TestCheckResourceAttr( 32 "pagerduty_service.foo", "description", "foo"), 33 resource.TestCheckResourceAttr( 34 "pagerduty_service.foo", "auto_resolve_timeout", "1800"), 35 resource.TestCheckResourceAttr( 36 "pagerduty_service.foo", "acknowledgement_timeout", "1800"), 37 resource.TestCheckResourceAttr( 38 "pagerduty_service.foo", "incident_urgency_rule.#", "1"), 39 resource.TestCheckResourceAttr( 40 "pagerduty_service.foo", "incident_urgency_rule.0.urgency", "high"), 41 resource.TestCheckResourceAttr( 42 "pagerduty_service.foo", "incident_urgency_rule.0.type", "constant"), 43 ), 44 }, 45 { 46 Config: testAccCheckPagerDutyServiceConfigUpdated(username, email, escalationPolicy, serviceUpdated), 47 Check: resource.ComposeTestCheckFunc( 48 testAccCheckPagerDutyServiceExists("pagerduty_service.foo"), 49 resource.TestCheckResourceAttr( 50 "pagerduty_service.foo", "name", serviceUpdated), 51 resource.TestCheckResourceAttr( 52 "pagerduty_service.foo", "description", "bar"), 53 resource.TestCheckResourceAttr( 54 "pagerduty_service.foo", "auto_resolve_timeout", "3600"), 55 resource.TestCheckResourceAttr( 56 "pagerduty_service.foo", "acknowledgement_timeout", "3600"), 57 resource.TestCheckResourceAttr( 58 "pagerduty_service.foo", "incident_urgency_rule.#", "1"), 59 resource.TestCheckResourceAttr( 60 "pagerduty_service.foo", "incident_urgency_rule.0.urgency", "high"), 61 resource.TestCheckResourceAttr( 62 "pagerduty_service.foo", "incident_urgency_rule.0.type", "constant"), 63 ), 64 }, 65 }, 66 }) 67 } 68 69 func TestAccPagerDutyService_BasicWithIncidentUrgencyRules(t *testing.T) { 70 username := fmt.Sprintf("tf-%s", acctest.RandString(5)) 71 email := fmt.Sprintf("%s@foo.com", username) 72 escalationPolicy := fmt.Sprintf("tf-%s", acctest.RandString(5)) 73 service := fmt.Sprintf("tf-%s", acctest.RandString(5)) 74 serviceUpdated := fmt.Sprintf("tf-%s", acctest.RandString(5)) 75 76 resource.Test(t, resource.TestCase{ 77 PreCheck: func() { testAccPreCheck(t) }, 78 Providers: testAccProviders, 79 CheckDestroy: testAccCheckPagerDutyServiceDestroy, 80 Steps: []resource.TestStep{ 81 { 82 Config: testAccCheckPagerDutyServiceWithIncidentUrgencyRulesConfig(username, email, escalationPolicy, service), 83 Check: resource.ComposeTestCheckFunc( 84 testAccCheckPagerDutyServiceExists("pagerduty_service.foo"), 85 resource.TestCheckResourceAttr( 86 "pagerduty_service.foo", "name", service), 87 resource.TestCheckResourceAttr( 88 "pagerduty_service.foo", "description", "foo"), 89 resource.TestCheckResourceAttr( 90 "pagerduty_service.foo", "auto_resolve_timeout", "1800"), 91 resource.TestCheckResourceAttr( 92 "pagerduty_service.foo", "acknowledgement_timeout", "1800"), 93 resource.TestCheckResourceAttr( 94 "pagerduty_service.foo", "incident_urgency_rule.#", "1"), 95 resource.TestCheckResourceAttr( 96 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.#", "1"), 97 resource.TestCheckResourceAttr( 98 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.0.type", "constant"), 99 resource.TestCheckResourceAttr( 100 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.0.urgency", "high"), 101 resource.TestCheckResourceAttr( 102 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.#", "1"), 103 resource.TestCheckResourceAttr( 104 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.0.type", "constant"), 105 resource.TestCheckResourceAttr( 106 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.0.urgency", "low"), 107 resource.TestCheckResourceAttr( 108 "pagerduty_service.foo", "incident_urgency_rule.0.type", "use_support_hours"), 109 resource.TestCheckResourceAttr( 110 "pagerduty_service.foo", "scheduled_actions.#", "1"), 111 resource.TestCheckResourceAttr( 112 "pagerduty_service.foo", "scheduled_actions.0.at.#", "1"), 113 resource.TestCheckResourceAttr( 114 "pagerduty_service.foo", "scheduled_actions.0.at.0.name", "support_hours_start"), 115 resource.TestCheckResourceAttr( 116 "pagerduty_service.foo", "scheduled_actions.0.to_urgency", "high"), 117 resource.TestCheckResourceAttr( 118 "pagerduty_service.foo", "scheduled_actions.0.type", "urgency_change"), 119 resource.TestCheckResourceAttr( 120 "pagerduty_service.foo", "support_hours.#", "1"), 121 resource.TestCheckResourceAttr( 122 "pagerduty_service.foo", "support_hours.0.days_of_week.#", "5"), 123 resource.TestCheckResourceAttr( 124 "pagerduty_service.foo", "support_hours.0.days_of_week.0", "1"), 125 resource.TestCheckResourceAttr( 126 "pagerduty_service.foo", "support_hours.0.days_of_week.1", "2"), 127 resource.TestCheckResourceAttr( 128 "pagerduty_service.foo", "support_hours.0.days_of_week.2", "3"), 129 resource.TestCheckResourceAttr( 130 "pagerduty_service.foo", "support_hours.0.days_of_week.3", "4"), 131 resource.TestCheckResourceAttr( 132 "pagerduty_service.foo", "support_hours.0.days_of_week.4", "5"), 133 resource.TestCheckResourceAttr( 134 "pagerduty_service.foo", "support_hours.0.end_time", "17:00:00"), 135 resource.TestCheckResourceAttr( 136 "pagerduty_service.foo", "support_hours.0.start_time", "09:00:00"), 137 resource.TestCheckResourceAttr( 138 "pagerduty_service.foo", "support_hours.0.time_zone", "America/Lima"), 139 resource.TestCheckResourceAttr( 140 "pagerduty_service.foo", "support_hours.0.type", "fixed_time_per_day"), 141 ), 142 }, 143 { 144 Config: testAccCheckPagerDutyServiceWithIncidentUrgencyRulesConfigUpdated(username, email, escalationPolicy, serviceUpdated), 145 Check: resource.ComposeTestCheckFunc( 146 testAccCheckPagerDutyServiceExists("pagerduty_service.foo"), 147 resource.TestCheckResourceAttr( 148 "pagerduty_service.foo", "name", serviceUpdated), 149 resource.TestCheckResourceAttr( 150 "pagerduty_service.foo", "description", "bar bar bar"), 151 resource.TestCheckResourceAttr( 152 "pagerduty_service.foo", "auto_resolve_timeout", "3600"), 153 resource.TestCheckResourceAttr( 154 "pagerduty_service.foo", "acknowledgement_timeout", "3600"), 155 resource.TestCheckResourceAttr( 156 "pagerduty_service.foo", "incident_urgency_rule.#", "1"), 157 resource.TestCheckResourceAttr( 158 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.#", "1"), 159 resource.TestCheckResourceAttr( 160 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.0.type", "constant"), 161 resource.TestCheckResourceAttr( 162 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.0.urgency", "high"), 163 resource.TestCheckResourceAttr( 164 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.#", "1"), 165 resource.TestCheckResourceAttr( 166 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.0.type", "constant"), 167 resource.TestCheckResourceAttr( 168 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.0.urgency", "low"), 169 resource.TestCheckResourceAttr( 170 "pagerduty_service.foo", "incident_urgency_rule.0.type", "use_support_hours"), 171 resource.TestCheckResourceAttr( 172 "pagerduty_service.foo", "scheduled_actions.#", "1"), 173 resource.TestCheckResourceAttr( 174 "pagerduty_service.foo", "scheduled_actions.0.at.#", "1"), 175 resource.TestCheckResourceAttr( 176 "pagerduty_service.foo", "scheduled_actions.0.at.0.name", "support_hours_start"), 177 resource.TestCheckResourceAttr( 178 "pagerduty_service.foo", "scheduled_actions.0.to_urgency", "high"), 179 resource.TestCheckResourceAttr( 180 "pagerduty_service.foo", "scheduled_actions.0.type", "urgency_change"), 181 resource.TestCheckResourceAttr( 182 "pagerduty_service.foo", "support_hours.#", "1"), 183 resource.TestCheckResourceAttr( 184 "pagerduty_service.foo", "support_hours.0.days_of_week.#", "5"), 185 resource.TestCheckResourceAttr( 186 "pagerduty_service.foo", "support_hours.0.days_of_week.0", "1"), 187 resource.TestCheckResourceAttr( 188 "pagerduty_service.foo", "support_hours.0.days_of_week.1", "2"), 189 resource.TestCheckResourceAttr( 190 "pagerduty_service.foo", "support_hours.0.days_of_week.2", "3"), 191 resource.TestCheckResourceAttr( 192 "pagerduty_service.foo", "support_hours.0.days_of_week.3", "4"), 193 resource.TestCheckResourceAttr( 194 "pagerduty_service.foo", "support_hours.0.days_of_week.4", "5"), 195 resource.TestCheckResourceAttr( 196 "pagerduty_service.foo", "support_hours.0.end_time", "17:00:00"), 197 resource.TestCheckResourceAttr( 198 "pagerduty_service.foo", "support_hours.0.start_time", "09:00:00"), 199 resource.TestCheckResourceAttr( 200 "pagerduty_service.foo", "support_hours.0.time_zone", "America/Lima"), 201 resource.TestCheckResourceAttr( 202 "pagerduty_service.foo", "support_hours.0.type", "fixed_time_per_day"), 203 ), 204 }, 205 }, 206 }) 207 } 208 209 func TestAccPagerDutyService_FromBasicToCustomIncidentUrgencyRules(t *testing.T) { 210 username := fmt.Sprintf("tf-%s", acctest.RandString(5)) 211 email := fmt.Sprintf("%s@foo.com", username) 212 escalationPolicy := fmt.Sprintf("tf-%s", acctest.RandString(5)) 213 service := fmt.Sprintf("tf-%s", acctest.RandString(5)) 214 serviceUpdated := fmt.Sprintf("tf-%s", acctest.RandString(5)) 215 216 resource.Test(t, resource.TestCase{ 217 PreCheck: func() { testAccPreCheck(t) }, 218 Providers: testAccProviders, 219 CheckDestroy: testAccCheckPagerDutyServiceDestroy, 220 Steps: []resource.TestStep{ 221 { 222 Config: testAccCheckPagerDutyServiceConfig(username, email, escalationPolicy, service), 223 Check: resource.ComposeTestCheckFunc( 224 testAccCheckPagerDutyServiceExists("pagerduty_service.foo"), 225 resource.TestCheckResourceAttr( 226 "pagerduty_service.foo", "name", service), 227 resource.TestCheckResourceAttr( 228 "pagerduty_service.foo", "description", "foo"), 229 resource.TestCheckResourceAttr( 230 "pagerduty_service.foo", "auto_resolve_timeout", "1800"), 231 resource.TestCheckResourceAttr( 232 "pagerduty_service.foo", "acknowledgement_timeout", "1800"), 233 resource.TestCheckResourceAttr( 234 "pagerduty_service.foo", "incident_urgency_rule.#", "1"), 235 resource.TestCheckResourceAttr( 236 "pagerduty_service.foo", "incident_urgency_rule.0.urgency", "high"), 237 resource.TestCheckResourceAttr( 238 "pagerduty_service.foo", "incident_urgency_rule.0.type", "constant"), 239 ), 240 }, 241 { 242 Config: testAccCheckPagerDutyServiceWithIncidentUrgencyRulesConfigUpdated(username, email, escalationPolicy, serviceUpdated), 243 Check: resource.ComposeTestCheckFunc( 244 testAccCheckPagerDutyServiceExists("pagerduty_service.foo"), 245 resource.TestCheckResourceAttr( 246 "pagerduty_service.foo", "name", serviceUpdated), 247 resource.TestCheckResourceAttr( 248 "pagerduty_service.foo", "description", "bar bar bar"), 249 resource.TestCheckResourceAttr( 250 "pagerduty_service.foo", "auto_resolve_timeout", "3600"), 251 resource.TestCheckResourceAttr( 252 "pagerduty_service.foo", "acknowledgement_timeout", "3600"), 253 resource.TestCheckResourceAttr( 254 "pagerduty_service.foo", "incident_urgency_rule.#", "1"), 255 resource.TestCheckResourceAttr( 256 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.#", "1"), 257 resource.TestCheckResourceAttr( 258 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.0.type", "constant"), 259 resource.TestCheckResourceAttr( 260 "pagerduty_service.foo", "incident_urgency_rule.0.during_support_hours.0.urgency", "high"), 261 resource.TestCheckResourceAttr( 262 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.#", "1"), 263 resource.TestCheckResourceAttr( 264 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.0.type", "constant"), 265 resource.TestCheckResourceAttr( 266 "pagerduty_service.foo", "incident_urgency_rule.0.outside_support_hours.0.urgency", "low"), 267 resource.TestCheckResourceAttr( 268 "pagerduty_service.foo", "incident_urgency_rule.0.type", "use_support_hours"), 269 resource.TestCheckResourceAttr( 270 "pagerduty_service.foo", "scheduled_actions.#", "1"), 271 resource.TestCheckResourceAttr( 272 "pagerduty_service.foo", "scheduled_actions.0.at.#", "1"), 273 resource.TestCheckResourceAttr( 274 "pagerduty_service.foo", "scheduled_actions.0.at.0.name", "support_hours_start"), 275 resource.TestCheckResourceAttr( 276 "pagerduty_service.foo", "scheduled_actions.0.to_urgency", "high"), 277 resource.TestCheckResourceAttr( 278 "pagerduty_service.foo", "scheduled_actions.0.type", "urgency_change"), 279 resource.TestCheckResourceAttr( 280 "pagerduty_service.foo", "support_hours.#", "1"), 281 resource.TestCheckResourceAttr( 282 "pagerduty_service.foo", "support_hours.0.days_of_week.#", "5"), 283 resource.TestCheckResourceAttr( 284 "pagerduty_service.foo", "support_hours.0.days_of_week.0", "1"), 285 resource.TestCheckResourceAttr( 286 "pagerduty_service.foo", "support_hours.0.days_of_week.1", "2"), 287 resource.TestCheckResourceAttr( 288 "pagerduty_service.foo", "support_hours.0.days_of_week.2", "3"), 289 resource.TestCheckResourceAttr( 290 "pagerduty_service.foo", "support_hours.0.days_of_week.3", "4"), 291 resource.TestCheckResourceAttr( 292 "pagerduty_service.foo", "support_hours.0.days_of_week.4", "5"), 293 resource.TestCheckResourceAttr( 294 "pagerduty_service.foo", "support_hours.0.end_time", "17:00:00"), 295 resource.TestCheckResourceAttr( 296 "pagerduty_service.foo", "support_hours.0.start_time", "09:00:00"), 297 resource.TestCheckResourceAttr( 298 "pagerduty_service.foo", "support_hours.0.time_zone", "America/Lima"), 299 resource.TestCheckResourceAttr( 300 "pagerduty_service.foo", "support_hours.0.type", "fixed_time_per_day"), 301 ), 302 }, 303 }, 304 }) 305 } 306 307 func testAccCheckPagerDutyServiceDestroy(s *terraform.State) error { 308 client := testAccProvider.Meta().(*pagerduty.Client) 309 for _, r := range s.RootModule().Resources { 310 if r.Type != "pagerduty_service" { 311 continue 312 } 313 314 _, err := client.GetService(r.Primary.ID, &pagerduty.GetServiceOptions{}) 315 316 if err == nil { 317 return fmt.Errorf("Service still exists") 318 } 319 320 } 321 return nil 322 } 323 324 func testAccCheckPagerDutyServiceExists(n string) resource.TestCheckFunc { 325 return func(s *terraform.State) error { 326 rs, ok := s.RootModule().Resources[n] 327 if !ok { 328 return fmt.Errorf("Not found: %s", n) 329 } 330 331 if rs.Primary.ID == "" { 332 return fmt.Errorf("No Service ID is set") 333 } 334 335 client := testAccProvider.Meta().(*pagerduty.Client) 336 337 found, err := client.GetService(rs.Primary.ID, &pagerduty.GetServiceOptions{}) 338 if err != nil { 339 return err 340 } 341 342 if found.ID != rs.Primary.ID { 343 return fmt.Errorf("Service not found: %v - %v", rs.Primary.ID, found) 344 } 345 346 return nil 347 } 348 } 349 350 func testAccCheckPagerDutyServiceConfig(username, email, escalationPolicy, service string) string { 351 return fmt.Sprintf(` 352 resource "pagerduty_user" "foo" { 353 name = "%s" 354 email = "%s" 355 color = "green" 356 role = "user" 357 job_title = "foo" 358 description = "foo" 359 } 360 361 resource "pagerduty_escalation_policy" "foo" { 362 name = "%s" 363 description = "bar" 364 num_loops = 2 365 rule { 366 escalation_delay_in_minutes = 10 367 target { 368 type = "user_reference" 369 id = "${pagerduty_user.foo.id}" 370 } 371 } 372 } 373 374 resource "pagerduty_service" "foo" { 375 name = "%s" 376 description = "foo" 377 auto_resolve_timeout = 1800 378 acknowledgement_timeout = 1800 379 escalation_policy = "${pagerduty_escalation_policy.foo.id}" 380 incident_urgency_rule { 381 type = "constant" 382 urgency = "high" 383 } 384 } 385 `, username, email, escalationPolicy, service) 386 } 387 388 func testAccCheckPagerDutyServiceConfigUpdated(username, email, escalationPolicy, service string) string { 389 return fmt.Sprintf(` 390 resource "pagerduty_user" "foo" { 391 name = "%s" 392 email = "%s" 393 color = "green" 394 role = "user" 395 job_title = "foo" 396 description = "foo" 397 } 398 399 resource "pagerduty_escalation_policy" "foo" { 400 name = "%s" 401 description = "bar" 402 num_loops = 2 403 404 rule { 405 escalation_delay_in_minutes = 10 406 target { 407 type = "user_reference" 408 id = "${pagerduty_user.foo.id}" 409 } 410 } 411 } 412 413 resource "pagerduty_service" "foo" { 414 name = "%s" 415 description = "bar" 416 auto_resolve_timeout = 3600 417 acknowledgement_timeout = 3600 418 419 escalation_policy = "${pagerduty_escalation_policy.foo.id}" 420 incident_urgency_rule { 421 type = "constant" 422 urgency = "high" 423 } 424 } 425 `, username, email, escalationPolicy, service) 426 } 427 428 func testAccCheckPagerDutyServiceWithIncidentUrgencyRulesConfig(username, email, escalationPolicy, service string) string { 429 return fmt.Sprintf(` 430 resource "pagerduty_user" "foo" { 431 name = "%s" 432 email = "%s" 433 color = "green" 434 role = "user" 435 job_title = "foo" 436 description = "foo" 437 } 438 439 resource "pagerduty_escalation_policy" "foo" { 440 name = "%s" 441 description = "bar" 442 num_loops = 2 443 444 rule { 445 escalation_delay_in_minutes = 10 446 target { 447 type = "user_reference" 448 id = "${pagerduty_user.foo.id}" 449 } 450 } 451 } 452 453 resource "pagerduty_service" "foo" { 454 name = "%s" 455 description = "foo" 456 auto_resolve_timeout = 1800 457 acknowledgement_timeout = 1800 458 escalation_policy = "${pagerduty_escalation_policy.foo.id}" 459 460 incident_urgency_rule { 461 type = "use_support_hours" 462 463 during_support_hours { 464 type = "constant" 465 urgency = "high" 466 } 467 outside_support_hours { 468 type = "constant" 469 urgency = "low" 470 } 471 } 472 473 support_hours = [{ 474 type = "fixed_time_per_day" 475 time_zone = "America/Lima" 476 start_time = "09:00:00" 477 end_time = "17:00:00" 478 days_of_week = [ 1, 2, 3, 4, 5 ] 479 }] 480 481 scheduled_actions { 482 type = "urgency_change" 483 to_urgency = "high" 484 at { 485 type = "named_time", 486 name = "support_hours_start" 487 } 488 } 489 } 490 `, username, email, escalationPolicy, service) 491 } 492 493 func testAccCheckPagerDutyServiceWithIncidentUrgencyRulesConfigUpdated(username, email, escalationPolicy, service string) string { 494 return fmt.Sprintf(` 495 resource "pagerduty_user" "foo" { 496 name = "%s" 497 email = "%s" 498 color = "green" 499 role = "user" 500 job_title = "foo" 501 description = "foo" 502 } 503 504 resource "pagerduty_escalation_policy" "foo" { 505 name = "%s" 506 description = "bar" 507 num_loops = 2 508 509 rule { 510 escalation_delay_in_minutes = 10 511 target { 512 type = "user_reference" 513 id = "${pagerduty_user.foo.id}" 514 } 515 } 516 } 517 518 resource "pagerduty_service" "foo" { 519 name = "%s" 520 description = "bar bar bar" 521 auto_resolve_timeout = 3600 522 acknowledgement_timeout = 3600 523 escalation_policy = "${pagerduty_escalation_policy.foo.id}" 524 525 incident_urgency_rule { 526 type = "use_support_hours" 527 during_support_hours { 528 type = "constant" 529 urgency = "high" 530 } 531 outside_support_hours { 532 type = "constant" 533 urgency = "low" 534 } 535 } 536 537 support_hours = [{ 538 type = "fixed_time_per_day" 539 time_zone = "America/Lima" 540 start_time = "09:00:00" 541 end_time = "17:00:00" 542 days_of_week = [ 1, 2, 3, 4, 5 ] 543 }] 544 545 scheduled_actions { 546 type = "urgency_change" 547 to_urgency = "high" 548 at { 549 type = "named_time", 550 name = "support_hours_start" 551 } 552 } 553 } 554 `, username, email, escalationPolicy, service) 555 }