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 `