github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/aws/resource_aws_ssm_maintenance_window_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/ssm" 9 "github.com/hashicorp/terraform/helper/acctest" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAWSSSMMaintenanceWindow_basic(t *testing.T) { 15 name := acctest.RandString(10) 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testAccCheckAWSSSMMaintenanceWindowDestroy, 20 Steps: []resource.TestStep{ 21 { 22 Config: testAccAWSSSMMaintenanceWindowBasicConfig(name), 23 Check: resource.ComposeTestCheckFunc( 24 testAccCheckAWSSSMMaintenanceWindowExists("aws_ssm_maintenance_window.foo"), 25 resource.TestCheckResourceAttr( 26 "aws_ssm_maintenance_window.foo", "schedule", "cron(0 16 ? * TUE *)"), 27 resource.TestCheckResourceAttr( 28 "aws_ssm_maintenance_window.foo", "duration", "3"), 29 resource.TestCheckResourceAttr( 30 "aws_ssm_maintenance_window.foo", "cutoff", "1"), 31 resource.TestCheckResourceAttr( 32 "aws_ssm_maintenance_window.foo", "name", fmt.Sprintf("maintenance-window-%s", name)), 33 ), 34 }, 35 { 36 Config: testAccAWSSSMMaintenanceWindowBasicConfigUpdated(name), 37 Check: resource.ComposeTestCheckFunc( 38 testAccCheckAWSSSMMaintenanceWindowExists("aws_ssm_maintenance_window.foo"), 39 resource.TestCheckResourceAttr( 40 "aws_ssm_maintenance_window.foo", "schedule", "cron(0 16 ? * WED *)"), 41 resource.TestCheckResourceAttr( 42 "aws_ssm_maintenance_window.foo", "duration", "10"), 43 resource.TestCheckResourceAttr( 44 "aws_ssm_maintenance_window.foo", "cutoff", "8"), 45 resource.TestCheckResourceAttr( 46 "aws_ssm_maintenance_window.foo", "name", fmt.Sprintf("updated-maintenance-window-%s", name)), 47 ), 48 }, 49 }, 50 }) 51 } 52 53 func testAccCheckAWSSSMMaintenanceWindowExists(n string) resource.TestCheckFunc { 54 return func(s *terraform.State) error { 55 rs, ok := s.RootModule().Resources[n] 56 if !ok { 57 return fmt.Errorf("Not found: %s", n) 58 } 59 60 if rs.Primary.ID == "" { 61 return fmt.Errorf("No SSM Maintenance Window ID is set") 62 } 63 64 conn := testAccProvider.Meta().(*AWSClient).ssmconn 65 66 resp, err := conn.DescribeMaintenanceWindows(&ssm.DescribeMaintenanceWindowsInput{ 67 Filters: []*ssm.MaintenanceWindowFilter{ 68 { 69 Key: aws.String("Name"), 70 Values: []*string{aws.String(rs.Primary.Attributes["name"])}, 71 }, 72 }, 73 }) 74 75 for _, i := range resp.WindowIdentities { 76 if *i.WindowId == rs.Primary.ID { 77 return nil 78 } 79 } 80 if err != nil { 81 return err 82 } 83 84 return fmt.Errorf("No AWS SSM Maintenance window found") 85 } 86 } 87 88 func testAccCheckAWSSSMMaintenanceWindowDestroy(s *terraform.State) error { 89 conn := testAccProvider.Meta().(*AWSClient).ssmconn 90 91 for _, rs := range s.RootModule().Resources { 92 if rs.Type != "aws_ssm_maintenance_window" { 93 continue 94 } 95 96 out, err := conn.DescribeMaintenanceWindows(&ssm.DescribeMaintenanceWindowsInput{ 97 Filters: []*ssm.MaintenanceWindowFilter{ 98 { 99 Key: aws.String("Name"), 100 Values: []*string{aws.String(rs.Primary.Attributes["name"])}, 101 }, 102 }, 103 }) 104 105 if err != nil { 106 return err 107 } 108 109 if len(out.WindowIdentities) > 0 { 110 return fmt.Errorf("Expected AWS SSM Maintenance Document to be gone, but was still found") 111 } 112 113 return nil 114 } 115 116 return nil 117 } 118 119 func testAccAWSSSMMaintenanceWindowBasicConfig(rName string) string { 120 return fmt.Sprintf(` 121 resource "aws_ssm_maintenance_window" "foo" { 122 name = "maintenance-window-%s" 123 schedule = "cron(0 16 ? * TUE *)" 124 duration = 3 125 cutoff = 1 126 } 127 128 `, rName) 129 } 130 131 func testAccAWSSSMMaintenanceWindowBasicConfigUpdated(rName string) string { 132 return fmt.Sprintf(` 133 resource "aws_ssm_maintenance_window" "foo" { 134 name = "updated-maintenance-window-%s" 135 schedule = "cron(0 16 ? * WED *)" 136 duration = 10 137 cutoff = 8 138 } 139 140 `, rName) 141 }