github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/data_source_aws_security_group_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/acctest"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  )
    11  
    12  func TestAccDataSourceAwsSecurityGroup(t *testing.T) {
    13  	rInt := acctest.RandInt()
    14  	resource.Test(t, resource.TestCase{
    15  		PreCheck:  func() { testAccPreCheck(t) },
    16  		Providers: testAccProviders,
    17  		Steps: []resource.TestStep{
    18  			{
    19  				Config: testAccDataSourceAwsSecurityGroupConfig(rInt),
    20  				Check: resource.ComposeTestCheckFunc(
    21  					testAccDataSourceAwsSecurityGroupCheck("data.aws_security_group.by_id"),
    22  					testAccDataSourceAwsSecurityGroupCheck("data.aws_security_group.by_tag"),
    23  					testAccDataSourceAwsSecurityGroupCheck("data.aws_security_group.by_filter"),
    24  					testAccDataSourceAwsSecurityGroupCheck("data.aws_security_group.by_name"),
    25  					testAccDataSourceAwsSecurityGroupCheckDefault("data.aws_security_group.default_by_name"),
    26  				),
    27  			},
    28  		},
    29  	})
    30  }
    31  
    32  func testAccDataSourceAwsSecurityGroupCheck(name string) resource.TestCheckFunc {
    33  	return func(s *terraform.State) error {
    34  		rs, ok := s.RootModule().Resources[name]
    35  		if !ok {
    36  			return fmt.Errorf("root module has no resource called %s", name)
    37  		}
    38  
    39  		SGRs, ok := s.RootModule().Resources["aws_security_group.test"]
    40  		if !ok {
    41  			return fmt.Errorf("can't find aws_security_group.test in state")
    42  		}
    43  		vpcRs, ok := s.RootModule().Resources["aws_vpc.test"]
    44  		if !ok {
    45  			return fmt.Errorf("can't find aws_vpc.test in state")
    46  		}
    47  		attr := rs.Primary.Attributes
    48  
    49  		if attr["id"] != SGRs.Primary.Attributes["id"] {
    50  			return fmt.Errorf(
    51  				"id is %s; want %s",
    52  				attr["id"],
    53  				SGRs.Primary.Attributes["id"],
    54  			)
    55  		}
    56  
    57  		if attr["vpc_id"] != vpcRs.Primary.Attributes["id"] {
    58  			return fmt.Errorf(
    59  				"vpc_id is %s; want %s",
    60  				attr["vpc_id"],
    61  				vpcRs.Primary.Attributes["id"],
    62  			)
    63  		}
    64  
    65  		if attr["tags.Name"] != "tf-acctest" {
    66  			return fmt.Errorf("bad Name tag %s", attr["tags.Name"])
    67  		}
    68  
    69  		return nil
    70  	}
    71  }
    72  
    73  func testAccDataSourceAwsSecurityGroupCheckDefault(name string) resource.TestCheckFunc {
    74  	return func(s *terraform.State) error {
    75  		rs, ok := s.RootModule().Resources[name]
    76  		if !ok {
    77  			return fmt.Errorf("root module has no resource called %s", name)
    78  		}
    79  
    80  		vpcRs, ok := s.RootModule().Resources["aws_vpc.test"]
    81  		if !ok {
    82  			return fmt.Errorf("can't find aws_vpc.test in state")
    83  		}
    84  		attr := rs.Primary.Attributes
    85  
    86  		if attr["id"] != vpcRs.Primary.Attributes["default_security_group_id"] {
    87  			return fmt.Errorf(
    88  				"id is %s; want %s",
    89  				attr["id"],
    90  				vpcRs.Primary.Attributes["default_security_group_id"],
    91  			)
    92  		}
    93  
    94  		return nil
    95  	}
    96  }
    97  
    98  func testAccDataSourceAwsSecurityGroupConfig(rInt int) string {
    99  	return fmt.Sprintf(`
   100  	provider "aws" {
   101  		region = "eu-west-1"
   102  	}
   103  	resource "aws_vpc" "test" {
   104  		cidr_block = "172.16.0.0/16"
   105  
   106  		tags {
   107  			Name = "terraform-testacc-subnet-data-source"
   108  		}
   109  	}
   110  
   111  	resource "aws_security_group" "test" {
   112  		vpc_id = "${aws_vpc.test.id}"
   113  		name = "test-%d"
   114  		tags {
   115  			Name = "tf-acctest"
   116  			Seed = "%d"
   117  		}
   118  	}
   119  
   120  	data "aws_security_group" "by_id" {
   121  		id = "${aws_security_group.test.id}"
   122  	}
   123  
   124  	data "aws_security_group" "by_name" {
   125  		name = "${aws_security_group.test.name}"
   126  	}
   127  
   128  	data "aws_security_group" "default_by_name" {
   129  		vpc_id = "${aws_vpc.test.id}"
   130  		name = "default"
   131  	}
   132  
   133  	data "aws_security_group" "by_tag" {
   134  		tags {
   135  			Seed = "${aws_security_group.test.tags["Seed"]}"
   136  		}
   137  	}
   138  
   139  	data "aws_security_group" "by_filter" {
   140  		filter {
   141  			name = "group-name"
   142  			values = ["${aws_security_group.test.name}"]
   143  		}
   144  	}`, rInt, rInt)
   145  }