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  }