github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/openstack/resource_openstack_images_image_v2_test.go (about) 1 package openstack 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/gophercloud/gophercloud/openstack/imageservice/v2/images" 8 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestAccImagesImageV2_basic(t *testing.T) { 14 var image images.Image 15 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testAccCheckImagesImageV2Destroy, 20 Steps: []resource.TestStep{ 21 resource.TestStep{ 22 Config: testAccImagesImageV2_basic, 23 Check: resource.ComposeTestCheckFunc( 24 testAccCheckImagesImageV2Exists("openstack_images_image_v2.image_1", &image), 25 resource.TestCheckResourceAttr( 26 "openstack_images_image_v2.image_1", "name", "Rancher TerraformAccTest"), 27 resource.TestCheckResourceAttr( 28 "openstack_images_image_v2.image_1", "container_format", "bare"), 29 resource.TestCheckResourceAttr( 30 "openstack_images_image_v2.image_1", "disk_format", "qcow2"), 31 resource.TestCheckResourceAttr( 32 "openstack_images_image_v2.image_1", "schema", "/v2/schemas/image"), 33 ), 34 }, 35 }, 36 }) 37 } 38 39 func TestAccImagesImageV2_name(t *testing.T) { 40 var image images.Image 41 42 resource.Test(t, resource.TestCase{ 43 PreCheck: func() { testAccPreCheck(t) }, 44 Providers: testAccProviders, 45 CheckDestroy: testAccCheckImagesImageV2Destroy, 46 Steps: []resource.TestStep{ 47 resource.TestStep{ 48 Config: testAccImagesImageV2_name_1, 49 Check: resource.ComposeTestCheckFunc( 50 testAccCheckImagesImageV2Exists("openstack_images_image_v2.image_1", &image), 51 resource.TestCheckResourceAttr( 52 "openstack_images_image_v2.image_1", "name", "Rancher TerraformAccTest"), 53 ), 54 }, 55 resource.TestStep{ 56 Config: testAccImagesImageV2_name_2, 57 Check: resource.ComposeTestCheckFunc( 58 testAccCheckImagesImageV2Exists("openstack_images_image_v2.image_1", &image), 59 resource.TestCheckResourceAttr( 60 "openstack_images_image_v2.image_1", "name", "TerraformAccTest Rancher"), 61 ), 62 }, 63 }, 64 }) 65 } 66 67 func TestAccImagesImageV2_tags(t *testing.T) { 68 var image images.Image 69 70 resource.Test(t, resource.TestCase{ 71 PreCheck: func() { testAccPreCheck(t) }, 72 Providers: testAccProviders, 73 CheckDestroy: testAccCheckImagesImageV2Destroy, 74 Steps: []resource.TestStep{ 75 resource.TestStep{ 76 Config: testAccImagesImageV2_tags_1, 77 Check: resource.ComposeTestCheckFunc( 78 testAccCheckImagesImageV2Exists("openstack_images_image_v2.image_1", &image), 79 testAccCheckImagesImageV2HasTag("openstack_images_image_v2.image_1", "foo"), 80 testAccCheckImagesImageV2HasTag("openstack_images_image_v2.image_1", "bar"), 81 testAccCheckImagesImageV2TagCount("openstack_images_image_v2.image_1", 2), 82 ), 83 }, 84 resource.TestStep{ 85 Config: testAccImagesImageV2_tags_2, 86 Check: resource.ComposeTestCheckFunc( 87 testAccCheckImagesImageV2Exists("openstack_images_image_v2.image_1", &image), 88 testAccCheckImagesImageV2HasTag("openstack_images_image_v2.image_1", "foo"), 89 testAccCheckImagesImageV2HasTag("openstack_images_image_v2.image_1", "bar"), 90 testAccCheckImagesImageV2HasTag("openstack_images_image_v2.image_1", "baz"), 91 testAccCheckImagesImageV2TagCount("openstack_images_image_v2.image_1", 3), 92 ), 93 }, 94 resource.TestStep{ 95 Config: testAccImagesImageV2_tags_3, 96 Check: resource.ComposeTestCheckFunc( 97 testAccCheckImagesImageV2Exists("openstack_images_image_v2.image_1", &image), 98 testAccCheckImagesImageV2HasTag("openstack_images_image_v2.image_1", "foo"), 99 testAccCheckImagesImageV2HasTag("openstack_images_image_v2.image_1", "baz"), 100 testAccCheckImagesImageV2TagCount("openstack_images_image_v2.image_1", 2), 101 ), 102 }, 103 }, 104 }) 105 } 106 107 func TestAccImagesImageV2_visibility(t *testing.T) { 108 var image images.Image 109 110 resource.Test(t, resource.TestCase{ 111 PreCheck: func() { 112 testAccPreCheck(t) 113 testAccPreCheckAdminOnly(t) 114 }, 115 Providers: testAccProviders, 116 CheckDestroy: testAccCheckImagesImageV2Destroy, 117 Steps: []resource.TestStep{ 118 resource.TestStep{ 119 Config: testAccImagesImageV2_visibility_1, 120 Check: resource.ComposeTestCheckFunc( 121 testAccCheckImagesImageV2Exists("openstack_images_image_v2.image_1", &image), 122 resource.TestCheckResourceAttr( 123 "openstack_images_image_v2.image_1", "visibility", "private"), 124 ), 125 }, 126 resource.TestStep{ 127 Config: testAccImagesImageV2_visibility_2, 128 Check: resource.ComposeTestCheckFunc( 129 testAccCheckImagesImageV2Exists("openstack_images_image_v2.image_1", &image), 130 resource.TestCheckResourceAttr( 131 "openstack_images_image_v2.image_1", "visibility", "public"), 132 ), 133 }, 134 }, 135 }) 136 } 137 138 func testAccCheckImagesImageV2Destroy(s *terraform.State) error { 139 config := testAccProvider.Meta().(*Config) 140 imageClient, err := config.imageV2Client(OS_REGION_NAME) 141 if err != nil { 142 return fmt.Errorf("Error creating OpenStack Image: %s", err) 143 } 144 145 for _, rs := range s.RootModule().Resources { 146 if rs.Type != "openstack_images_image_v2" { 147 continue 148 } 149 150 _, err := images.Get(imageClient, rs.Primary.ID).Extract() 151 if err == nil { 152 return fmt.Errorf("Image still exists") 153 } 154 } 155 156 return nil 157 } 158 159 func testAccCheckImagesImageV2Exists(n string, image *images.Image) resource.TestCheckFunc { 160 return func(s *terraform.State) error { 161 rs, ok := s.RootModule().Resources[n] 162 if !ok { 163 return fmt.Errorf("Not found: %s", n) 164 } 165 166 if rs.Primary.ID == "" { 167 return fmt.Errorf("No ID is set") 168 } 169 170 config := testAccProvider.Meta().(*Config) 171 imageClient, err := config.imageV2Client(OS_REGION_NAME) 172 if err != nil { 173 return fmt.Errorf("Error creating OpenStack Image: %s", err) 174 } 175 176 found, err := images.Get(imageClient, rs.Primary.ID).Extract() 177 if err != nil { 178 return err 179 } 180 181 if found.ID != rs.Primary.ID { 182 return fmt.Errorf("Image not found") 183 } 184 185 *image = *found 186 187 return nil 188 } 189 } 190 191 func testAccCheckImagesImageV2HasTag(n, tag string) resource.TestCheckFunc { 192 return func(s *terraform.State) error { 193 rs, ok := s.RootModule().Resources[n] 194 if !ok { 195 return fmt.Errorf("Not found: %s", n) 196 } 197 198 if rs.Primary.ID == "" { 199 return fmt.Errorf("No ID is set") 200 } 201 202 config := testAccProvider.Meta().(*Config) 203 imageClient, err := config.imageV2Client(OS_REGION_NAME) 204 if err != nil { 205 return fmt.Errorf("Error creating OpenStack Image: %s", err) 206 } 207 208 found, err := images.Get(imageClient, rs.Primary.ID).Extract() 209 if err != nil { 210 return err 211 } 212 213 if found.ID != rs.Primary.ID { 214 return fmt.Errorf("Image not found") 215 } 216 217 for _, v := range found.Tags { 218 if tag == v { 219 return nil 220 } 221 } 222 223 return fmt.Errorf("Tag not found: %s", tag) 224 } 225 } 226 227 func testAccCheckImagesImageV2TagCount(n string, expected int) resource.TestCheckFunc { 228 return func(s *terraform.State) error { 229 rs, ok := s.RootModule().Resources[n] 230 if !ok { 231 return fmt.Errorf("Not found: %s", n) 232 } 233 234 if rs.Primary.ID == "" { 235 return fmt.Errorf("No ID is set") 236 } 237 238 config := testAccProvider.Meta().(*Config) 239 imageClient, err := config.imageV2Client(OS_REGION_NAME) 240 if err != nil { 241 return fmt.Errorf("Error creating OpenStack Image: %s", err) 242 } 243 244 found, err := images.Get(imageClient, rs.Primary.ID).Extract() 245 if err != nil { 246 return err 247 } 248 249 if found.ID != rs.Primary.ID { 250 return fmt.Errorf("Image not found") 251 } 252 253 if len(found.Tags) != expected { 254 return fmt.Errorf("Expecting %d tags, found %d", expected, len(found.Tags)) 255 } 256 257 return nil 258 } 259 } 260 261 var testAccImagesImageV2_basic = ` 262 resource "openstack_images_image_v2" "image_1" { 263 name = "Rancher TerraformAccTest" 264 image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img" 265 container_format = "bare" 266 disk_format = "qcow2" 267 }` 268 269 var testAccImagesImageV2_name_1 = ` 270 resource "openstack_images_image_v2" "image_1" { 271 name = "Rancher TerraformAccTest" 272 image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img" 273 container_format = "bare" 274 disk_format = "qcow2" 275 }` 276 277 var testAccImagesImageV2_name_2 = ` 278 resource "openstack_images_image_v2" "image_1" { 279 name = "TerraformAccTest Rancher" 280 image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img" 281 container_format = "bare" 282 disk_format = "qcow2" 283 }` 284 285 var testAccImagesImageV2_tags_1 = ` 286 resource "openstack_images_image_v2" "image_1" { 287 name = "Rancher TerraformAccTest" 288 image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img" 289 container_format = "bare" 290 disk_format = "qcow2" 291 tags = ["foo","bar"] 292 }` 293 294 var testAccImagesImageV2_tags_2 = ` 295 resource "openstack_images_image_v2" "image_1" { 296 name = "Rancher TerraformAccTest" 297 image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img" 298 container_format = "bare" 299 disk_format = "qcow2" 300 tags = ["foo","bar","baz"] 301 }` 302 303 var testAccImagesImageV2_tags_3 = ` 304 resource "openstack_images_image_v2" "image_1" { 305 name = "Rancher TerraformAccTest" 306 image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img" 307 container_format = "bare" 308 disk_format = "qcow2" 309 tags = ["foo","baz"] 310 }` 311 312 var testAccImagesImageV2_visibility_1 = ` 313 resource "openstack_images_image_v2" "image_1" { 314 name = "Rancher TerraformAccTest" 315 image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img" 316 container_format = "bare" 317 disk_format = "qcow2" 318 visibility = "private" 319 }` 320 321 var testAccImagesImageV2_visibility_2 = ` 322 resource "openstack_images_image_v2" "image_1" { 323 name = "Rancher TerraformAccTest" 324 image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img" 325 container_format = "bare" 326 disk_format = "qcow2" 327 visibility = "public" 328 }`