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    }`