github.com/jsoriano/terraform@v0.6.7-0.20151026070445-8b70867fdd95/builtin/providers/aws/resource_aws_iam_user_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/iam"
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  )
    13  
    14  func TestAccAWSUser_basic(t *testing.T) {
    15  	var conf iam.GetUserOutput
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testAccCheckAWSUserDestroy,
    21  		Steps: []resource.TestStep{
    22  			resource.TestStep{
    23  				Config: testAccAWSUserConfig,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testAccCheckAWSUserExists("aws_iam_user.user", &conf),
    26  					testAccCheckAWSUserAttributes(&conf),
    27  				),
    28  			},
    29  		},
    30  	})
    31  }
    32  
    33  func testAccCheckAWSUserDestroy(s *terraform.State) error {
    34  	iamconn := testAccProvider.Meta().(*AWSClient).iamconn
    35  
    36  	for _, rs := range s.RootModule().Resources {
    37  		if rs.Type != "aws_iam_user" {
    38  			continue
    39  		}
    40  
    41  		// Try to get user
    42  		_, err := iamconn.GetUser(&iam.GetUserInput{
    43  			UserName: aws.String(rs.Primary.ID),
    44  		})
    45  		if err == nil {
    46  			return fmt.Errorf("still exist.")
    47  		}
    48  
    49  		// Verify the error is what we want
    50  		ec2err, ok := err.(awserr.Error)
    51  		if !ok {
    52  			return err
    53  		}
    54  		if ec2err.Code() != "NoSuchEntity" {
    55  			return err
    56  		}
    57  	}
    58  
    59  	return nil
    60  }
    61  
    62  func testAccCheckAWSUserExists(n string, res *iam.GetUserOutput) resource.TestCheckFunc {
    63  	return func(s *terraform.State) error {
    64  		rs, ok := s.RootModule().Resources[n]
    65  		if !ok {
    66  			return fmt.Errorf("Not found: %s", n)
    67  		}
    68  
    69  		if rs.Primary.ID == "" {
    70  			return fmt.Errorf("No User name is set")
    71  		}
    72  
    73  		iamconn := testAccProvider.Meta().(*AWSClient).iamconn
    74  
    75  		resp, err := iamconn.GetUser(&iam.GetUserInput{
    76  			UserName: aws.String(rs.Primary.ID),
    77  		})
    78  		if err != nil {
    79  			return err
    80  		}
    81  
    82  		*res = *resp
    83  
    84  		return nil
    85  	}
    86  }
    87  
    88  func testAccCheckAWSUserAttributes(user *iam.GetUserOutput) resource.TestCheckFunc {
    89  	return func(s *terraform.State) error {
    90  		if *user.User.UserName != "test-user" {
    91  			return fmt.Errorf("Bad name: %s", *user.User.UserName)
    92  		}
    93  
    94  		if *user.User.Path != "/" {
    95  			return fmt.Errorf("Bad path: %s", *user.User.Path)
    96  		}
    97  
    98  		return nil
    99  	}
   100  }
   101  
   102  const testAccAWSUserConfig = `
   103  resource "aws_iam_user" "user" {
   104  	name = "test-user"
   105  	path = "/"
   106  }
   107  `