github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_glacier_vault_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/glacier" 11 12 "github.com/hashicorp/terraform/helper/resource" 13 "github.com/hashicorp/terraform/terraform" 14 ) 15 16 func TestAccAWSGlacierVault_basic(t *testing.T) { 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckGlacierVaultDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccGlacierVault_basic, 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckGlacierVaultExists("aws_glacier_vault.test"), 26 ), 27 }, 28 }, 29 }) 30 } 31 32 func TestAccAWSGlacierVault_full(t *testing.T) { 33 resource.Test(t, resource.TestCase{ 34 PreCheck: func() { testAccPreCheck(t) }, 35 Providers: testAccProviders, 36 CheckDestroy: testAccCheckGlacierVaultDestroy, 37 Steps: []resource.TestStep{ 38 resource.TestStep{ 39 Config: testAccGlacierVault_full, 40 Check: resource.ComposeTestCheckFunc( 41 testAccCheckGlacierVaultExists("aws_glacier_vault.full"), 42 ), 43 }, 44 }, 45 }) 46 } 47 48 func TestAccAWSGlacierVault_RemoveNotifications(t *testing.T) { 49 resource.Test(t, resource.TestCase{ 50 PreCheck: func() { testAccPreCheck(t) }, 51 Providers: testAccProviders, 52 CheckDestroy: testAccCheckGlacierVaultDestroy, 53 Steps: []resource.TestStep{ 54 resource.TestStep{ 55 Config: testAccGlacierVault_full, 56 Check: resource.ComposeTestCheckFunc( 57 testAccCheckGlacierVaultExists("aws_glacier_vault.full"), 58 ), 59 }, 60 resource.TestStep{ 61 Config: testAccGlacierVault_withoutNotification, 62 Check: resource.ComposeTestCheckFunc( 63 testAccCheckGlacierVaultExists("aws_glacier_vault.full"), 64 testAccCheckVaultNotificationsMissing("aws_glacier_vault.full"), 65 ), 66 }, 67 }, 68 }) 69 } 70 71 func TestDiffGlacierVaultTags(t *testing.T) { 72 cases := []struct { 73 Old, New map[string]interface{} 74 Create map[string]string 75 Remove []string 76 }{ 77 // Basic add/remove 78 { 79 Old: map[string]interface{}{ 80 "foo": "bar", 81 }, 82 New: map[string]interface{}{ 83 "bar": "baz", 84 }, 85 Create: map[string]string{ 86 "bar": "baz", 87 }, 88 Remove: []string{ 89 "foo", 90 }, 91 }, 92 93 // Modify 94 { 95 Old: map[string]interface{}{ 96 "foo": "bar", 97 }, 98 New: map[string]interface{}{ 99 "foo": "baz", 100 }, 101 Create: map[string]string{ 102 "foo": "baz", 103 }, 104 Remove: []string{ 105 "foo", 106 }, 107 }, 108 } 109 110 for i, tc := range cases { 111 c, r := diffGlacierVaultTags(mapGlacierVaultTags(tc.Old), mapGlacierVaultTags(tc.New)) 112 113 if !reflect.DeepEqual(c, tc.Create) { 114 t.Fatalf("%d: bad create: %#v", i, c) 115 } 116 if !reflect.DeepEqual(r, tc.Remove) { 117 t.Fatalf("%d: bad remove: %#v", i, r) 118 } 119 } 120 } 121 122 func testAccCheckGlacierVaultExists(name string) resource.TestCheckFunc { 123 return func(s *terraform.State) error { 124 rs, ok := s.RootModule().Resources[name] 125 if !ok { 126 return fmt.Errorf("Not found: %s", name) 127 } 128 129 if rs.Primary.ID == "" { 130 return fmt.Errorf("No ID is set") 131 } 132 133 glacierconn := testAccProvider.Meta().(*AWSClient).glacierconn 134 out, err := glacierconn.DescribeVault(&glacier.DescribeVaultInput{ 135 VaultName: aws.String(rs.Primary.ID), 136 }) 137 138 if err != nil { 139 return err 140 } 141 142 if out.VaultARN == nil { 143 return fmt.Errorf("No Glacier Vault Found") 144 } 145 146 if *out.VaultName != rs.Primary.ID { 147 return fmt.Errorf("Glacier Vault Mismatch - existing: %q, state: %q", 148 *out.VaultName, rs.Primary.ID) 149 } 150 151 return nil 152 } 153 } 154 155 func testAccCheckVaultNotificationsMissing(name string) resource.TestCheckFunc { 156 return func(s *terraform.State) error { 157 rs, ok := s.RootModule().Resources[name] 158 if !ok { 159 return fmt.Errorf("Not found: %s", name) 160 } 161 162 if rs.Primary.ID == "" { 163 return fmt.Errorf("No ID is set") 164 } 165 166 glacierconn := testAccProvider.Meta().(*AWSClient).glacierconn 167 out, err := glacierconn.GetVaultNotifications(&glacier.GetVaultNotificationsInput{ 168 VaultName: aws.String(rs.Primary.ID), 169 }) 170 171 if awserr, ok := err.(awserr.Error); ok && awserr.Code() != "ResourceNotFoundException" { 172 return fmt.Errorf("Expected ResourceNotFoundException for Vault %s Notification Block but got %s", rs.Primary.ID, awserr.Code()) 173 } 174 175 if out.VaultNotificationConfig != nil { 176 return fmt.Errorf("Vault Notification Block has been found for %s", rs.Primary.ID) 177 } 178 179 return nil 180 } 181 182 } 183 184 func testAccCheckGlacierVaultDestroy(s *terraform.State) error { 185 conn := testAccProvider.Meta().(*AWSClient).glacierconn 186 187 for _, rs := range s.RootModule().Resources { 188 if rs.Type != "aws_glacier_vault" { 189 continue 190 } 191 192 input := &glacier.DescribeVaultInput{ 193 VaultName: aws.String(rs.Primary.ID), 194 } 195 if _, err := conn.DescribeVault(input); err != nil { 196 // Verify the error is what we want 197 if ae, ok := err.(awserr.Error); ok && ae.Code() == "ResourceNotFoundException" { 198 continue 199 } 200 201 return err 202 } 203 return fmt.Errorf("still exists") 204 } 205 return nil 206 } 207 208 const testAccGlacierVault_basic = ` 209 resource "aws_glacier_vault" "test" { 210 name = "my_test_vault" 211 } 212 ` 213 214 const testAccGlacierVault_full = ` 215 resource "aws_sns_topic" "aws_sns_topic" { 216 name = "glacier-sns-topic" 217 } 218 219 resource "aws_glacier_vault" "full" { 220 name = "my_test_vault" 221 notification { 222 sns_topic = "${aws_sns_topic.aws_sns_topic.arn}" 223 events = ["ArchiveRetrievalCompleted","InventoryRetrievalCompleted"] 224 } 225 tags { 226 Test="Test1" 227 } 228 } 229 ` 230 231 const testAccGlacierVault_withoutNotification = ` 232 resource "aws_sns_topic" "aws_sns_topic" { 233 name = "glacier-sns-topic" 234 } 235 236 resource "aws_glacier_vault" "full" { 237 name = "my_test_vault" 238 tags { 239 Test="Test1" 240 } 241 } 242 `