github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/servers_test.go (about)

     1  package oneandone
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  	"reflect"
     7  	"strconv"
     8  	"strings"
     9  	"sync"
    10  	"testing"
    11  	"time"
    12  )
    13  
    14  var (
    15  	set_server       sync.Once
    16  	set_dvd          sync.Once
    17  	dvd_iso_id       string
    18  	server_id        string
    19  	server_name      string
    20  	ser_app_id       string
    21  	server_ip        *ServerIp
    22  	server_hdd       *Hdd
    23  	server           *Server
    24  	ser_pn           *PrivateNetwork
    25  	ser_lb           *LoadBalancer
    26  	baremetalModelId string
    27  	recoveryImageId  string
    28  	sap              ServerAppliance
    29  )
    30  
    31  const (
    32  	v_cores  = 1
    33  	c_per_pr = 1
    34  	ram      = 1
    35  	hdd_size = 40
    36  )
    37  
    38  // Helper functions
    39  
    40  func wait_for_action_done(srv *Server, sec time.Duration, count int) *Server {
    41  	for i := 0; i < count; i++ {
    42  		status, err := api.GetServerStatus(srv.Id)
    43  		if err == nil {
    44  			if status.Percent == 0 {
    45  				srv, _ = api.GetServer(srv.Id)
    46  				return srv
    47  			}
    48  		}
    49  		time.Sleep(sec * time.Second)
    50  	}
    51  	return srv
    52  }
    53  
    54  func setup_server() {
    55  	fmt.Println("Deploying a test server...")
    56  	srv_id, srv, err := create_test_server(false)
    57  
    58  	if err != nil {
    59  		fmt.Printf("Unable to create the server. Error: %s", err.Error())
    60  		return
    61  	}
    62  	if srv_id == "" || srv.Id == "" {
    63  		fmt.Printf("Unable to create the server.")
    64  		return
    65  	} else {
    66  		server_id = srv.Id
    67  	}
    68  
    69  	err = api.WaitForState(srv, "POWERED_OFF", 10, 90)
    70  
    71  	if err != nil {
    72  		fmt.Printf("Error: %s", err.Error())
    73  	}
    74  
    75  	server = srv
    76  }
    77  
    78  func get_random_datacenterID() string {
    79  	rand.Seed(time.Now().UnixNano())
    80  	dcs, _ := api.ListDatacenters()
    81  	if len(dcs) > 0 {
    82  		i := rand.Intn(len(dcs))
    83  		return dcs[i].Id
    84  	}
    85  	return ""
    86  }
    87  
    88  func get_random_appliance(max_disk_size int) ServerAppliance {
    89  	saps, _ := api.ListServerAppliances()
    90  	for _, sapp := range saps {
    91  		if sapp.MinHddSize <= max_disk_size &&
    92  			sapp.Type == "IMAGE" &&
    93  			strings.Contains(strings.ToLower(sapp.Os), "centos") {
    94  			return sapp
    95  		}
    96  	}
    97  	return saps[0]
    98  }
    99  
   100  func get_random_recoveryImage() RecoveryAppliance {
   101  	rand.Seed(time.Now().UnixNano())
   102  	raps, _ := api.ListRecoveryAppliances()
   103  	for {
   104  		i := rand.Intn(len(raps))
   105  		if !strings.Contains(strings.ToLower(raps[i].Os.Family), "windows") {
   106  			return raps[i]
   107  		}
   108  	}
   109  }
   110  
   111  func get_default_mon_policy() MonitoringPolicy {
   112  	mps, _ := api.ListMonitoringPolicies(0, 0, "default", "", "id,default")
   113  	return mps[len(mps)-1]
   114  }
   115  
   116  func create_test_server(power_on bool) (string, *Server, error) {
   117  	rand.Seed(time.Now().UnixNano())
   118  	server_name = fmt.Sprintf("TestServer_%d", rand.Intn(1000000))
   119  	fmt.Printf("Creating test server '%s'...\n", server_name)
   120  
   121  	sap = get_random_appliance(hdd_size)
   122  	ser_app_id = sap.Id
   123  	mp := get_default_mon_policy()
   124  
   125  	req := ServerRequest{
   126  		Name:               server_name,
   127  		Description:        server_name + " description",
   128  		ApplianceId:        ser_app_id,
   129  		MonitoringPolicyId: mp.Id,
   130  		PowerOn:            power_on,
   131  		ServerType:         "cloud",
   132  		Hardware: Hardware{
   133  			Vcores:            v_cores,
   134  			CoresPerProcessor: c_per_pr,
   135  			Ram:               ram,
   136  			Hdds: []Hdd{
   137  				Hdd{
   138  					Size:   hdd_size,
   139  					IsMain: true,
   140  				},
   141  			},
   142  		},
   143  	}
   144  	ser_id, server, err := api.CreateServer(&req)
   145  	return ser_id, server, err
   146  }
   147  
   148  func load_server_dvd(ser_id string) {
   149  	dvds, _ := api.ListDvdIsos()
   150  	var dvd = DvdIso{}
   151  
   152  	for _, itm := range dvds {
   153  		if strings.Contains(strings.ToLower(itm.Name), "centos 6") && itm.Architecture == sap.Architecture {
   154  			dvd = itm
   155  		}
   156  	}
   157  
   158  	fmt.Printf("Loading dvd '%s' in server '%s' virtula drive...\n", dvd.Name, server.Name)
   159  
   160  	srv, err := api.LoadServerDvd(ser_id, dvd.Id)
   161  
   162  	if err != nil {
   163  		fmt.Printf("Loading server's dvd failed. Error: " + err.Error())
   164  		return
   165  	}
   166  
   167  	for srv.Dvd == nil || srv.Status.Percent != 0 {
   168  		srv = wait_for_action_done(srv, 20, 180)
   169  	}
   170  	dvd_iso_id = dvd.Id
   171  	server = srv
   172  }
   173  
   174  // /servers tests
   175  
   176  func TestCreateServer(t *testing.T) {
   177  	set_server.Do(setup_server)
   178  
   179  	if server == nil {
   180  		t.Errorf("CreateServer failed.")
   181  		return
   182  	}
   183  	if server.Name != server_name {
   184  		t.Errorf("Wrong server name.")
   185  	}
   186  	if server.Image.Id != ser_app_id {
   187  		t.Errorf("Wrong server image on server '%s'.", server.Name)
   188  	}
   189  	if server.Hardware.Vcores != v_cores {
   190  		t.Errorf("Wrong number of processor cores on server '%s'.", server.Name)
   191  	}
   192  	if server.Hardware.CoresPerProcessor != c_per_pr {
   193  		t.Errorf("Wrong number of cores per processor on server '%s'.", server.Name)
   194  	}
   195  	if server.Hardware.Ram != ram {
   196  		t.Errorf("Wrong RAM size on server '%s'.", server.Name)
   197  	}
   198  }
   199  
   200  func TestCreateServerEx(t *testing.T) {
   201  	fmt.Println("Creating a fixed-size server...")
   202  	var size_s FixedInstanceInfo
   203  	fixed_flavours, _ := api.ListFixedInstanceSizes()
   204  	for _, fl := range fixed_flavours {
   205  		if fl.Name == "S" {
   206  			size_s = fl
   207  			break
   208  		}
   209  	}
   210  	sap := get_random_appliance(size_s.Hardware.Hdds[0].Size)
   211  
   212  	req := ServerRequest{
   213  		DatacenterId: get_random_datacenterID(),
   214  		Name:         "Random S Server",
   215  		ApplianceId:  sap.Id,
   216  		Hardware: Hardware{
   217  			FixedInsSizeId: size_s.Id,
   218  		},
   219  	}
   220  	ip, password, err := api.CreateServerEx(&req, 1800)
   221  
   222  	if ip == "" {
   223  		t.Errorf("CreateServerEx failed. Server IP address cannot be blank.")
   224  	}
   225  	if password == "" {
   226  		t.Errorf("CreateServerEx failed. Password cannot be blank.")
   227  	}
   228  	if err != nil {
   229  		t.Errorf("CreateServerEx failed. Error: " + err.Error())
   230  		return
   231  	}
   232  	srvs, _ := api.ListServers(0, 0, "", ip, "")
   233  	if len(srvs) > 0 {
   234  		api.DeleteServer(srvs[0].Id, false)
   235  	}
   236  }
   237  
   238  func TestListServers(t *testing.T) {
   239  	//set_server.Do(setup_server)
   240  	fmt.Println("Listing all servers...")
   241  
   242  	res, err := api.ListServers()
   243  	if err != nil {
   244  		t.Errorf("ListServers failed. Error: " + err.Error())
   245  	}
   246  	if len(res) == 0 {
   247  		t.Errorf("No server found.")
   248  	}
   249  
   250  	res, err = api.ListServers(1, 2, "name", "", "id,name")
   251  
   252  	if err != nil {
   253  		t.Errorf("ListServers with parameter options failed. Error: " + err.Error())
   254  		return
   255  	}
   256  	if len(res) == 0 {
   257  		t.Errorf("No server found.")
   258  	}
   259  	if len(res) > 2 {
   260  		t.Errorf("Wrong number of objects per page.")
   261  	}
   262  	if res[0].Hardware != nil {
   263  		t.Errorf("Filtering parameters failed.")
   264  	}
   265  	if res[0].Name == "" {
   266  		t.Errorf("Filtering parameters failed.")
   267  	}
   268  	if len(res) == 2 && res[0].Name >= res[1].Name {
   269  		t.Errorf("Sorting parameters failed.")
   270  	}
   271  	// Test for error response
   272  	res, err = api.ListServers(0, 0, true, "name", "")
   273  	if res != nil || err == nil {
   274  		t.Errorf("ListServers failed to handle incorrect argument type.")
   275  	}
   276  
   277  	res, err = api.ListServers(0, 0, "", server_name, "")
   278  
   279  	if err != nil {
   280  		t.Errorf("ListServers with parameter options failed. Error: " + err.Error())
   281  		return
   282  	}
   283  	if len(res) != 1 {
   284  		t.Errorf("Search parameter failed.")
   285  	}
   286  	if res[0].Name != server_name {
   287  		t.Errorf("Search parameter failed.")
   288  	}
   289  }
   290  
   291  func TestListBaremetalModel(t *testing.T) {
   292  	fmt.Println("Listing all baremetal models...")
   293  
   294  	res, err := api.ListBaremetalModels()
   295  	if err != nil {
   296  		t.Errorf("ListBaremetalModels failed. Error: " + err.Error())
   297  	}
   298  	if len(res) == 0 {
   299  		t.Errorf("No baremetal model found.")
   300  	}
   301  
   302  	baremetalModelId = res[0].Id
   303  
   304  	if len(res) == 0 {
   305  		t.Errorf("No baremetal model found.")
   306  	}
   307  }
   308  
   309  func TestListFixedInstanceSizes(t *testing.T) {
   310  	fmt.Println("Listing fixed instance sizes...")
   311  
   312  	res, err := api.ListFixedInstanceSizes()
   313  
   314  	if err != nil {
   315  		t.Errorf("ListFixedInstanceSizes failed. Error: " + err.Error())
   316  		return
   317  	}
   318  
   319  	exp_type := reflect.Slice
   320  	rec_type := reflect.TypeOf(res).Kind()
   321  
   322  	if rec_type != exp_type {
   323  		t.Errorf("Expected type: " + exp_type.String() + ", received: " + rec_type.String())
   324  	}
   325  }
   326  
   327  func TestGetFixedInstanceSize(t *testing.T) {
   328  	fmt.Println("Getting a fixed instance size...")
   329  
   330  	res, err := api.ListFixedInstanceSizes()
   331  
   332  	if err != nil {
   333  		t.Errorf("GetFixedInstanceSize failed. Error: " + err.Error())
   334  	}
   335  
   336  	if len(res) > 0 {
   337  		fix_in_id := res[0].Id
   338  		res, err := api.GetFixedInstanceSize(fix_in_id)
   339  
   340  		if err != nil {
   341  			fmt.Println("GetFixedInstanceSize failed. Error: " + err.Error())
   342  			t.Errorf("GetFixedInstanceSize failed. Error: " + err.Error())
   343  		}
   344  		if res.Id != fix_in_id {
   345  			t.Errorf("Wrong fixed instance ID.")
   346  		}
   347  		if res.Hardware == nil {
   348  			t.Errorf("Missing fixed instance hardware info.")
   349  		}
   350  	} else {
   351  		t.Errorf("Empty fixed instance sizes list.")
   352  	}
   353  }
   354  
   355  func TestGetServer(t *testing.T) {
   356  	set_server.Do(setup_server)
   357  
   358  	fmt.Println("Getting the server...")
   359  	srv, err := api.GetServer(server_id)
   360  
   361  	if err != nil {
   362  		t.Errorf("GetServer failed. Error: " + err.Error())
   363  		return
   364  	}
   365  	if srv.Id != server_id {
   366  		t.Errorf("Wrong server ID.")
   367  	}
   368  }
   369  
   370  func TestGetBaremetalModel(t *testing.T) {
   371  	fmt.Println("Getting baremetal model...")
   372  	bmm, err := api.GetBaremetalModel(baremetalModelId)
   373  
   374  	if err != nil {
   375  		t.Errorf("GetBaremetalModel failed. Error: " + err.Error())
   376  		return
   377  	}
   378  	if bmm.Id != baremetalModelId {
   379  		t.Errorf("Wrong baremetal model ID.")
   380  	}
   381  }
   382  
   383  func TestGetServerStatus(t *testing.T) {
   384  	set_server.Do(setup_server)
   385  
   386  	fmt.Println("Getting the server's status...")
   387  	status, err := api.GetServerStatus(server_id)
   388  
   389  	if err != nil {
   390  		t.Errorf("GetServerStatus failed. Error: " + err.Error())
   391  		return
   392  	}
   393  	if status.State != "POWERED_OFF" {
   394  		t.Errorf("Wrong server status.")
   395  	}
   396  }
   397  
   398  func TestStartServer(t *testing.T) {
   399  	set_server.Do(setup_server)
   400  
   401  	fmt.Println("Starting the server...")
   402  	srv, err := api.StartServer(server_id)
   403  
   404  	if err != nil {
   405  		t.Errorf("StartServer failed. Error: " + err.Error())
   406  		return
   407  	}
   408  
   409  	err = api.WaitForState(srv, "POWERED_ON", 10, 60)
   410  
   411  	if err != nil {
   412  		t.Errorf("Starting the server failed. Error: " + err.Error())
   413  	}
   414  
   415  	server, err = api.GetServer(srv.Id)
   416  
   417  	if err != nil {
   418  		t.Errorf("GetServer failed. Error: " + err.Error())
   419  	} else if server.Status.State != "POWERED_ON" {
   420  		t.Errorf("Wrong server state. Expected: POWERED_ON. Found: %s.", server.Status.State)
   421  	}
   422  }
   423  
   424  func TestRebootServer(t *testing.T) {
   425  	set_server.Do(setup_server)
   426  
   427  	for i := 1; i < 3; i++ {
   428  		is_hardware := i%2 == 0
   429  		var method string
   430  		if is_hardware {
   431  			method = "HARDWARE"
   432  		} else {
   433  			method = "SOFTWARE"
   434  		}
   435  		fmt.Printf("Rebooting the server using '%s' method...\n", method)
   436  		srv, err := api.RebootServer(server_id, is_hardware)
   437  
   438  		if err != nil {
   439  			t.Errorf("RebootServer using '%s' method failed. Error: %s", method, err.Error())
   440  			return
   441  		}
   442  
   443  		err = api.WaitForState(srv, "REBOOTING", 10, 60)
   444  
   445  		if err != nil {
   446  			t.Errorf("Rebooting the server using '%s' method failed. Error:  %s", method, err.Error())
   447  		}
   448  
   449  		err = api.WaitForState(srv, "POWERED_ON", 10, 60)
   450  
   451  		if err != nil {
   452  			t.Errorf("Rebooting the server using '%s' method failed. Error:  %s", method, err.Error())
   453  		}
   454  	}
   455  }
   456  
   457  func TestRenameServer(t *testing.T) {
   458  	set_server.Do(setup_server)
   459  
   460  	fmt.Println("Renaming the server...")
   461  
   462  	new_name := server.Name + "_renamed"
   463  	new_desc := server.Description + "_renamed"
   464  
   465  	srv, err := api.RenameServer(server_id, new_name, new_desc)
   466  
   467  	if err != nil {
   468  		t.Errorf("Renaming server failed. Error: " + err.Error())
   469  		return
   470  	}
   471  	if srv.Name != new_name {
   472  		t.Errorf("Wrong server name.")
   473  	}
   474  	if srv.Description != new_desc {
   475  		t.Errorf("Wrong server description.")
   476  	}
   477  }
   478  
   479  func TestLoadServerDvd(t *testing.T) {
   480  	set_server.Do(setup_server)
   481  	set_dvd.Do(func() { load_server_dvd(server_id) })
   482  
   483  	if server.Dvd == nil {
   484  		t.Errorf("No dvd loaded.")
   485  	} else if server.Dvd.Id != dvd_iso_id {
   486  		t.Errorf("Wrong dvd loaded.")
   487  	}
   488  }
   489  
   490  func TestGetServerDvd(t *testing.T) {
   491  	set_server.Do(setup_server)
   492  	set_dvd.Do(func() { load_server_dvd(server_id) })
   493  
   494  	fmt.Printf("Getting server '%s' virtual dvd image...\n", server.Name)
   495  	dvd, err := api.GetServerDvd(server_id)
   496  
   497  	if err != nil {
   498  		t.Errorf("GetServerDvd failed. Error: " + err.Error())
   499  		return
   500  	}
   501  	time.Sleep(time.Second)
   502  	server, _ = api.GetServer(server_id)
   503  	if dvd == nil || server.Dvd == nil {
   504  		t.Errorf("No dvd loaded.")
   505  	} else if dvd.Id != server.Dvd.Id {
   506  		t.Errorf("Wrong dvd loaded.")
   507  	}
   508  }
   509  
   510  func TestEjectServerDvd(t *testing.T) {
   511  	set_server.Do(setup_server)
   512  	set_dvd.Do(func() { load_server_dvd(server_id) })
   513  
   514  	srvr, err := api.GetServer(server_id)
   515  	if err != nil {
   516  		t.Errorf("get server failed. Error: " + err.Error())
   517  	}
   518  	api.WaitForState(srvr, "POWERED_ON", 10, 90)
   519  
   520  	time.Sleep(180 * time.Second)
   521  	fmt.Printf("Ejecting server '%s' virtual dvd drive...\n", server.Name)
   522  	srv, err := api.EjectServerDvd(server_id)
   523  
   524  	if err != nil {
   525  		t.Errorf("EjectServerDvd failed. Error: " + err.Error())
   526  		return
   527  	}
   528  
   529  	for srv.Dvd != nil || srv.Status.Percent != 0 {
   530  		srv = wait_for_action_done(srv, 10, 60)
   531  	}
   532  
   533  	if srv.Dvd != nil {
   534  		t.Errorf("Unable to eject the server's dvd.")
   535  	}
   536  }
   537  
   538  func TestGetServerHardware(t *testing.T) {
   539  	set_server.Do(setup_server)
   540  
   541  	fmt.Println("Getting the server's hardware...")
   542  	hardware, err := api.GetServerHardware(server_id)
   543  
   544  	if err != nil {
   545  		t.Errorf("GetServerHardware failed. Error: " + err.Error())
   546  		return
   547  	}
   548  	if hardware == nil {
   549  		t.Errorf("Unable to get the server's hardware.")
   550  	} else {
   551  		if hardware.Vcores != server.Hardware.Vcores {
   552  			t.Errorf("Wrong number of processor cores on server '%s'.", server.Name)
   553  		}
   554  		if hardware.CoresPerProcessor != server.Hardware.CoresPerProcessor {
   555  			t.Errorf("Wrong number of cores per processor on server '%s'.", server.Name)
   556  		}
   557  		if hardware.Ram != server.Hardware.Ram {
   558  			t.Errorf("Wrong RAM size on server '%s'.", server.Name)
   559  		}
   560  		if len(hardware.Hdds) == 0 {
   561  			t.Errorf("Missing HDD on server '%s'.", server.Name)
   562  		}
   563  	}
   564  }
   565  
   566  func TestListServerHdds(t *testing.T) {
   567  	set_server.Do(setup_server)
   568  
   569  	fmt.Println("Listing all the server's HDDs...")
   570  	hdds, err := api.ListServerHdds(server_id)
   571  
   572  	if err != nil {
   573  		t.Errorf("ListServerHdds failed. Error: " + err.Error())
   574  		return
   575  	}
   576  	if len(hdds) != 1 {
   577  		t.Errorf("Wrong number of the server's hard disks.")
   578  	}
   579  	if hdds[0].Id == "" {
   580  		t.Errorf("Wrong HDD id.")
   581  	}
   582  	if hdds[0].Size != 40 {
   583  		t.Errorf("Wrong HDD size.")
   584  	}
   585  	if hdds[0].IsMain != true {
   586  		t.Errorf("Wrong main HDD.")
   587  	}
   588  	server_hdd = &hdds[0]
   589  }
   590  
   591  func TestGetServerHdd(t *testing.T) {
   592  	set_server.Do(setup_server)
   593  	hdds, _ := api.ListServerHdds(server_id)
   594  
   595  	fmt.Println("Getting server HDD...")
   596  	hdd, err := api.GetServerHdd(server_id, hdds[0].Id)
   597  
   598  	if err != nil {
   599  		t.Errorf("GetServerHdd failed. Error: " + err.Error())
   600  		return
   601  	}
   602  	if hdd.Id != hdds[0].Id {
   603  		t.Errorf("Wrong HDD id.")
   604  	}
   605  	if hdd.Size != hdds[0].Size {
   606  		t.Errorf("Wrong HDD size.")
   607  	}
   608  	if hdd.IsMain != hdds[0].IsMain {
   609  		t.Errorf("Wrong main HDD.")
   610  	}
   611  }
   612  
   613  func TestResizeServerHdd(t *testing.T) {
   614  	set_server.Do(setup_server)
   615  	hdds, _ := api.ListServerHdds(server_id)
   616  
   617  	fmt.Println("Resizing the server's HDD...")
   618  	srvr, err := api.GetServer(server_id)
   619  	if err != nil {
   620  		t.Errorf("get server failed. Error: " + err.Error())
   621  	}
   622  	api.WaitForState(srvr, "POWERED_ON", 10, 90)
   623  	time.Sleep(120 * time.Second)
   624  	srv, err := api.ResizeServerHdd(server_id, hdds[0].Id, 50)
   625  
   626  	if err != nil {
   627  		t.Errorf("ResizeServerHdd failed. Error: " + err.Error())
   628  		return
   629  	}
   630  
   631  	srv = wait_for_action_done(srv, 10, 30)
   632  
   633  	if err != nil {
   634  		t.Errorf("GetServer failed. Error: " + err.Error())
   635  	} else {
   636  		if srv.Hardware.Hdds[0].Id != hdds[0].Id {
   637  			t.Errorf("Wrong HDD id.")
   638  		}
   639  		if srv.Hardware.Hdds[0].Size != 50 {
   640  			t.Errorf("HDD not resized.")
   641  		}
   642  	}
   643  }
   644  
   645  func TestAddServerHdds(t *testing.T) {
   646  	set_server.Do(setup_server)
   647  	hdds := ServerHdds{
   648  		Hdds: []Hdd{
   649  			{
   650  				Size:   20,
   651  				IsMain: false,
   652  			},
   653  		},
   654  	}
   655  	fmt.Println("Adding a HDD to the server...")
   656  	time.Sleep(10000)
   657  	srv, err := api.AddServerHdds(server_id, &hdds)
   658  
   659  	if err != nil {
   660  		t.Errorf("AddServerHdds failed. Error: " + err.Error())
   661  		return
   662  	}
   663  
   664  	srv = wait_for_action_done(srv, 10, 120)
   665  
   666  	if len(srv.Hardware.Hdds) != 2 {
   667  		t.Errorf("Wrong number of hard disks.")
   668  	}
   669  
   670  	var new_hdd *Hdd
   671  	if srv.Hardware.Hdds[0].Id != server_hdd.Id {
   672  		new_hdd = &srv.Hardware.Hdds[0]
   673  	} else {
   674  		new_hdd = &srv.Hardware.Hdds[1]
   675  	}
   676  	if new_hdd.Size != hdds.Hdds[0].Size {
   677  		t.Errorf("Wrong HDD size.")
   678  	}
   679  	if new_hdd.IsMain != hdds.Hdds[0].IsMain {
   680  		t.Errorf("Wrong main HDD.")
   681  	}
   682  
   683  	server_hdd = new_hdd
   684  }
   685  
   686  func TestDeleteServerHdd(t *testing.T) {
   687  	set_server.Do(setup_server)
   688  
   689  	fmt.Println("Deleting the server's HDD...")
   690  	time.Sleep(30 * time.Second)
   691  	srv, err := api.DeleteServerHdd(server_id, server_hdd.Id)
   692  
   693  	if err != nil {
   694  		t.Errorf("DeleteServerHdd failed. Error: " + err.Error())
   695  		return
   696  	}
   697  	srv = wait_for_action_done(srv, 10, 90)
   698  	time.Sleep(30 * time.Second)
   699  	srv, err = api.GetServer(server_id)
   700  	if len(srv.Hardware.Hdds) != 1 {
   701  		t.Errorf("Wrong number of the server's hard disks. The HDD was not deleted.")
   702  	}
   703  
   704  	server_hdd = &srv.Hardware.Hdds[0]
   705  }
   706  
   707  func TestGetServerImage(t *testing.T) {
   708  	set_server.Do(setup_server)
   709  
   710  	fmt.Println("Getting the server's image...")
   711  	img, err := api.GetServerImage(server_id)
   712  
   713  	if err != nil {
   714  		t.Errorf("GetServerImage failed. Error: " + err.Error())
   715  		return
   716  	}
   717  	if img.Id != server.Image.Id {
   718  		t.Errorf("Wrong image ID.")
   719  	}
   720  	if img.Name != server.Image.Name {
   721  		t.Errorf("Wrong image name.")
   722  	}
   723  }
   724  
   725  func TestReinstallServerImage(t *testing.T) {
   726  	set_server.Do(setup_server)
   727  	sap := get_random_appliance(hdd_size)
   728  	fps, _ := api.ListFirewallPolicies()
   729  	fp_id := ""
   730  	for _, fp := range fps {
   731  		if fp.DefaultPolicy == 1 {
   732  			fp_id = fp.Id
   733  			break
   734  		}
   735  	}
   736  
   737  	if fp_id == "" {
   738  		fp_id = fps[len(fps)-1].Id
   739  	}
   740  	fmt.Printf("Reinstalling the server to '%s'...\n", sap.Name)
   741  	srv, err := api.ReinstallServerImage(server_id, sap.Id, "", fp_id)
   742  	if err != nil {
   743  		t.Errorf("ReinstallServerImage failed. Error: " + err.Error())
   744  	} else {
   745  		err = api.WaitForState(srv, "POWERED_ON", 30, 120)
   746  		if err != nil {
   747  			t.Errorf("ReinstallServerImage failed. Error: " + err.Error())
   748  		}
   749  		time.Sleep(time.Second)
   750  		srv, _ = api.GetServer(server_id)
   751  
   752  		if srv.Image.Name != sap.Name {
   753  			t.Errorf("Wrong image installed.")
   754  		}
   755  		if srv.Ips[0].Firewall == nil || srv.Ips[0].Firewall.Id != fp_id {
   756  			t.Errorf("Failed to assign firewall policy '%s' to the server when reinstalling the server.", fp_id)
   757  		}
   758  	}
   759  }
   760  
   761  func TestStopServer(t *testing.T) {
   762  	set_server.Do(setup_server)
   763  
   764  	fmt.Println("Stopping the server...")
   765  	srv, err := api.ShutdownServer(server_id, false)
   766  
   767  	if err != nil {
   768  		t.Errorf("ShutdownServer failed. Error: " + err.Error())
   769  	} else {
   770  		err = api.WaitForState(srv, "POWERED_OFF", 10, 60)
   771  		if err != nil {
   772  			t.Errorf("Stopping the server failed. Error: " + err.Error())
   773  		}
   774  
   775  		server, err = api.GetServer(server_id)
   776  		if err != nil {
   777  			t.Errorf("GetServer failed. Error: " + err.Error())
   778  		}
   779  		if server.Status.State != "POWERED_OFF" {
   780  			t.Errorf("Wrong server state. Expected: POWERED_OFF. Found: %s.", server.Status.State)
   781  		}
   782  	}
   783  }
   784  
   785  func TestUpdateServerHardware(t *testing.T) {
   786  	// The server should be POWERED_OFF for this test to pass.
   787  	// Hot increase of CoresPerProcessor is not allowed.
   788  	set_server.Do(setup_server)
   789  
   790  	fmt.Println("Updating the server's hardware...")
   791  
   792  	hw := Hardware{
   793  		Vcores:            2,
   794  		CoresPerProcessor: 2,
   795  		Ram:               2,
   796  	}
   797  
   798  	srv, err := api.UpdateServerHardware(server_id, &hw)
   799  
   800  	if err != nil {
   801  		t.Errorf("UpdateServersHardware failed. Error: " + err.Error())
   802  	} else {
   803  		srv = wait_for_action_done(srv, 10, 90)
   804  		if srv.Hardware.Vcores != hw.Vcores {
   805  			t.Errorf("Wrong number of processor cores. Expected: %d ; Found: %d", hw.Vcores, srv.Hardware.Vcores)
   806  		}
   807  		if srv.Hardware.CoresPerProcessor != hw.CoresPerProcessor {
   808  			t.Errorf("Wrong number of cores per processor. Expected: %d ; Found: %d", hw.CoresPerProcessor, srv.Hardware.CoresPerProcessor)
   809  		}
   810  		if srv.Hardware.Ram != hw.Ram {
   811  			t.Errorf("Wrong RAM size. Expected: %f ; Found: %f", hw.Ram, srv.Hardware.Ram)
   812  		}
   813  		server = srv
   814  	}
   815  }
   816  
   817  func TestCreateServerSnapshot(t *testing.T) {
   818  	set_server.Do(setup_server)
   819  
   820  	fmt.Println("Creating a new snapshot for the server...")
   821  	srv, err := api.CreateServerSnapshot(server_id)
   822  
   823  	if err != nil {
   824  		t.Errorf("CreateServerSnapshot failed. Error: " + err.Error())
   825  	} else {
   826  		if srv.Snapshot == nil {
   827  			t.Errorf("No snapshot created.")
   828  		} else {
   829  			time.Sleep(180 * time.Second)
   830  		}
   831  	}
   832  }
   833  
   834  func TestGetServerSnapshot(t *testing.T) {
   835  	set_server.Do(setup_server)
   836  
   837  	fmt.Println("Getting the server's snapshots...")
   838  	ss, err := api.GetServerSnapshot(server_id)
   839  
   840  	if err != nil {
   841  		t.Errorf("GetServerSnapshot failed. Error: " + err.Error())
   842  	}
   843  	if ss == nil {
   844  		t.Errorf("No server snapshot found.")
   845  	}
   846  }
   847  
   848  func TestRestoreServerSnapshot(t *testing.T) {
   849  	set_server.Do(setup_server)
   850  	ss, _ := api.GetServerSnapshot(server_id)
   851  
   852  	fmt.Println("Restoring the server's snapshot...")
   853  	_, err := api.RestoreServerSnapshot(server_id, ss.Id)
   854  
   855  	if err != nil {
   856  		t.Errorf("RestoreServerSnapshot failed. Error: " + err.Error())
   857  	} else {
   858  		time.Sleep(180 * time.Second)
   859  	}
   860  }
   861  
   862  func TestDeleteServerSnapshot(t *testing.T) {
   863  	set_server.Do(setup_server)
   864  	ss, _ := api.GetServerSnapshot(server_id)
   865  
   866  	fmt.Println("Deleting the server's snapshot...")
   867  	srv, err := api.DeleteServerSnapshot(server_id, ss.Id)
   868  
   869  	if err != nil {
   870  		t.Errorf("DeleteServerSnapshot failed. Error: " + err.Error())
   871  	} else {
   872  		time.Sleep(180 * time.Second)
   873  		srv, _ = api.GetServer(server_id)
   874  		if srv.Snapshot != nil {
   875  			t.Errorf("The snapshot was not deleted.")
   876  		}
   877  	}
   878  }
   879  
   880  func TestListServerIps(t *testing.T) {
   881  	set_server.Do(setup_server)
   882  
   883  	srv, e := api.GetServer(server_id)
   884  	if e == nil {
   885  		server = srv
   886  	}
   887  
   888  	fmt.Println("Listing the server's IPs...")
   889  	ips, err := api.ListServerIps(server_id)
   890  
   891  	if err != nil {
   892  		t.Errorf("ListServerIps failed. Error: " + err.Error())
   893  		return
   894  	}
   895  	if len(ips) != len(server.Ips) {
   896  		t.Errorf("Not all IPs were obtained.")
   897  	}
   898  	if ips[0].Id != server.Ips[0].Id {
   899  		t.Errorf("Wrong IP ID.")
   900  	}
   901  	if ips[0].Ip != server.Ips[0].Ip {
   902  		t.Errorf("Wrong IP address.")
   903  	}
   904  }
   905  
   906  func TestAssignServerIp(t *testing.T) {
   907  	set_server.Do(setup_server)
   908  
   909  	fmt.Println("Assigning new IP addresses to the server...")
   910  	for i := 2; i < 4; i++ {
   911  		time.Sleep(time.Second)
   912  		srv, err := api.AssignServerIp(server_id, "IPV4")
   913  		if err != nil {
   914  			t.Errorf("AssignServerIp failed. Error: " + err.Error())
   915  			return
   916  		}
   917  		srv = wait_for_action_done(srv, 10, 30)
   918  		if len(srv.Ips) != i {
   919  			t.Errorf("IP address not assigned to the server.")
   920  		}
   921  		server = srv
   922  	}
   923  }
   924  
   925  func TestGetServerIp(t *testing.T) {
   926  	set_server.Do(setup_server)
   927  
   928  	fmt.Println("Getting the server's IP...")
   929  	server, _ = api.GetServer(server_id)
   930  	if server == nil {
   931  		t.Errorf("GetServer failed.")
   932  		return
   933  	}
   934  	time.Sleep(time.Second)
   935  	ip, err := api.GetServerIp(server_id, server.Ips[0].Id)
   936  
   937  	if err != nil {
   938  		t.Errorf("GetServerIps failed. Error: " + err.Error())
   939  		return
   940  	}
   941  	if ip.Id != server.Ips[0].Id {
   942  		t.Errorf("Wrong IP ID.")
   943  	}
   944  	if ip.Ip != server.Ips[0].Ip {
   945  		t.Errorf("Wrong IP address.")
   946  	}
   947  }
   948  
   949  func TestDeleteServerIp(t *testing.T) {
   950  	set_server.Do(setup_server)
   951  
   952  	if len(server.Ips) <= 1 {
   953  		for i := 0; i < 2; i++ {
   954  			time.Sleep(10 * time.Second)
   955  			s, e := api.AssignServerIp(server_id, "IPV4")
   956  			if s != nil && e == nil {
   957  				s = wait_for_action_done(s, 10, 30)
   958  				server = s
   959  				time.Sleep(120 * time.Second)
   960  			}
   961  		}
   962  	}
   963  	ip_no := len(server.Ips)
   964  	for i := 1; i < ip_no-1; i++ {
   965  		keep_ip := i%2 == 0
   966  		fmt.Printf("Deleting the server's IP '%s' (keep_ip = %s)...\n", server.Ips[i].Ip, strconv.FormatBool(keep_ip))
   967  		api.DeleteServerIp(server_id, server.Ips[i].Id, keep_ip)
   968  		time.Sleep(180 * time.Second)
   969  		ip, _ := api.GetPublicIp(server.Ips[i].Id)
   970  		if keep_ip {
   971  			if ip == nil {
   972  				t.Errorf("Failed to keep public IP '%s' when removed from server.", server.Ips[i].Ip)
   973  			} else {
   974  				fmt.Printf("Deleting IP address '%s' after removing from the server...\n", server.Ips[i].Ip)
   975  				api.DeletePublicIp(ip.Id)
   976  			}
   977  		} else if ip != nil {
   978  			t.Errorf("Failed to delete public IP '%s' when removed from server.", server.Ips[i].Ip)
   979  			fmt.Printf("Cleaning up. Deleting IP address '%s' directly...\n", server.Ips[i].Ip)
   980  			api.DeletePublicIp(ip.Id)
   981  		}
   982  	}
   983  }
   984  
   985  func TestAssignServerPrivateNetwork(t *testing.T) {
   986  	set_server.Do(setup_server)
   987  	time.Sleep(20000)
   988  	ser_pn = create_private_netwok()
   989  
   990  	api.WaitForState(ser_pn, "ACTIVE", 10, 60)
   991  	fmt.Println("Assigning the private network to the server...")
   992  	srv, err := api.AssignServerPrivateNetwork(server_id, ser_pn.Id)
   993  
   994  	if err != nil {
   995  		t.Errorf("AssignServerPrivateNetwork failed. Error: " + err.Error())
   996  		return
   997  	}
   998  
   999  	api.WaitForState(ser_pn, "ACTIVE", 10, 90)
  1000  	srv, err = api.GetServer(server_id)
  1001  	if err != nil {
  1002  		t.Errorf("get server failed. Error: " + err.Error())
  1003  	}
  1004  	api.WaitForState(srv, "POWERED_OFF", 10, 90)
  1005  
  1006  	if len(srv.PrivateNets) == 0 {
  1007  		t.Errorf("The private network was not assigned to the server.")
  1008  	} else if srv.PrivateNets[0].Id != ser_pn.Id {
  1009  		t.Errorf("The private network was not assigned to the server.")
  1010  	}
  1011  
  1012  	prn, _ := api.GetServerPrivateNetwork(server_id, ser_pn.Id)
  1013  
  1014  	api.WaitForState(prn, "ACTIVE", 10, 60)
  1015  	ser_pn, _ = api.GetPrivateNetwork(prn.Id)
  1016  }
  1017  
  1018  func TestListServerPrivateNetworks(t *testing.T) {
  1019  	set_server.Do(setup_server)
  1020  
  1021  	fmt.Println("Listing the server's private networks...")
  1022  	pns, err := api.ListServerPrivateNetworks(server_id)
  1023  
  1024  	if err != nil {
  1025  		t.Errorf("ListServerPrivateNetworks failed. Error: " + err.Error())
  1026  		return
  1027  	}
  1028  	if len(pns) > 0 {
  1029  		if pns[0].Id == "" {
  1030  			t.Errorf("The private network ID is missing.")
  1031  		}
  1032  		if pns[0].Name == "" {
  1033  			t.Errorf("The private network name is missing.")
  1034  		}
  1035  	} else {
  1036  		t.Errorf("No private networks were assigned to the server.")
  1037  	}
  1038  }
  1039  
  1040  func TestGetServerPrivateNetwork(t *testing.T) {
  1041  	set_server.Do(setup_server)
  1042  
  1043  	fmt.Println("Getting the server's private network...")
  1044  	privn, err := api.GetServerPrivateNetwork(server_id, ser_pn.Id)
  1045  
  1046  	if err != nil {
  1047  		t.Errorf("GetServerPrivateNetwork failed. Error: " + err.Error())
  1048  		return
  1049  	}
  1050  	if len(privn.Servers) == 0 {
  1051  		t.Errorf("The private network server is missing.")
  1052  	}
  1053  
  1054  	found_srv := false
  1055  	for _, s := range privn.Servers {
  1056  		if s.Id == server_id {
  1057  			found_srv = true
  1058  			break
  1059  		}
  1060  	}
  1061  
  1062  	if !found_srv {
  1063  		t.Errorf("Private network server is missing.")
  1064  	}
  1065  }
  1066  
  1067  func TestRemoveServerPrivateNetwork(t *testing.T) {
  1068  	set_server.Do(setup_server)
  1069  
  1070  	fmt.Println("Unassigning the private network from the server...")
  1071  	srv, err := api.RemoveServerPrivateNetwork(server_id, ser_pn.Id)
  1072  
  1073  	if err != nil {
  1074  		t.Errorf("RemoveServerPrivateNetwork failed. Error: " + err.Error())
  1075  		return
  1076  	}
  1077  
  1078  	prn, _ := api.GetServerPrivateNetwork(server_id, ser_pn.Id)
  1079  	//	prn = wait_for_state(prn, 20, 30, "ACTIVE")
  1080  	api.WaitForState(prn, "ACTIVE", 10, 60)
  1081  	srv, err = api.GetServer(server_id)
  1082  
  1083  	if srv == nil || err != nil {
  1084  		t.Errorf("GetServer failed. Error: " + err.Error())
  1085  	} else if len(srv.PrivateNets) > 0 {
  1086  		t.Errorf("Private network not unassigned from the server.")
  1087  	}
  1088  	// cleanup
  1089  	api.DeletePrivateNetwork(ser_pn.Id)
  1090  }
  1091  
  1092  func TestAssignServerIpLoadBalancer(t *testing.T) {
  1093  	set_server.Do(setup_server)
  1094  	ips, _ := api.ListServerIps(server_id)
  1095  	lb := create_load_balancer()
  1096  
  1097  	fmt.Printf("Assigning a load balancer to the server's IP '%s'...\n", ips[0].Ip)
  1098  	srv, err := api.AssignServerIpLoadBalancer(server_id, ips[0].Id, lb.Id)
  1099  
  1100  	if err != nil {
  1101  		t.Errorf("AssignServerIpLoadBalancer failed. Error: " + err.Error())
  1102  		return
  1103  	}
  1104  	if len(srv.Ips[0].LoadBalancers) == 0 {
  1105  		t.Errorf("Load balancer not assigned.")
  1106  	}
  1107  	if srv.Ips[0].LoadBalancers[0].Id != lb.Id {
  1108  		t.Errorf("Wrong load balancer assigned.")
  1109  	}
  1110  	ser_lb = lb
  1111  }
  1112  
  1113  func TestListServerIpLoadBalancers(t *testing.T) {
  1114  	set_server.Do(setup_server)
  1115  	ips, _ := api.ListServerIps(server_id)
  1116  
  1117  	fmt.Println("Listing load balancers assigned to the server's IP...")
  1118  	lbs, err := api.ListServerIpLoadBalancers(server_id, ips[0].Id)
  1119  
  1120  	if err != nil {
  1121  		t.Errorf("ListServerIpLoadBalancers failed. Error: " + err.Error())
  1122  		return
  1123  	}
  1124  	if len(lbs) == 0 {
  1125  		t.Errorf("No load balancer was assigned to the server's IP.")
  1126  		return
  1127  	}
  1128  	if lbs[0].Id != ser_lb.Id {
  1129  		t.Errorf("Wrong load balancer assigned.")
  1130  	}
  1131  }
  1132  
  1133  func TestUnassignServerIpLoadBalancer(t *testing.T) {
  1134  	set_server.Do(setup_server)
  1135  	ips, _ := api.ListServerIps(server_id)
  1136  
  1137  	fmt.Println("Unassigning the load balancer from the server's IP...")
  1138  	srv, err := api.UnassignServerIpLoadBalancer(server_id, ips[0].Id, ser_lb.Id)
  1139  
  1140  	if err != nil {
  1141  		t.Errorf("UnassignServerIpLoadBalancer failed. Error: " + err.Error())
  1142  		return
  1143  	}
  1144  	if len(srv.Ips[0].LoadBalancers) > 0 {
  1145  		t.Errorf("Unassigning the load balancer failed.")
  1146  	}
  1147  	ser_lb, err = api.DeleteLoadBalancer(ser_lb.Id)
  1148  	if err == nil {
  1149  		api.WaitUntilDeleted(ser_lb)
  1150  	}
  1151  	ser_lb, _ = api.GetLoadBalancer(ser_lb.Id)
  1152  }
  1153  
  1154  func TestAssignServerIpFirewallPolicy(t *testing.T) {
  1155  	set_server.Do(setup_server)
  1156  	ips, _ := api.ListServerIps(server_id)
  1157  
  1158  	fmt.Println("Assigning a firewall policy to the server's IP...")
  1159  	fps, err := api.ListFirewallPolicies(0, 1, "creation_date", "linux", "id,name")
  1160  	if err != nil {
  1161  		t.Errorf("ListFirewallPolicies failed. Error: " + err.Error())
  1162  		return
  1163  	}
  1164  	srv, err := api.AssignServerIpFirewallPolicy(server_id, ips[0].Id, fps[0].Id)
  1165  
  1166  	if err != nil {
  1167  		t.Errorf("AssignServerIpFirewallPolicy failed. Error: " + err.Error())
  1168  		return
  1169  	}
  1170  	if srv.Ips[0].Firewall == nil {
  1171  		t.Errorf("Firewall policy not assigned.")
  1172  	}
  1173  	if srv.Ips[0].Firewall.Id != fps[0].Id {
  1174  		t.Errorf("Wrong firewall policy assigned.")
  1175  	}
  1176  }
  1177  
  1178  func TestGetServerIpFirewallPolicy(t *testing.T) {
  1179  	set_server.Do(setup_server)
  1180  	ips, _ := api.ListServerIps(server_id)
  1181  
  1182  	fmt.Println("Getting the firewall policy assigned to the server's IP...")
  1183  	fps, err := api.ListFirewallPolicies(0, 1, "creation_date", "linux", "id,name")
  1184  	if err != nil {
  1185  		t.Errorf("ListFirewallPolicies failed. Error: " + err.Error())
  1186  	}
  1187  	fp, err := api.GetServerIpFirewallPolicy(server_id, ips[0].Id)
  1188  
  1189  	if err != nil {
  1190  		t.Errorf("GetServerIpFirewallPolicy failed. Error: " + err.Error())
  1191  	}
  1192  	if fp == nil {
  1193  		t.Errorf("No firewall policy assigned to the server's IP.")
  1194  	}
  1195  	if fp.Id != fps[0].Id {
  1196  		t.Errorf("Wrong firewall policy assigned to the server's IP.")
  1197  	}
  1198  }
  1199  
  1200  func TestCloneServer(t *testing.T) {
  1201  	set_server.Do(setup_server)
  1202  
  1203  	srvr, err := api.GetServer(server_id)
  1204  	if err != nil {
  1205  		t.Errorf("get server failed. Error: " + err.Error())
  1206  	}
  1207  	api.WaitForState(srvr, "POWERED_OFF", 10, 90)
  1208  
  1209  	fmt.Println("Cloning the server...")
  1210  	new_name := server_name + "_Copy"
  1211  	var dc_id string
  1212  	if server != nil && server.Datacenter != nil {
  1213  		dc_id = server.Datacenter.Id
  1214  	}
  1215  	srv, err := api.CloneServer(server_id, new_name, dc_id)
  1216  
  1217  	if err != nil {
  1218  		t.Errorf("CloneServer failed. Error: " + err.Error())
  1219  	} else {
  1220  		if srv.Name != new_name {
  1221  			t.Errorf("Cloning the server failed. Wrong server name.")
  1222  		}
  1223  		if srv.Hardware.Vcores != server.Hardware.Vcores {
  1224  			t.Errorf("Cloning the server failed. Vcores values differ.")
  1225  		}
  1226  		if srv.Hardware.CoresPerProcessor != server.Hardware.CoresPerProcessor {
  1227  			t.Errorf("Cloning the server failed. CoresPerProcessor values differ.")
  1228  		}
  1229  		if srv.Hardware.Ram != server.Hardware.Ram {
  1230  			t.Errorf("Cloning the server failed. Ram values differ.")
  1231  		}
  1232  		if srv.Image.Id != server.Image.Id {
  1233  			t.Errorf("Cloning the server failed. Wrng server image.")
  1234  		}
  1235  
  1236  		time.Sleep(500 * time.Second)
  1237  		fmt.Println("Deleting the clone...")
  1238  		srv, err = api.DeleteServer(srv.Id, false)
  1239  
  1240  		if err != nil {
  1241  			t.Errorf("Unable to delete cloned server. Error: " + err.Error())
  1242  		}
  1243  	}
  1244  }
  1245  
  1246  func TestDeleteServer(t *testing.T) {
  1247  	set_server.Do(setup_server)
  1248  
  1249  	time.Sleep(120 * time.Second)
  1250  	srv, err := api.DeleteServer(server_id, true)
  1251  	if err != nil {
  1252  		t.Errorf("DeleteServer server failed. Error: " + err.Error())
  1253  		return
  1254  	}
  1255  	fmt.Printf("Deleting server '%s', keeping server's IP '%s'...\n", srv.Name, srv.Ips[0].Ip)
  1256  	ip_id := srv.Ips[0].Id
  1257  
  1258  	err = api.WaitUntilDeleted(srv)
  1259  
  1260  	if err != nil {
  1261  		t.Errorf("Deleting the server failed. Error: " + err.Error())
  1262  	}
  1263  
  1264  	srv, err = api.GetServer(server_id)
  1265  
  1266  	if srv != nil {
  1267  		t.Errorf("Unable to delete the server.")
  1268  	} else {
  1269  		server = nil
  1270  	}
  1271  
  1272  	ip, _ := api.GetPublicIp(ip_id)
  1273  	if ip == nil {
  1274  		t.Errorf("Failed to keep IP after deleting the server.")
  1275  	} else {
  1276  		fmt.Printf("Deleting server's IP '%s' after deleting the server...\n", ip.IpAddress)
  1277  		ip, err = api.DeletePublicIp(ip_id)
  1278  		if err != nil {
  1279  			t.Errorf("Unable to delete server's IP after deleting the server.")
  1280  		} else {
  1281  			api.WaitUntilDeleted(ip)
  1282  		}
  1283  	}
  1284  }