github.com/richardbowden/terraform@v0.6.12-0.20160901200758-30ea22c25211/builtin/providers/aws/resource_aws_efs_file_system_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     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/efs"
    11  
    12  	"github.com/hashicorp/terraform/helper/acctest"
    13  	"github.com/hashicorp/terraform/helper/resource"
    14  	"github.com/hashicorp/terraform/terraform"
    15  )
    16  
    17  func TestResourceAWSEFSReferenceName_validation(t *testing.T) {
    18  	var value string
    19  	var errors []error
    20  
    21  	value = acctest.RandString(128)
    22  	_, errors = validateReferenceName(value, "reference_name")
    23  	if len(errors) == 0 {
    24  		t.Fatalf("Expected to trigger a validation error")
    25  	}
    26  
    27  	value = acctest.RandString(32)
    28  	_, errors = validateReferenceName(value, "reference_name")
    29  	if len(errors) != 0 {
    30  		t.Fatalf("Expected to trigger a validation error")
    31  	}
    32  }
    33  
    34  func TestResourceAWSEFSPerformanceMode_validation(t *testing.T) {
    35  	type testCase struct {
    36  		Value    string
    37  		ErrCount int
    38  	}
    39  
    40  	invalidCases := []testCase{
    41  		{
    42  			Value:    "garrusVakarian",
    43  			ErrCount: 1,
    44  		},
    45  		{
    46  			Value:    acctest.RandString(80),
    47  			ErrCount: 1,
    48  		},
    49  	}
    50  
    51  	for _, tc := range invalidCases {
    52  		_, errors := validatePerformanceModeType(tc.Value, "performance_mode")
    53  		if len(errors) != tc.ErrCount {
    54  			t.Fatalf("Expected to trigger a validation error")
    55  		}
    56  	}
    57  
    58  	validCases := []testCase{
    59  		{
    60  			Value:    "generalPurpose",
    61  			ErrCount: 0,
    62  		},
    63  		{
    64  			Value:    "maxIO",
    65  			ErrCount: 0,
    66  		},
    67  	}
    68  
    69  	for _, tc := range validCases {
    70  		_, errors := validatePerformanceModeType(tc.Value, "aws_efs_file_system")
    71  		if len(errors) != tc.ErrCount {
    72  			t.Fatalf("Expected not to trigger a validation error")
    73  		}
    74  	}
    75  }
    76  
    77  func TestAccAWSEFSFileSystem_basic(t *testing.T) {
    78  	resource.Test(t, resource.TestCase{
    79  		PreCheck:     func() { testAccPreCheck(t) },
    80  		Providers:    testAccProviders,
    81  		CheckDestroy: testAccCheckEfsFileSystemDestroy,
    82  		Steps: []resource.TestStep{
    83  			resource.TestStep{
    84  				Config: testAccAWSEFSFileSystemConfig,
    85  				Check: resource.ComposeTestCheckFunc(
    86  					testAccCheckEfsFileSystem(
    87  						"aws_efs_file_system.foo",
    88  					),
    89  					testAccCheckEfsFileSystemPerformanceMode(
    90  						"aws_efs_file_system.foo",
    91  						"generalPurpose",
    92  					),
    93  				),
    94  			},
    95  			resource.TestStep{
    96  				Config: testAccAWSEFSFileSystemConfigWithTags,
    97  				Check: resource.ComposeTestCheckFunc(
    98  					testAccCheckEfsFileSystem(
    99  						"aws_efs_file_system.foo-with-tags",
   100  					),
   101  					testAccCheckEfsFileSystemPerformanceMode(
   102  						"aws_efs_file_system.foo-with-tags",
   103  						"generalPurpose",
   104  					),
   105  					testAccCheckEfsFileSystemTags(
   106  						"aws_efs_file_system.foo-with-tags",
   107  						map[string]string{
   108  							"Name":    "foo-efs",
   109  							"Another": "tag",
   110  						},
   111  					),
   112  				),
   113  			},
   114  			resource.TestStep{
   115  				Config: testAccAWSEFSFileSystemConfigWithPerformanceMode,
   116  				Check: resource.ComposeTestCheckFunc(
   117  					testAccCheckEfsFileSystem(
   118  						"aws_efs_file_system.foo-with-performance-mode",
   119  					),
   120  					testAccCheckEfsCreationToken(
   121  						"aws_efs_file_system.foo-with-performance-mode",
   122  						"supercalifragilisticexpialidocious",
   123  					),
   124  					testAccCheckEfsFileSystemPerformanceMode(
   125  						"aws_efs_file_system.foo-with-performance-mode",
   126  						"maxIO",
   127  					),
   128  				),
   129  			},
   130  		},
   131  	})
   132  }
   133  
   134  func testAccCheckEfsFileSystemDestroy(s *terraform.State) error {
   135  	conn := testAccProvider.Meta().(*AWSClient).efsconn
   136  	for _, rs := range s.RootModule().Resources {
   137  		if rs.Type != "aws_efs_file_system" {
   138  			continue
   139  		}
   140  
   141  		resp, err := conn.DescribeFileSystems(&efs.DescribeFileSystemsInput{
   142  			FileSystemId: aws.String(rs.Primary.ID),
   143  		})
   144  		if err != nil {
   145  			if efsErr, ok := err.(awserr.Error); ok && efsErr.Code() == "FileSystemNotFound" {
   146  				// gone
   147  				return nil
   148  			}
   149  			return fmt.Errorf("Error describing EFS in tests: %s", err)
   150  		}
   151  		if len(resp.FileSystems) > 0 {
   152  			return fmt.Errorf("EFS file system %q still exists", rs.Primary.ID)
   153  		}
   154  	}
   155  
   156  	return nil
   157  }
   158  
   159  func testAccCheckEfsFileSystem(resourceID string) resource.TestCheckFunc {
   160  	return func(s *terraform.State) error {
   161  		rs, ok := s.RootModule().Resources[resourceID]
   162  		if !ok {
   163  			return fmt.Errorf("Not found: %s", resourceID)
   164  		}
   165  
   166  		if rs.Primary.ID == "" {
   167  			return fmt.Errorf("No ID is set")
   168  		}
   169  
   170  		conn := testAccProvider.Meta().(*AWSClient).efsconn
   171  		_, err := conn.DescribeFileSystems(&efs.DescribeFileSystemsInput{
   172  			FileSystemId: aws.String(rs.Primary.ID),
   173  		})
   174  
   175  		if err != nil {
   176  			return err
   177  		}
   178  
   179  		return nil
   180  	}
   181  }
   182  
   183  func testAccCheckEfsCreationToken(resourceID string, expectedToken string) resource.TestCheckFunc {
   184  	return func(s *terraform.State) error {
   185  		rs, ok := s.RootModule().Resources[resourceID]
   186  		if !ok {
   187  			return fmt.Errorf("Not found: %s", resourceID)
   188  		}
   189  
   190  		if rs.Primary.ID == "" {
   191  			return fmt.Errorf("No ID is set")
   192  		}
   193  
   194  		conn := testAccProvider.Meta().(*AWSClient).efsconn
   195  		resp, err := conn.DescribeFileSystems(&efs.DescribeFileSystemsInput{
   196  			FileSystemId: aws.String(rs.Primary.ID),
   197  		})
   198  
   199  		fs := resp.FileSystems[0]
   200  		if *fs.CreationToken != expectedToken {
   201  			return fmt.Errorf("Creation Token mismatch.\nExpected: %s\nGiven: %v",
   202  				expectedToken, *fs.CreationToken)
   203  		}
   204  
   205  		if err != nil {
   206  			return err
   207  		}
   208  
   209  		return nil
   210  	}
   211  }
   212  
   213  func testAccCheckEfsFileSystemTags(resourceID string, expectedTags map[string]string) resource.TestCheckFunc {
   214  	return func(s *terraform.State) error {
   215  		rs, ok := s.RootModule().Resources[resourceID]
   216  		if !ok {
   217  			return fmt.Errorf("Not found: %s", resourceID)
   218  		}
   219  
   220  		if rs.Primary.ID == "" {
   221  			return fmt.Errorf("No ID is set")
   222  		}
   223  
   224  		conn := testAccProvider.Meta().(*AWSClient).efsconn
   225  		resp, err := conn.DescribeTags(&efs.DescribeTagsInput{
   226  			FileSystemId: aws.String(rs.Primary.ID),
   227  		})
   228  
   229  		if !reflect.DeepEqual(expectedTags, tagsToMapEFS(resp.Tags)) {
   230  			return fmt.Errorf("Tags mismatch.\nExpected: %#v\nGiven: %#v",
   231  				expectedTags, resp.Tags)
   232  		}
   233  
   234  		if err != nil {
   235  			return err
   236  		}
   237  
   238  		return nil
   239  	}
   240  }
   241  
   242  func testAccCheckEfsFileSystemPerformanceMode(resourceID string, expectedMode string) resource.TestCheckFunc {
   243  	return func(s *terraform.State) error {
   244  		rs, ok := s.RootModule().Resources[resourceID]
   245  		if !ok {
   246  			return fmt.Errorf("Not found: %s", resourceID)
   247  		}
   248  
   249  		if rs.Primary.ID == "" {
   250  			return fmt.Errorf("No ID is set")
   251  		}
   252  
   253  		conn := testAccProvider.Meta().(*AWSClient).efsconn
   254  		resp, err := conn.DescribeFileSystems(&efs.DescribeFileSystemsInput{
   255  			FileSystemId: aws.String(rs.Primary.ID),
   256  		})
   257  
   258  		fs := resp.FileSystems[0]
   259  		if *fs.PerformanceMode != expectedMode {
   260  			return fmt.Errorf("Performance Mode mismatch.\nExpected: %s\nGiven: %v",
   261  				expectedMode, *fs.PerformanceMode)
   262  		}
   263  
   264  		if err != nil {
   265  			return err
   266  		}
   267  
   268  		return nil
   269  	}
   270  }
   271  
   272  const testAccAWSEFSFileSystemConfig = `
   273  resource "aws_efs_file_system" "foo" {
   274  	reference_name = "radeksimko"
   275  }
   276  `
   277  
   278  const testAccAWSEFSFileSystemConfigWithTags = `
   279  resource "aws_efs_file_system" "foo-with-tags" {
   280  	reference_name = "yada_yada"
   281  	tags {
   282  		Name = "foo-efs"
   283  		Another = "tag"
   284  	}
   285  }
   286  `
   287  
   288  const testAccAWSEFSFileSystemConfigWithPerformanceMode = `
   289  resource "aws_efs_file_system" "foo-with-performance-mode" {
   290  	creation_token = "supercalifragilisticexpialidocious"
   291  	performance_mode = "maxIO"
   292  }
   293  `