github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/blockstorages_test.go (about) 1 package oneandone 2 3 import ( 4 "fmt" 5 "math/rand" 6 "sync" 7 "testing" 8 "time" 9 ) 10 11 var ( 12 set_bs sync.Once 13 set_bs_server sync.Once 14 test_bs_name string 15 test_bs_desc string 16 test_bs *BlockStorage 17 test_bs_server *Server 18 ) 19 20 func setup_bs_server() { 21 rand.Seed(time.Now().UnixNano()) 22 server_name = fmt.Sprintf("TestServer_%d", rand.Intn(1000000)) 23 fmt.Printf("Creating test server '%s'...\n", server_name) 24 25 sap := get_random_appliance(hdd_size) 26 ser_app_id = sap.Id 27 mp := get_default_mon_policy() 28 29 req := ServerRequest{ 30 Name: server_name, 31 Description: server_name + " description", 32 ApplianceId: ser_app_id, 33 MonitoringPolicyId: mp.Id, 34 PowerOn: true, 35 DatacenterId: "908DC2072407C94C8054610AD5A53B8C", 36 Hardware: Hardware{ 37 Vcores: v_cores, 38 CoresPerProcessor: c_per_pr, 39 Ram: ram, 40 Hdds: []Hdd{ 41 Hdd{ 42 Size: hdd_size, 43 IsMain: true, 44 }, 45 }, 46 }, 47 } 48 _, srv, err := api.CreateServer(&req) 49 50 err = api.WaitForState(srv, "POWERED_ON", 10, 90) 51 52 if err != nil { 53 fmt.Printf("Error: %s", err.Error()) 54 } 55 56 test_bs_server = srv 57 } 58 59 func create_block_storage() *BlockStorage { 60 rand.Seed(time.Now().UnixNano()) 61 rint := rand.Intn(999) 62 test_bs_name = fmt.Sprintf("BlockStorage_%d", rint) 63 test_bs_desc = fmt.Sprintf("BlockStorage_%d description", rint) 64 req := BlockStorageRequest{ 65 Name: test_bs_name, 66 Description: test_bs_desc, 67 Size: Int2Pointer(20), 68 DatacenterId: "908DC2072407C94C8054610AD5A53B8C", 69 } 70 fmt.Printf("Creating new block storage '%s'...\n", test_bs_name) 71 bs_id, bs, err := api.CreateBlockStorage(&req) 72 73 if err != nil { 74 fmt.Printf("Unable to create a block storage. Error: %s", err.Error()) 75 return nil 76 } 77 78 if bs_id == "" || bs.Id == "" { 79 fmt.Printf("Unable to create block storage '%s'.", test_bs_name) 80 return nil 81 } 82 83 api.WaitForState(bs, "POWERED_ON", 10, 30) 84 return bs 85 } 86 87 func set_block_storage() { 88 test_bs = create_block_storage() 89 } 90 91 func TestCreateBlockStorage(t *testing.T) { 92 set_bs_server.Do(setup_bs_server) 93 rand.Seed(time.Now().UnixNano()) 94 rint := rand.Intn(999) 95 test_bs_name = fmt.Sprintf("BlockStorage_%d", rint) 96 test_bs_desc = fmt.Sprintf("BlockStorage_%d description", rint) 97 req := BlockStorageRequest{ 98 Name: test_bs_name, 99 Description: test_bs_desc, 100 Size: Int2Pointer(20), 101 DatacenterId: "908DC2072407C94C8054610AD5A53B8C", 102 ServerId: test_bs_server.Id, 103 } 104 105 fmt.Printf("Creating new block storage '%s'...\n", test_bs_name) 106 bs_id, bs, err := api.CreateBlockStorage(&req) 107 if err != nil { 108 t.Errorf("Unable to create a block storage. Error: %s", err.Error()) 109 t.Fail() 110 } 111 112 api.WaitForState(bs, "POWERED_ON", 10, 30) 113 114 bs, _ = api.GetBlockStorage(bs_id) 115 116 if bs.Server.Id != test_bs_server.Id { 117 t.Errorf("Error while attaching a server to the block storage") 118 } 119 120 } 121 122 func TestListBlockStorages(t *testing.T) { 123 set_bs.Do(set_block_storage) 124 125 res, err := api.ListBlockStorages() 126 if err != nil { 127 t.Errorf("ListBlockStorages failed. Error: " + err.Error()) 128 } 129 130 if len(res) == 0 { 131 t.Errorf("No block storage found.") 132 } 133 } 134 135 func TestGetBlockStorage(t *testing.T) { 136 // set_bs_server.Do(setup_bs_server) 137 set_bs.Do(set_block_storage) 138 139 bs, err := api.GetBlockStorage(test_bs.Id) 140 141 if err != nil { 142 t.Errorf(err.Error()) 143 } 144 145 test_bs = bs 146 } 147 148 func TestAddBlockStorageServer(t *testing.T) { 149 set_bs.Do(set_block_storage) 150 set_bs_server.Do(setup_bs_server) 151 fmt.Printf("Adding block storage '%s' to server ...\n", test_bs.Name) 152 153 bs, err := api.AddBlockStorageServer(test_bs.Id, test_bs_server.Id) 154 155 if err != nil { 156 t.Errorf("AddBlockStorageServer failed. Error: " + err.Error()) 157 return 158 } 159 api.WaitForState(bs, "POWERED_ON", 10, 30) 160 161 bs, _ = api.GetBlockStorage(bs.Id) 162 163 if bs.Server == nil { 164 t.Errorf("Found no server to which the block storage is added to.") 165 } 166 167 bs, err = api.RemoveBlockStorageServer(bs.Id, test_bs_server.Id) 168 169 if err != nil { 170 t.Errorf(err.Error()) 171 } 172 173 if bs.Server != nil { 174 t.Errorf("Server not removed from the block storage.") 175 } 176 api.WaitForState(bs, "POWERED_ON", 10, 30) 177 178 test_bs = bs 179 } 180 181 func TestDeleteBlockStorage(t *testing.T) { 182 set_bs.Do(set_block_storage) 183 184 bs, err := api.DeleteBlockStorage(test_bs.Id) 185 if err != nil { 186 t.Errorf("DeleteBlockStorage failed. Error: " + err.Error()) 187 return 188 } else { 189 api.WaitUntilDeleted(bs) 190 } 191 192 bs, err = api.GetBlockStorage(bs.Id) 193 194 if bs != nil { 195 t.Errorf("Unable to delete the block storage.") 196 } else { 197 test_bs = nil 198 } 199 200 if test_bs_server != nil { 201 api.WaitForState(test_bs_server, "POWERED_ON", 10, 90) 202 _, err := api.DeleteServer(test_bs_server.Id, false) 203 if err != nil { 204 t.Errorf("DeleteServer failed. Error: " + err.Error()) 205 return 206 } 207 } 208 } 209 210 func TestUpdateBlockStorage(t *testing.T) { 211 set_bs.Do(set_block_storage) 212 if test_bs == nil { 213 test_bs = create_block_storage() 214 } 215 216 fmt.Printf("Updating block storage '%s'...\n", test_bs.Name) 217 new_name := fmt.Sprintf("updated_%s", test_bs.Name) 218 new_desc := fmt.Sprintf("updated_%s", test_bs.Description) 219 bsu := UpdateBlockStorageRequest{ 220 Name: new_name, 221 Description: new_desc, 222 } 223 blk_storage, err := api.UpdateBlockStorage(test_bs.Id, &bsu) 224 225 if err != nil { 226 t.Errorf("UpdateBlockStorage failed. Error: " + err.Error()) 227 } else { 228 api.WaitForState(blk_storage, "POWERED_ON", 10, 30) 229 } 230 blk_storage, _ = api.GetBlockStorage(blk_storage.Id) 231 if blk_storage.Name != new_name { 232 t.Errorf("Failed to update block storage name.") 233 } 234 if blk_storage.Description != new_desc { 235 t.Errorf("Failed to update block storage description.") 236 } 237 }