github.com/i0n/terraform@v0.4.3-0.20150506151324-010a39a58ec1/builtin/providers/aws/resource_aws_iam_access_key_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/awslabs/aws-sdk-go/aws"
     8  	"github.com/awslabs/aws-sdk-go/service/iam"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  func TestAccAWSAccessKey_normal(t *testing.T) {
    14  	var conf iam.AccessKeyMetadata
    15  
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckAWSAccessKeyDestroy,
    20  		Steps: []resource.TestStep{
    21  			resource.TestStep{
    22  				Config: testAccAWSAccessKeyConfig,
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckAWSAccessKeyExists("aws_iam_access_key.a_key", &conf),
    25  					testAccCheckAWSAccessKeyAttributes(&conf),
    26  				),
    27  			},
    28  		},
    29  	})
    30  }
    31  
    32  func testAccCheckAWSAccessKeyDestroy(s *terraform.State) error {
    33  	iamconn := testAccProvider.Meta().(*AWSClient).iamconn
    34  
    35  	for _, rs := range s.RootModule().Resources {
    36  		if rs.Type != "aws_access_key" {
    37  			continue
    38  		}
    39  
    40  		// Try to get access key
    41  		resp, err := iamconn.ListAccessKeys(&iam.ListAccessKeysInput{
    42  			UserName: aws.String(rs.Primary.ID),
    43  		})
    44  		if err == nil {
    45  			if len(resp.AccessKeyMetadata) > 0 {
    46  				return fmt.Errorf("still exist.")
    47  			}
    48  			return nil
    49  		}
    50  
    51  		// Verify the error is what we want
    52  		ec2err, ok := err.(aws.APIError)
    53  		if !ok {
    54  			return err
    55  		}
    56  		if ec2err.Code != "NoSuchEntity" {
    57  			return err
    58  		}
    59  	}
    60  
    61  	return nil
    62  }
    63  
    64  func testAccCheckAWSAccessKeyExists(n string, res *iam.AccessKeyMetadata) resource.TestCheckFunc {
    65  	return func(s *terraform.State) error {
    66  		rs, ok := s.RootModule().Resources[n]
    67  		if !ok {
    68  			return fmt.Errorf("Not found: %s", n)
    69  		}
    70  
    71  		if rs.Primary.ID == "" {
    72  			return fmt.Errorf("No Role name is set")
    73  		}
    74  
    75  		iamconn := testAccProvider.Meta().(*AWSClient).iamconn
    76  
    77  		resp, err := iamconn.ListAccessKeys(&iam.ListAccessKeysInput{
    78  			UserName: aws.String("testuser"),
    79  		})
    80  		if err != nil {
    81  			return err
    82  		}
    83  
    84  		if len(resp.AccessKeyMetadata) != 1 ||
    85  			*resp.AccessKeyMetadata[0].UserName != "testuser" {
    86  			return fmt.Errorf("User not found not found")
    87  		}
    88  
    89  		*res = *resp.AccessKeyMetadata[0]
    90  
    91  		return nil
    92  	}
    93  }
    94  
    95  func testAccCheckAWSAccessKeyAttributes(accessKeyMetadata *iam.AccessKeyMetadata) resource.TestCheckFunc {
    96  	return func(s *terraform.State) error {
    97  		if *accessKeyMetadata.UserName != "testuser" {
    98  			return fmt.Errorf("Bad username: %s", *accessKeyMetadata.UserName)
    99  		}
   100  
   101  		if *accessKeyMetadata.Status != "Active" {
   102  			return fmt.Errorf("Bad status: %s", *accessKeyMetadata.Status)
   103  		}
   104  
   105  		return nil
   106  	}
   107  }
   108  
   109  const testAccAWSAccessKeyConfig = `
   110  resource "aws_iam_user" "a_user" {
   111  	name = "testuser"
   112  }
   113  
   114  resource "aws_iam_access_key" "a_key" {
   115  	user = "${aws_iam_user.a_user.name}"
   116  }
   117  `