github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_api_gateway_deployment_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/aws/awserr"
     9  	"github.com/aws/aws-sdk-go/service/apigateway"
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  )
    13  
    14  func TestAccAWSAPIGatewayDeployment_basic(t *testing.T) {
    15  	var conf apigateway.Deployment
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testAccCheckAWSAPIGatewayDeploymentDestroy,
    21  		Steps: []resource.TestStep{
    22  			{
    23  				Config: testAccAWSAPIGatewayDeploymentConfig,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testAccCheckAWSAPIGatewayDeploymentExists("aws_api_gateway_deployment.test", &conf),
    26  					resource.TestCheckResourceAttr(
    27  						"aws_api_gateway_deployment.test", "stage_name", "test"),
    28  					resource.TestCheckResourceAttr(
    29  						"aws_api_gateway_deployment.test", "description", "This is a test"),
    30  					resource.TestCheckResourceAttr(
    31  						"aws_api_gateway_deployment.test", "variables.a", "2"),
    32  					resource.TestCheckResourceAttrSet(
    33  						"aws_api_gateway_deployment.test", "created_date"),
    34  				),
    35  			},
    36  		},
    37  	})
    38  }
    39  
    40  func testAccCheckAWSAPIGatewayDeploymentExists(n string, res *apigateway.Deployment) resource.TestCheckFunc {
    41  	return func(s *terraform.State) error {
    42  		rs, ok := s.RootModule().Resources[n]
    43  		if !ok {
    44  			return fmt.Errorf("Not found: %s", n)
    45  		}
    46  
    47  		if rs.Primary.ID == "" {
    48  			return fmt.Errorf("No API Gateway Deployment ID is set")
    49  		}
    50  
    51  		conn := testAccProvider.Meta().(*AWSClient).apigateway
    52  
    53  		req := &apigateway.GetDeploymentInput{
    54  			DeploymentId: aws.String(rs.Primary.ID),
    55  			RestApiId:    aws.String(s.RootModule().Resources["aws_api_gateway_rest_api.test"].Primary.ID),
    56  		}
    57  		describe, err := conn.GetDeployment(req)
    58  		if err != nil {
    59  			return err
    60  		}
    61  
    62  		if *describe.Id != rs.Primary.ID {
    63  			return fmt.Errorf("APIGateway Deployment not found")
    64  		}
    65  
    66  		*res = *describe
    67  
    68  		return nil
    69  	}
    70  }
    71  
    72  func testAccCheckAWSAPIGatewayDeploymentDestroy(s *terraform.State) error {
    73  	conn := testAccProvider.Meta().(*AWSClient).apigateway
    74  
    75  	for _, rs := range s.RootModule().Resources {
    76  		if rs.Type != "aws_api_gateway_resource" {
    77  			continue
    78  		}
    79  
    80  		req := &apigateway.GetDeploymentsInput{
    81  			RestApiId: aws.String(s.RootModule().Resources["aws_api_gateway_rest_api.test"].Primary.ID),
    82  		}
    83  		describe, err := conn.GetDeployments(req)
    84  
    85  		if err == nil {
    86  			if len(describe.Items) != 0 &&
    87  				*describe.Items[0].Id == rs.Primary.ID {
    88  				return fmt.Errorf("API Gateway Deployment still exists")
    89  			}
    90  		}
    91  
    92  		aws2err, ok := err.(awserr.Error)
    93  		if !ok {
    94  			return err
    95  		}
    96  		if aws2err.Code() != "NotFoundException" {
    97  			return err
    98  		}
    99  
   100  		return nil
   101  	}
   102  
   103  	return nil
   104  }
   105  
   106  const testAccAWSAPIGatewayDeploymentConfig = `
   107  resource "aws_api_gateway_rest_api" "test" {
   108    name = "test"
   109  }
   110  
   111  resource "aws_api_gateway_resource" "test" {
   112    rest_api_id = "${aws_api_gateway_rest_api.test.id}"
   113    parent_id = "${aws_api_gateway_rest_api.test.root_resource_id}"
   114    path_part = "test"
   115  }
   116  
   117  resource "aws_api_gateway_method" "test" {
   118    rest_api_id = "${aws_api_gateway_rest_api.test.id}"
   119    resource_id = "${aws_api_gateway_resource.test.id}"
   120    http_method = "GET"
   121    authorization = "NONE"
   122  }
   123  
   124  resource "aws_api_gateway_method_response" "error" {
   125    rest_api_id = "${aws_api_gateway_rest_api.test.id}"
   126    resource_id = "${aws_api_gateway_resource.test.id}"
   127    http_method = "${aws_api_gateway_method.test.http_method}"
   128    status_code = "400"
   129  }
   130  
   131  resource "aws_api_gateway_integration" "test" {
   132    rest_api_id = "${aws_api_gateway_rest_api.test.id}"
   133    resource_id = "${aws_api_gateway_resource.test.id}"
   134    http_method = "${aws_api_gateway_method.test.http_method}"
   135  
   136    type = "HTTP"
   137    uri = "https://www.google.de"
   138    integration_http_method = "GET"
   139  }
   140  
   141  resource "aws_api_gateway_integration_response" "test" {
   142    rest_api_id = "${aws_api_gateway_rest_api.test.id}"
   143    resource_id = "${aws_api_gateway_resource.test.id}"
   144    http_method = "${aws_api_gateway_integration.test.http_method}"
   145    status_code = "${aws_api_gateway_method_response.error.status_code}"
   146  }
   147  
   148  resource "aws_api_gateway_deployment" "test" {
   149    depends_on = ["aws_api_gateway_integration.test"]
   150  
   151    rest_api_id = "${aws_api_gateway_rest_api.test.id}"
   152    stage_name = "test"
   153    description = "This is a test"
   154  
   155    variables = {
   156      "a" = "2"
   157    }
   158  }
   159  `