github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/resource_aws_devicefarm_project_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/devicefarm"
    10  	"github.com/hashicorp/terraform/helper/acctest"
    11  	"github.com/hashicorp/terraform/helper/resource"
    12  	"github.com/hashicorp/terraform/terraform"
    13  )
    14  
    15  func TestAccAWSDeviceFarmProject_basic(t *testing.T) {
    16  	var afterCreate, afterUpdate devicefarm.Project
    17  	beforeInt := acctest.RandInt()
    18  	afterInt := acctest.RandInt()
    19  
    20  	resource.Test(t, resource.TestCase{
    21  		PreCheck:     func() { testAccPreCheck(t) },
    22  		Providers:    testAccProviders,
    23  		CheckDestroy: testAccCheckDeviceFarmProjectDestroy,
    24  		Steps: []resource.TestStep{
    25  			{
    26  				Config: testAccDeviceFarmProjectConfig(beforeInt),
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckDeviceFarmProjectExists(
    29  						"aws_devicefarm_project.foo", &afterCreate),
    30  					resource.TestCheckResourceAttr(
    31  						"aws_devicefarm_project.foo", "name", fmt.Sprintf("tf-testproject-%d", beforeInt)),
    32  				),
    33  			},
    34  
    35  			{
    36  				Config: testAccDeviceFarmProjectConfig(afterInt),
    37  				Check: resource.ComposeTestCheckFunc(
    38  					testAccCheckDeviceFarmProjectExists(
    39  						"aws_devicefarm_project.foo", &afterUpdate),
    40  					resource.TestCheckResourceAttr(
    41  						"aws_devicefarm_project.foo", "name", fmt.Sprintf("tf-testproject-%d", afterInt)),
    42  					testAccCheckDeviceFarmProjectNotRecreated(
    43  						t, &afterCreate, &afterUpdate),
    44  				),
    45  			},
    46  		},
    47  	})
    48  }
    49  
    50  func testAccCheckDeviceFarmProjectNotRecreated(t *testing.T,
    51  	before, after *devicefarm.Project) resource.TestCheckFunc {
    52  	return func(s *terraform.State) error {
    53  		if *before.Arn != *after.Arn {
    54  			t.Fatalf("Expected DeviceFarm Project ARNs to be the same. But they were: %v, %v", *before.Arn, *after.Arn)
    55  		}
    56  		return nil
    57  	}
    58  }
    59  
    60  func testAccCheckDeviceFarmProjectExists(n string, v *devicefarm.Project) resource.TestCheckFunc {
    61  	return func(s *terraform.State) error {
    62  		rs, ok := s.RootModule().Resources[n]
    63  		if !ok {
    64  			return fmt.Errorf("Not found: %s", n)
    65  		}
    66  
    67  		if rs.Primary.ID == "" {
    68  			return fmt.Errorf("No ID is set")
    69  		}
    70  
    71  		conn := testAccProvider.Meta().(*AWSClient).devicefarmconn
    72  		resp, err := conn.GetProject(
    73  			&devicefarm.GetProjectInput{Arn: aws.String(rs.Primary.ID)})
    74  		if err != nil {
    75  			return err
    76  		}
    77  		if resp.Project == nil {
    78  			return fmt.Errorf("DeviceFarmProject not found")
    79  		}
    80  
    81  		*v = *resp.Project
    82  
    83  		return nil
    84  	}
    85  }
    86  
    87  func testAccCheckDeviceFarmProjectDestroy(s *terraform.State) error {
    88  	conn := testAccProvider.Meta().(*AWSClient).devicefarmconn
    89  
    90  	for _, rs := range s.RootModule().Resources {
    91  		if rs.Type != "aws_devicefarm_project" {
    92  			continue
    93  		}
    94  
    95  		// Try to find the resource
    96  		resp, err := conn.GetProject(
    97  			&devicefarm.GetProjectInput{Arn: aws.String(rs.Primary.ID)})
    98  		if err == nil {
    99  			if resp.Project != nil {
   100  				return fmt.Errorf("still exist.")
   101  			}
   102  
   103  			return nil
   104  		}
   105  
   106  		if dferr, ok := err.(awserr.Error); ok && dferr.Code() == "DeviceFarmProjectNotFoundFault" {
   107  			return nil
   108  		}
   109  	}
   110  
   111  	return nil
   112  }
   113  
   114  func testAccDeviceFarmProjectConfig(rInt int) string {
   115  	return fmt.Sprintf(`
   116  resource "aws_devicefarm_project" "foo" {
   117  	name = "tf-testproject-%d"
   118  }`, rInt)
   119  }