github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/resource_aws_ssm_patch_baseline_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 TestAccAWSSSMPatchBaseline_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: testAccCheckAWSSSMPatchBaselineDestroy, 20 Steps: []resource.TestStep{ 21 { 22 Config: testAccAWSSSMPatchBaselineBasicConfig(name), 23 Check: resource.ComposeTestCheckFunc( 24 testAccCheckAWSSSMPatchBaselineExists("aws_ssm_patch_baseline.foo"), 25 resource.TestCheckResourceAttr( 26 "aws_ssm_patch_baseline.foo", "approved_patches.#", "1"), 27 resource.TestCheckResourceAttr( 28 "aws_ssm_patch_baseline.foo", "approved_patches.2062620480", "KB123456"), 29 resource.TestCheckResourceAttr( 30 "aws_ssm_patch_baseline.foo", "name", fmt.Sprintf("patch-baseline-%s", name)), 31 ), 32 }, 33 { 34 Config: testAccAWSSSMPatchBaselineBasicConfigUpdated(name), 35 Check: resource.ComposeTestCheckFunc( 36 testAccCheckAWSSSMPatchBaselineExists("aws_ssm_patch_baseline.foo"), 37 resource.TestCheckResourceAttr( 38 "aws_ssm_patch_baseline.foo", "approved_patches.#", "2"), 39 resource.TestCheckResourceAttr( 40 "aws_ssm_patch_baseline.foo", "approved_patches.2062620480", "KB123456"), 41 resource.TestCheckResourceAttr( 42 "aws_ssm_patch_baseline.foo", "approved_patches.2291496788", "KB456789"), 43 resource.TestCheckResourceAttr( 44 "aws_ssm_patch_baseline.foo", "name", fmt.Sprintf("updated-patch-baseline-%s", name)), 45 ), 46 }, 47 }, 48 }) 49 } 50 51 func testAccCheckAWSSSMPatchBaselineExists(n string) resource.TestCheckFunc { 52 return func(s *terraform.State) error { 53 rs, ok := s.RootModule().Resources[n] 54 if !ok { 55 return fmt.Errorf("Not found: %s", n) 56 } 57 58 if rs.Primary.ID == "" { 59 return fmt.Errorf("No SSM Patch Baseline ID is set") 60 } 61 62 conn := testAccProvider.Meta().(*AWSClient).ssmconn 63 64 resp, err := conn.DescribePatchBaselines(&ssm.DescribePatchBaselinesInput{ 65 Filters: []*ssm.PatchOrchestratorFilter{ 66 { 67 Key: aws.String("NAME_PREFIX"), 68 Values: []*string{aws.String(rs.Primary.Attributes["name"])}, 69 }, 70 }, 71 }) 72 73 for _, i := range resp.BaselineIdentities { 74 if *i.BaselineId == rs.Primary.ID { 75 return nil 76 } 77 } 78 if err != nil { 79 return err 80 } 81 82 return fmt.Errorf("No AWS SSM Patch Baseline found") 83 } 84 } 85 86 func testAccCheckAWSSSMPatchBaselineDestroy(s *terraform.State) error { 87 conn := testAccProvider.Meta().(*AWSClient).ssmconn 88 89 for _, rs := range s.RootModule().Resources { 90 if rs.Type != "aws_ssm_patch_baseline" { 91 continue 92 } 93 94 out, err := conn.DescribePatchBaselines(&ssm.DescribePatchBaselinesInput{ 95 Filters: []*ssm.PatchOrchestratorFilter{ 96 { 97 Key: aws.String("NAME_PREFIX"), 98 Values: []*string{aws.String(rs.Primary.Attributes["name"])}, 99 }, 100 }, 101 }) 102 103 if err != nil { 104 return err 105 } 106 107 if len(out.BaselineIdentities) > 0 { 108 return fmt.Errorf("Expected AWS SSM Patch Baseline to be gone, but was still found") 109 } 110 111 return nil 112 } 113 114 return nil 115 } 116 117 func testAccAWSSSMPatchBaselineBasicConfig(rName string) string { 118 return fmt.Sprintf(` 119 120 resource "aws_ssm_patch_baseline" "foo" { 121 name = "patch-baseline-%s" 122 approved_patches = ["KB123456"] 123 } 124 125 `, rName) 126 } 127 128 func testAccAWSSSMPatchBaselineBasicConfigUpdated(rName string) string { 129 return fmt.Sprintf(` 130 131 resource "aws_ssm_patch_baseline" "foo" { 132 name = "updated-patch-baseline-%s" 133 approved_patches = ["KB123456","KB456789"] 134 } 135 136 `, rName) 137 }