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