github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/clc/resource_clc_group_test.go (about)

     1  package clc
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	clc "github.com/CenturyLinkCloud/clc-sdk"
     8  	"github.com/CenturyLinkCloud/clc-sdk/group"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  // things to test:
    14  //   resolves to existing group
    15  //   does not nuke a group w/ no parents (root group)
    16  //   change a name on a group
    17  
    18  func TestAccGroupBasic(t *testing.T) {
    19  	var resp group.Response
    20  	resource.Test(t, resource.TestCase{
    21  		PreCheck:     func() { testAccPreCheck(t) },
    22  		Providers:    testAccProviders,
    23  		CheckDestroy: testAccCheckGroupDestroy,
    24  		Steps: []resource.TestStep{
    25  			resource.TestStep{
    26  				Config: testAccCheckGroupConfigBasic,
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckGroupExists("clc_group.acc_test_group", &resp),
    29  					testAccCheckGroupParent(&resp, "Default Group"),
    30  					resource.TestCheckResourceAttr(
    31  						"clc_group.acc_test_group", "name", "okcomputer"),
    32  					resource.TestCheckResourceAttr(
    33  						"clc_group.acc_test_group", "location_id", testAccDC),
    34  				),
    35  			},
    36  			resource.TestStep{
    37  				Config: testAccCheckGroupConfigUpdate,
    38  				Check: resource.ComposeTestCheckFunc(
    39  					testAccCheckGroupExists("clc_group.acc_test_group", &resp),
    40  					testAccCheckGroupParent(&resp, "Default Group"),
    41  					resource.TestCheckResourceAttr(
    42  						"clc_group.acc_test_group", "name", "foobar"),
    43  					resource.TestCheckResourceAttr(
    44  						"clc_group.acc_test_group", "location_id", testAccDC),
    45  				),
    46  			},
    47  			resource.TestStep{
    48  				Config: testAccCheckGroupConfigReparent,
    49  				Check: resource.ComposeTestCheckFunc(
    50  					testAccCheckGroupExists("clc_group.acc_test_group", &resp),
    51  					testAccCheckGroupParent(&resp, "reparent"),
    52  					resource.TestCheckResourceAttr(
    53  						"clc_group.acc_test_group", "name", "foobar"),
    54  					resource.TestCheckResourceAttr(
    55  						"clc_group.acc_test_group", "location_id", testAccDC),
    56  				),
    57  			},
    58  		},
    59  	})
    60  }
    61  
    62  func testAccCheckGroupDestroy(s *terraform.State) error {
    63  	client := testAccProvider.Meta().(*clc.Client)
    64  	for _, rs := range s.RootModule().Resources {
    65  		if rs.Type != "clc_group" {
    66  			continue
    67  		}
    68  		_, err := client.Group.Get(rs.Primary.ID)
    69  		if err == nil {
    70  			return fmt.Errorf("Group still exists")
    71  		}
    72  	}
    73  	return nil
    74  }
    75  
    76  func testAccCheckGroupParent(resp *group.Response, expectedName string) resource.TestCheckFunc {
    77  	return func(s *terraform.State) error {
    78  		client := testAccProvider.Meta().(*clc.Client)
    79  		ok, l := resp.Links.GetLink("parentGroup")
    80  		if !ok {
    81  			return fmt.Errorf("Missing parent group: %v", resp)
    82  		}
    83  		parent, err := client.Group.Get(l.ID)
    84  		if err != nil {
    85  			return fmt.Errorf("Failed fetching parent %v: %v", l.ID, err)
    86  		}
    87  		if parent.Name != expectedName {
    88  			return fmt.Errorf("Incorrect parent found:'%v' expected:'%v'", parent.Name, expectedName)
    89  		}
    90  		// would be good to test parent but we'd have to make a bunch of calls
    91  		return nil
    92  	}
    93  }
    94  
    95  func testAccCheckGroupExists(n string, resp *group.Response) resource.TestCheckFunc {
    96  	return func(s *terraform.State) error {
    97  		rs, ok := s.RootModule().Resources[n]
    98  		if !ok {
    99  			return fmt.Errorf("Not found: %s", n)
   100  		}
   101  		if rs.Primary.ID == "" {
   102  			return fmt.Errorf("No Group ID is set")
   103  		}
   104  
   105  		client := testAccProvider.Meta().(*clc.Client)
   106  		g, err := client.Group.Get(rs.Primary.ID)
   107  		if err != nil {
   108  			return err
   109  		}
   110  
   111  		if g.ID != rs.Primary.ID {
   112  			return fmt.Errorf("Group not found")
   113  		}
   114  		*resp = *g
   115  		return nil
   116  	}
   117  }
   118  
   119  const testAccCheckGroupConfigBasic = `
   120  variable "dc" { default = "IL1" }
   121  
   122  resource "clc_group" "acc_test_group" {
   123    location_id	= "${var.dc}"
   124    name		= "okcomputer"
   125    description	= "mishaps happening"
   126    parent	= "Default Group"
   127  }`
   128  
   129  const testAccCheckGroupConfigUpdate = `
   130  variable "dc" { default = "IL1" }
   131  
   132  resource "clc_group" "acc_test_group" {
   133    location_id	= "${var.dc}"
   134    name		= "foobar"
   135    description	= "update test"
   136    parent	= "Default Group"
   137  }`
   138  
   139  const testAccCheckGroupConfigReparent = `
   140  variable "dc" { default = "IL1" }
   141  
   142  resource "clc_group" "acc_test_group_reparent" {
   143    location_id	= "${var.dc}"
   144    name		= "reparent"
   145    description	= "introduce a parent group in place"
   146    parent	= "Default Group"
   147  }
   148  
   149  resource "clc_group" "acc_test_group" {
   150    location_id	= "${var.dc}"
   151    name		= "foobar"
   152    description	= "update test"
   153    parent	= "${clc_group.acc_test_group_reparent.id}"
   154  }
   155  `