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  }