github.com/simonswine/terraform@v0.9.0-beta2/builtin/providers/aws/resource_aws_dms_replication_subnet_group_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	dms "github.com/aws/aws-sdk-go/service/databasemigrationservice"
     9  	"github.com/hashicorp/terraform/helper/acctest"
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/helper/schema"
    12  	"github.com/hashicorp/terraform/terraform"
    13  )
    14  
    15  func TestAccAwsDmsReplicationSubnetGroupBasic(t *testing.T) {
    16  	resourceName := "aws_dms_replication_subnet_group.dms_replication_subnet_group"
    17  	randId := acctest.RandString(8)
    18  
    19  	resource.Test(t, resource.TestCase{
    20  		PreCheck:     func() { testAccPreCheck(t) },
    21  		Providers:    testAccProviders,
    22  		CheckDestroy: dmsReplicationSubnetGroupDestroy,
    23  		Steps: []resource.TestStep{
    24  			{
    25  				Config: dmsReplicationSubnetGroupConfig(randId),
    26  				Check: resource.ComposeTestCheckFunc(
    27  					checkDmsReplicationSubnetGroupExists(resourceName),
    28  					resource.TestCheckResourceAttrSet(resourceName, "vpc_id"),
    29  				),
    30  			},
    31  			{
    32  				ResourceName:      resourceName,
    33  				ImportState:       true,
    34  				ImportStateVerify: true,
    35  			},
    36  			{
    37  				Config: dmsReplicationSubnetGroupConfigUpdate(randId),
    38  				Check: resource.ComposeTestCheckFunc(
    39  					checkDmsReplicationSubnetGroupExists(resourceName),
    40  				),
    41  			},
    42  		},
    43  	})
    44  }
    45  
    46  func checkDmsReplicationSubnetGroupExists(n string) resource.TestCheckFunc {
    47  	providers := []*schema.Provider{testAccProvider}
    48  	return checkDmsReplicationSubnetGroupExistsWithProviders(n, &providers)
    49  }
    50  
    51  func checkDmsReplicationSubnetGroupExistsWithProviders(n string, providers *[]*schema.Provider) 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 ID is set")
    60  		}
    61  		for _, provider := range *providers {
    62  			// Ignore if Meta is empty, this can happen for validation providers
    63  			if provider.Meta() == nil {
    64  				continue
    65  			}
    66  
    67  			conn := provider.Meta().(*AWSClient).dmsconn
    68  			_, err := conn.DescribeReplicationSubnetGroups(&dms.DescribeReplicationSubnetGroupsInput{
    69  				Filters: []*dms.Filter{
    70  					{
    71  						Name:   aws.String("replication-subnet-group-id"),
    72  						Values: []*string{aws.String(rs.Primary.ID)},
    73  					},
    74  				},
    75  			})
    76  
    77  			if err != nil {
    78  				return fmt.Errorf("DMS replication subnet group error: %v", err)
    79  			}
    80  			return nil
    81  		}
    82  
    83  		return fmt.Errorf("DMS replication subnet group not found")
    84  	}
    85  }
    86  
    87  func dmsReplicationSubnetGroupDestroy(s *terraform.State) error {
    88  	for _, rs := range s.RootModule().Resources {
    89  		if rs.Type != "aws_dms_replication_subnet_group" {
    90  			continue
    91  		}
    92  
    93  		err := checkDmsReplicationSubnetGroupExists(rs.Primary.ID)
    94  		if err == nil {
    95  			return fmt.Errorf("Found replication subnet group that was not destroyed: %s", rs.Primary.ID)
    96  		}
    97  	}
    98  
    99  	return nil
   100  }
   101  
   102  func dmsReplicationSubnetGroupConfig(randId string) string {
   103  	return fmt.Sprintf(`
   104  resource "aws_iam_role" "dms_iam_role" {
   105    name = "dms-vpc-role"
   106    assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"dms.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
   107  }
   108  
   109  resource "aws_iam_role_policy_attachment" "dms_iam_role_policy" {
   110    role = "${aws_iam_role.dms_iam_role.name}"
   111    policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole"
   112  }
   113  
   114  resource "aws_vpc" "dms_vpc" {
   115  	cidr_block = "10.1.0.0/16"
   116  	tags {
   117  		Name = "tf-test-dms-vpc-%[1]s"
   118  	}
   119  	depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"]
   120  }
   121  
   122  resource "aws_subnet" "dms_subnet_1" {
   123  	cidr_block = "10.1.1.0/24"
   124  	availability_zone = "us-west-2a"
   125  	vpc_id = "${aws_vpc.dms_vpc.id}"
   126  	tags {
   127  		Name = "tf-test-dms-subnet-%[1]s"
   128  	}
   129  	depends_on = ["aws_vpc.dms_vpc"]
   130  }
   131  
   132  resource "aws_subnet" "dms_subnet_2" {
   133  	cidr_block = "10.1.2.0/24"
   134  	availability_zone = "us-west-2b"
   135  	vpc_id = "${aws_vpc.dms_vpc.id}"
   136  	tags {
   137  		Name = "tf-test-dms-subnet-%[1]s"
   138  	}
   139  	depends_on = ["aws_vpc.dms_vpc"]
   140  }
   141  
   142  resource "aws_subnet" "dms_subnet_3" {
   143  	cidr_block = "10.1.3.0/24"
   144  	availability_zone = "us-west-2b"
   145  	vpc_id = "${aws_vpc.dms_vpc.id}"
   146  	tags {
   147  		Name = "tf-test-dms-subnet-%[1]s"
   148  	}
   149  	depends_on = ["aws_vpc.dms_vpc"]
   150  }
   151  
   152  resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" {
   153  	replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s"
   154  	replication_subnet_group_description = "terraform test for replication subnet group"
   155  	subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_2.id}"]
   156  	tags {
   157  		Name = "tf-test-dms-replication-subnet-group-%[1]s"
   158  		Update = "to-update"
   159  		Remove = "to-remove"
   160  	}
   161  }
   162  `, randId)
   163  }
   164  
   165  func dmsReplicationSubnetGroupConfigUpdate(randId string) string {
   166  	return fmt.Sprintf(`
   167  resource "aws_iam_role" "dms_iam_role" {
   168    name = "dms-vpc-role"
   169    assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"dms.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
   170  }
   171  
   172  resource "aws_iam_role_policy_attachment" "dms_iam_role_policy" {
   173    role = "${aws_iam_role.dms_iam_role.name}"
   174    policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole"
   175  }
   176  
   177  resource "aws_vpc" "dms_vpc" {
   178  	cidr_block = "10.1.0.0/16"
   179  	tags {
   180  		Name = "tf-test-dms-vpc-%[1]s"
   181  	}
   182  	depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"]
   183  }
   184  
   185  resource "aws_subnet" "dms_subnet_1" {
   186  	cidr_block = "10.1.1.0/24"
   187  	availability_zone = "us-west-2a"
   188  	vpc_id = "${aws_vpc.dms_vpc.id}"
   189  	tags {
   190  		Name = "tf-test-dms-subnet-%[1]s"
   191  	}
   192  	depends_on = ["aws_vpc.dms_vpc"]
   193  }
   194  
   195  resource "aws_subnet" "dms_subnet_2" {
   196  	cidr_block = "10.1.2.0/24"
   197  	availability_zone = "us-west-2b"
   198  	vpc_id = "${aws_vpc.dms_vpc.id}"
   199  	tags {
   200  		Name = "tf-test-dms-subnet-%[1]s"
   201  	}
   202  	depends_on = ["aws_vpc.dms_vpc"]
   203  }
   204  
   205  resource "aws_subnet" "dms_subnet_3" {
   206  	cidr_block = "10.1.3.0/24"
   207  	availability_zone = "us-west-2b"
   208  	vpc_id = "${aws_vpc.dms_vpc.id}"
   209  	tags {
   210  		Name = "tf-test-dms-subnet-%[1]s"
   211  	}
   212  	depends_on = ["aws_vpc.dms_vpc"]
   213  }
   214  
   215  resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" {
   216  	replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s"
   217  	replication_subnet_group_description = "terraform test for replication subnet group"
   218  	subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_3.id}"]
   219  	tags {
   220  		Name = "tf-test-dms-replication-subnet-group-%[1]s"
   221  		Update = "updated"
   222  		Add = "added"
   223  	}
   224  }
   225  `, randId)
   226  }