github.com/minamijoyo/terraform@v0.7.8-0.20161029001309-18b3736ba44b/builtin/providers/aws/resource_aws_api_gateway_api_key_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/aws/awserr" 10 "github.com/aws/aws-sdk-go/service/apigateway" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestAccAWSAPIGatewayApiKey_basic(t *testing.T) { 16 var conf apigateway.ApiKey 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 Providers: testAccProviders, 21 CheckDestroy: testAccCheckAWSAPIGatewayApiKeyDestroy, 22 Steps: []resource.TestStep{ 23 resource.TestStep{ 24 Config: testAccAWSAPIGatewayApiKeyConfig, 25 Check: resource.ComposeTestCheckFunc( 26 testAccCheckAWSAPIGatewayApiKeyExists("aws_api_gateway_api_key.test", &conf), 27 testAccCheckAWSAPIGatewayApiKeyStageKeyAttribute(&conf), 28 resource.TestCheckResourceAttr( 29 "aws_api_gateway_api_key.test", "name", "foo"), 30 resource.TestCheckResourceAttr( 31 "aws_api_gateway_api_key.test", "description", "Managed by Terraform"), 32 ), 33 }, 34 }, 35 }) 36 } 37 38 func testAccCheckAWSAPIGatewayApiKeyStageKeyAttribute(conf *apigateway.ApiKey) resource.TestCheckFunc { 39 return func(s *terraform.State) error { 40 if len(conf.StageKeys) != 1 { 41 return fmt.Errorf("Expected one apikey. Got %d", len(conf.StageKeys)) 42 } 43 if !strings.Contains(*conf.StageKeys[0], "test") { 44 return fmt.Errorf("Expected apikey for test. Got %q", *conf.StageKeys[0]) 45 } 46 return nil 47 } 48 } 49 50 func testAccCheckAWSAPIGatewayApiKeyExists(n string, res *apigateway.ApiKey) resource.TestCheckFunc { 51 return func(s *terraform.State) error { 52 rs, ok := s.RootModule().Resources[n] 53 if !ok { 54 return fmt.Errorf("Not found: %s", n) 55 } 56 57 if rs.Primary.ID == "" { 58 return fmt.Errorf("No API Gateway ApiKey ID is set") 59 } 60 61 conn := testAccProvider.Meta().(*AWSClient).apigateway 62 63 req := &apigateway.GetApiKeyInput{ 64 ApiKey: aws.String(rs.Primary.ID), 65 } 66 describe, err := conn.GetApiKey(req) 67 if err != nil { 68 return err 69 } 70 71 if *describe.Id != rs.Primary.ID { 72 return fmt.Errorf("APIGateway ApiKey not found") 73 } 74 75 *res = *describe 76 77 return nil 78 } 79 } 80 81 func testAccCheckAWSAPIGatewayApiKeyDestroy(s *terraform.State) error { 82 conn := testAccProvider.Meta().(*AWSClient).apigateway 83 84 for _, rs := range s.RootModule().Resources { 85 if rs.Type != "aws_api_gateway_api_key" { 86 continue 87 } 88 89 describe, err := conn.GetApiKeys(&apigateway.GetApiKeysInput{}) 90 91 if err == nil { 92 if len(describe.Items) != 0 && 93 *describe.Items[0].Id == rs.Primary.ID { 94 return fmt.Errorf("API Gateway ApiKey still exists") 95 } 96 } 97 98 aws2err, ok := err.(awserr.Error) 99 if !ok { 100 return err 101 } 102 if aws2err.Code() != "NotFoundException" { 103 return err 104 } 105 106 return nil 107 } 108 109 return nil 110 } 111 112 const testAccAWSAPIGatewayApiKeyConfig = ` 113 resource "aws_api_gateway_rest_api" "test" { 114 name = "test" 115 } 116 117 resource "aws_api_gateway_resource" "test" { 118 rest_api_id = "${aws_api_gateway_rest_api.test.id}" 119 parent_id = "${aws_api_gateway_rest_api.test.root_resource_id}" 120 path_part = "test" 121 } 122 123 resource "aws_api_gateway_method" "test" { 124 rest_api_id = "${aws_api_gateway_rest_api.test.id}" 125 resource_id = "${aws_api_gateway_resource.test.id}" 126 http_method = "GET" 127 authorization = "NONE" 128 } 129 130 resource "aws_api_gateway_method_response" "error" { 131 rest_api_id = "${aws_api_gateway_rest_api.test.id}" 132 resource_id = "${aws_api_gateway_resource.test.id}" 133 http_method = "${aws_api_gateway_method.test.http_method}" 134 status_code = "400" 135 } 136 137 resource "aws_api_gateway_integration" "test" { 138 rest_api_id = "${aws_api_gateway_rest_api.test.id}" 139 resource_id = "${aws_api_gateway_resource.test.id}" 140 http_method = "${aws_api_gateway_method.test.http_method}" 141 142 type = "HTTP" 143 uri = "https://www.google.de" 144 integration_http_method = "GET" 145 } 146 147 resource "aws_api_gateway_integration_response" "test" { 148 rest_api_id = "${aws_api_gateway_rest_api.test.id}" 149 resource_id = "${aws_api_gateway_resource.test.id}" 150 http_method = "${aws_api_gateway_integration.test.http_method}" 151 status_code = "${aws_api_gateway_method_response.error.status_code}" 152 } 153 154 resource "aws_api_gateway_deployment" "test" { 155 depends_on = ["aws_api_gateway_integration.test"] 156 157 rest_api_id = "${aws_api_gateway_rest_api.test.id}" 158 stage_name = "test" 159 description = "This is a test" 160 161 variables = { 162 "a" = "2" 163 } 164 } 165 166 resource "aws_api_gateway_api_key" "test" { 167 name = "foo" 168 enabled = true 169 170 stage_key { 171 rest_api_id = "${aws_api_gateway_rest_api.test.id}" 172 stage_name = "${aws_api_gateway_deployment.test.stage_name}" 173 } 174 } 175 `