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 }