github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/clc/resource_clc_server_test.go (about) 1 package clc 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 clc "github.com/CenturyLinkCloud/clc-sdk" 9 "github.com/CenturyLinkCloud/clc-sdk/server" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 // things to test: 15 // basic crud 16 // modify specs 17 // power operations 18 // add'l disks 19 // custom fields? (skip) 20 21 func TestAccServerBasic(t *testing.T) { 22 var resp server.Response 23 resource.Test(t, resource.TestCase{ 24 PreCheck: func() { testAccPreCheck(t) }, 25 Providers: testAccProviders, 26 CheckDestroy: testAccCheckServerDestroy, 27 Steps: []resource.TestStep{ 28 resource.TestStep{ 29 Config: testAccCheckServerConfigBasic, 30 Check: resource.ComposeTestCheckFunc( 31 testAccCheckServerExists("clc_server.acc_test_server", &resp), 32 resource.TestCheckResourceAttr( 33 "clc_server.acc_test_server", "name_template", "test"), 34 resource.TestCheckResourceAttr( 35 "clc_server.acc_test_server", "cpu", "1"), 36 resource.TestCheckResourceAttr( 37 "clc_server.acc_test_server", "memory_mb", "1024"), 38 ), 39 }, 40 // update simple attrs 41 resource.TestStep{ 42 Config: testAccCheckServerConfigCPUMEM, 43 Check: resource.ComposeTestCheckFunc( 44 testAccCheckServerExists("clc_server.acc_test_server", &resp), 45 resource.TestCheckResourceAttr( 46 "clc_server.acc_test_server", "cpu", "2"), 47 resource.TestCheckResourceAttr( 48 "clc_server.acc_test_server", "memory_mb", "2048"), 49 testAccCheckServerUpdatedSpec("clc_server.acc_test_server", &resp), 50 ), 51 }, 52 // toggle power 53 resource.TestStep{ 54 Config: testAccCheckServerConfigPower, 55 Check: resource.ComposeTestCheckFunc( 56 testAccCheckServerExists("clc_server.acc_test_server", &resp), 57 resource.TestCheckResourceAttr( 58 "clc_server.acc_test_server", "power_state", "stopped"), 59 ), 60 }, 61 /* // currently broken since disk updates require diskId 62 // add disks 63 resource.TestStep{ 64 Config: testAccCheckServerConfig_disks, 65 Check: resource.ComposeTestCheckFunc( 66 testAccCheckServerExists("clc_server.acc_test_server", &resp), 67 // power still off 68 resource.TestCheckResourceAttr( 69 "clc_server.acc_test_server", "power_state", "stopped"), 70 testAccCheckServerUpdatedDisks("clc_server.acc_test_server", &resp), 71 ), 72 }, 73 */ 74 /* // broken since network id is a (account-specific) guid 75 // set network id 76 resource.TestStep{ 77 Config: testAccCheckServerConfigNetwork, 78 Check: resource.ComposeTestCheckFunc( 79 testAccCheckServerExists("clc_server.acc_test_server", &resp), 80 resource.TestCheckResourceAttr( 81 "clc_server.acc_test_server", "network_id", "15a0f669c332435ebf375e010ac79fbb"), 82 testAccCheckServerUpdatedSpec("clc_server.acc_test_server", &resp), 83 ), 84 }, 85 */ 86 }, 87 }) 88 } 89 90 func testAccCheckServerDestroy(s *terraform.State) error { 91 client := testAccProvider.Meta().(*clc.Client) 92 93 for _, rs := range s.RootModule().Resources { 94 if rs.Type != "clc_server" { 95 continue 96 } 97 98 _, err := client.Server.Get(rs.Primary.ID) 99 100 if err == nil { 101 return fmt.Errorf("Server still exists") 102 } 103 } 104 105 return nil 106 } 107 108 func testAccCheckServerExists(n string, resp *server.Response) resource.TestCheckFunc { 109 return func(s *terraform.State) error { 110 rs, ok := s.RootModule().Resources[n] 111 if !ok { 112 return fmt.Errorf("Not found: %s", n) 113 } 114 if rs.Primary.ID == "" { 115 return fmt.Errorf("No server ID is set") 116 } 117 118 client := testAccProvider.Meta().(*clc.Client) 119 srv, err := client.Server.Get(rs.Primary.ID) 120 if err != nil { 121 return err 122 } 123 124 if strings.ToUpper(srv.ID) != rs.Primary.ID { 125 return fmt.Errorf("Server not found") 126 } 127 *resp = *srv 128 return nil 129 } 130 } 131 132 func testAccCheckServerUpdatedSpec(n string, resp *server.Response) resource.TestCheckFunc { 133 return func(s *terraform.State) error { 134 rs, ok := s.RootModule().Resources[n] 135 if !ok { 136 return fmt.Errorf("Not found: %s", n) 137 } 138 client := testAccProvider.Meta().(*clc.Client) 139 srv, err := client.Server.Get(rs.Primary.ID) 140 if err != nil { 141 return err 142 } 143 cpu := srv.Details.CPU 144 mem := srv.Details.MemoryMB 145 scpu := fmt.Sprintf("%v", cpu) 146 smem := fmt.Sprintf("%v", mem) 147 excpu := rs.Primary.Attributes["cpu"] 148 exmem := rs.Primary.Attributes["memory_mb"] 149 if scpu != excpu { 150 return fmt.Errorf("Expected CPU to be %v but found %v", excpu, scpu) 151 } 152 if smem != exmem { 153 return fmt.Errorf("Expected MEM to be %v but found %v", exmem, smem) 154 } 155 return nil 156 } 157 } 158 159 func testAccCheckServerUpdatedDisks(n string, resp *server.Response) 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 client := testAccProvider.Meta().(*clc.Client) 166 srv, err := client.Server.Get(rs.Primary.ID) 167 if err != nil { 168 return err 169 } 170 171 if len(srv.Details.Disks) <= 3 { 172 return fmt.Errorf("Expected total of > 3 drives. found: %v", len(srv.Details.Disks)) 173 } 174 175 return nil 176 } 177 } 178 179 const testAccCheckServerConfigBasic = ` 180 variable "dc" { default = "IL1" } 181 182 resource "clc_group" "acc_test_group_server" { 183 location_id = "${var.dc}" 184 name = "acc_test_group_server" 185 parent = "Default Group" 186 } 187 188 resource "clc_server" "acc_test_server" { 189 name_template = "test" 190 source_server_id = "UBUNTU-14-64-TEMPLATE" 191 group_id = "${clc_group.acc_test_group_server.id}" 192 cpu = 1 193 memory_mb = 1024 194 password = "Green123$" 195 } 196 ` 197 198 const testAccCheckServerConfigCPUMEM = ` 199 variable "dc" { default = "IL1" } 200 201 resource "clc_group" "acc_test_group_server" { 202 location_id = "${var.dc}" 203 name = "acc_test_group_server" 204 parent = "Default Group" 205 } 206 207 resource "clc_server" "acc_test_server" { 208 name_template = "test" 209 source_server_id = "UBUNTU-14-64-TEMPLATE" 210 group_id = "${clc_group.acc_test_group_server.id}" 211 cpu = 2 212 memory_mb = 2048 213 password = "Green123$" 214 power_state = "started" 215 } 216 ` 217 218 const testAccCheckServerConfigPower = ` 219 variable "dc" { default = "IL1" } 220 221 resource "clc_group" "acc_test_group_server" { 222 location_id = "${var.dc}" 223 name = "acc_test_group_server" 224 parent = "Default Group" 225 } 226 227 resource "clc_server" "acc_test_server" { 228 name_template = "test" 229 source_server_id = "UBUNTU-14-64-TEMPLATE" 230 group_id = "${clc_group.acc_test_group_server.id}" 231 cpu = 2 232 memory_mb = 2048 233 password = "Green123$" 234 power_state = "stopped" 235 } 236 ` 237 238 const testAccCheckServerConfigDisks = ` 239 variable "dc" { default = "IL1" } 240 241 resource "clc_group" "acc_test_group_server" { 242 location_id = "${var.dc}" 243 name = "acc_test_group_server" 244 parent = "Default Group" 245 } 246 247 resource "clc_server" "acc_test_server" { 248 name_template = "test" 249 source_server_id = "UBUNTU-14-64-TEMPLATE" 250 group_id = "${clc_group.acc_test_group_server.id}" 251 cpu = 2 252 memory_mb = 2048 253 password = "Green123$" 254 power_state = "stopped" 255 # network_id = "15a0f669c332435ebf375e010ac79fbb" 256 additional_disks 257 { 258 path = "/data1" 259 size_gb = 100 260 type = "partitioned" 261 } 262 263 } 264 `