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  `