github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/sharedstorages_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_ss sync.Once 13 test_ss_name string 14 test_ss_desc string 15 test_ss *SharedStorage 16 ) 17 18 // Helper functions 19 20 func create_shared_storage() *SharedStorage { 21 rand.Seed(time.Now().UnixNano()) 22 rint := rand.Intn(999) 23 test_ss_name = fmt.Sprintf("SharedStorage_%d", rint) 24 test_ss_desc = fmt.Sprintf("SharedStorage_%d description", rint) 25 req := SharedStorageRequest{ 26 Name: test_ss_name, 27 Description: test_ss_desc, 28 Size: Int2Pointer(50), 29 } 30 fmt.Printf("Creating new shared storage '%s'...\n", test_ss_name) 31 ss_id, ss, err := api.CreateSharedStorage(&req) 32 if err != nil { 33 fmt.Printf("Unable to create a shared storage. Error: %s", err.Error()) 34 return nil 35 } 36 if ss_id == "" || ss.Id == "" { 37 fmt.Printf("Unable to create shared storage '%s'.", test_ss_name) 38 return nil 39 } 40 41 api.WaitForState(ss, "ACTIVE", 10, 30) 42 return ss 43 } 44 45 func set_shared_storage() { 46 test_ss = create_shared_storage() 47 } 48 49 // /shared_storages tests 50 51 func TestCreateSharedStorage(t *testing.T) { 52 set_ss.Do(set_shared_storage) 53 54 if test_ss == nil { 55 t.Errorf("CreateSharedStorage failed.") 56 return 57 } 58 if test_ss.Id == "" { 59 t.Errorf("Missing shared storage ID.") 60 } 61 if test_ss.Name != test_ss_name { 62 t.Errorf("Wrong name of the shared storage.") 63 } 64 if test_ss.Description != test_ss_desc { 65 t.Errorf("Wrong shared storage description.") 66 } 67 if test_ss.Size != 50 { 68 t.Errorf("Wrong size of shared storage '%s'.", test_ss.Name) 69 } 70 } 71 72 func TestGetSharedStorage(t *testing.T) { 73 set_ss.Do(set_shared_storage) 74 75 fmt.Printf("Getting shared storage '%s'...\n", test_ss.Name) 76 ss, err := api.GetSharedStorage(test_ss.Id) 77 78 if err != nil { 79 t.Errorf("GetSharedStorage failed. Error: " + err.Error()) 80 } else { 81 if ss.Id != test_ss.Id { 82 t.Errorf("Wrong shared storage ID.") 83 } 84 } 85 } 86 87 func TestListSharedStorages(t *testing.T) { 88 set_ss.Do(set_shared_storage) 89 fmt.Println("Listing all shared storages...") 90 91 res, err := api.ListSharedStorages() 92 if err != nil { 93 t.Errorf("ListSharedStorages failed. Error: " + err.Error()) 94 } 95 if len(res) == 0 { 96 t.Errorf("No shared storage found.") 97 } 98 99 res, err = api.ListSharedStorages(1, 1, "", "", "id,name") 100 101 if err != nil { 102 t.Errorf("ListSharedStorages with parameter options failed. Error: " + err.Error()) 103 return 104 } 105 if len(res) == 0 { 106 t.Errorf("No shared storage found.") 107 } 108 if len(res) > 1 { 109 t.Errorf("Wrong number of objects per page.") 110 } 111 if res[0].Id == "" { 112 t.Errorf("Filtering parameters failed.") 113 } 114 if res[0].Name == "" { 115 t.Errorf("Filtering parameters failed.") 116 } 117 if res[0].State != "" { 118 t.Errorf("Filtering parameters failed.") 119 } 120 if res[0].CifsPath != "" { 121 t.Errorf("Filtering parameters failed.") 122 } 123 if res[0].NfsPath != "" { 124 t.Errorf("Filtering parameters failed.") 125 } 126 // Test for error response 127 res, err = api.ListSharedStorages(true, false, "id", "name", "") 128 if res != nil || err == nil { 129 t.Errorf("ListSharedStorages failed to handle incorrect argument type.") 130 } 131 132 res, err = api.ListSharedStorages(0, 0, "", test_ss.Name, "") 133 134 if err != nil { 135 t.Errorf("ListSharedStorages with parameter options failed. Error: " + err.Error()) 136 return 137 } 138 if len(res) != 1 { 139 t.Errorf("Search parameter failed.") 140 } 141 if res[0].Name != test_ss.Name { 142 t.Errorf("Search parameter failed.") 143 } 144 } 145 146 func TestGetSharedStorageCredentials(t *testing.T) { 147 fmt.Printf("Getting access credentials for shared storage '%s'...\n", test_ss.Name) 148 ssc, err := api.GetSharedStorageCredentials() 149 150 if err != nil { 151 t.Errorf("GetSharedStorageCredentials failed. Error: " + err.Error()) 152 } else { 153 if ssc[0].KerberosContentFile == "" { 154 t.Errorf("Missing Kerberos key.") 155 } 156 if ssc[0].UserDomain == "" { 157 t.Errorf("Missing user domain.") 158 } 159 } 160 } 161 162 func TestUpdateSharedStorageCredentials(t *testing.T) { 163 fmt.Printf("Updating credentials of shared storage '%s'...\n", test_ss.Name) 164 rand.Seed(time.Now().UnixNano()) 165 rint := rand.Intn(999999) 166 new_pass := fmt.Sprintf("N.u&A@V^d_g!b;e%d", rint) 167 ssc, err := api.UpdateSharedStorageCredentials(new_pass) 168 169 if err != nil { 170 t.Errorf("UpdateSharedStorageCredentials failed. Error: " + err.Error()) 171 return 172 } 173 174 cr, _ := api.GetSharedStorageCredentials() 175 176 if ssc[0].KerberosContentFile != cr[0].KerberosContentFile { 177 t.Errorf("Credentials for shared storage not updated.") 178 } 179 } 180 181 func TestAddSharedStorageServers(t *testing.T) { 182 set_ss.Do(set_shared_storage) 183 sync_server.Do(func() { deploy_test_server(false) }) 184 185 fmt.Printf("Adding server to shared storage '%s'...\n", test_ss.Name) 186 187 servers := []SharedStorageServer{ 188 { 189 Id: test_server.Id, 190 Rights: "RW", 191 }, 192 } 193 ss, err := api.AddSharedStorageServers(test_ss.Id, servers) 194 195 if err != nil { 196 t.Errorf("AddSharedStorageServers failed. Error: " + err.Error()) 197 return 198 } 199 200 api.WaitForState(ss, "ACTIVE", 10, 30) 201 ss, _ = api.GetSharedStorage(ss.Id) 202 203 if len(ss.Servers) != 1 { 204 t.Errorf("Found no server added to the shared storage.") 205 } 206 if ss.Servers[0].Id != test_server.Id { 207 t.Errorf("Wrong server added to the shared storage.") 208 } 209 test_ss = ss 210 } 211 212 func TestGetSharedStorageServer(t *testing.T) { 213 set_ss.Do(set_shared_storage) 214 215 fmt.Printf("Getting server added to shared storage '%s'...\n", test_ss.Name) 216 ss_ser, err := api.GetSharedStorageServer(test_ss.Id, test_ss.Servers[0].Id) 217 218 if err != nil { 219 t.Errorf("GetSharedStorageServer failed. Error: " + err.Error()) 220 return 221 } 222 if ss_ser.Id != test_ss.Servers[0].Id { 223 t.Errorf("Wrong ID of the server added to shared storage '%s'.", test_ss.Name) 224 } 225 if ss_ser.Name != test_ss.Servers[0].Name { 226 t.Errorf("Wrong name of the server added to shared storage '%s'.", test_ss.Name) 227 } 228 if ss_ser.Rights != test_ss.Servers[0].Rights { 229 t.Errorf("Wrong access rights of the server added to shared storage '%s'.", test_ss.Name) 230 } 231 } 232 233 func TestListSharedStorageServers(t *testing.T) { 234 set_ss.Do(set_shared_storage) 235 sync_server.Do(func() { deploy_test_server(false) }) 236 237 fmt.Printf("Listing servers added to shared storage '%s'...\n", test_ss.Name) 238 ss_srvs, err := api.ListSharedStorageServers(test_ss.Id) 239 240 if err != nil { 241 t.Errorf("ListSharedStorageServers failed. Error: " + err.Error()) 242 return 243 } 244 if len(ss_srvs) != 1 { 245 t.Errorf("Wrong number of servers added to shared storage '%s'.", test_ss.Name) 246 } 247 if ss_srvs[0].Id != test_server.Id { 248 t.Errorf("Wrong server added to shared storage '%s'.", test_ss.Name) 249 } 250 } 251 252 func TestDeleteSharedStorageServer(t *testing.T) { 253 set_ss.Do(set_shared_storage) 254 sync_server.Do(func() { deploy_test_server(false) }) 255 256 fmt.Printf("Deleting server attached to shared storage '%s'...\n", test_ss.Name) 257 ss, err := api.DeleteSharedStorageServer(test_ss.Id, test_server.Id) 258 259 if err != nil { 260 t.Errorf("DeleteSharedStorageServer failed. Error: " + err.Error()) 261 return 262 } 263 264 api.WaitForState(ss, "ACTIVE", 10, 30) 265 ss, err = api.GetSharedStorage(ss.Id) 266 267 if err != nil { 268 t.Errorf("Deleting server attached to the shared storage failed.") 269 } else { 270 if len(ss.Servers) > 0 { 271 t.Errorf("Server not deleted from the shared storage.") 272 } 273 } 274 } 275 276 func TestUpdateSharedStorage(t *testing.T) { 277 set_ss.Do(set_shared_storage) 278 279 fmt.Printf("Updating shared storage '%s'...\n", test_ss.Name) 280 new_name := test_ss.Name + "_updated" 281 new_desc := test_ss.Description + "_updated" 282 new_size := 100 283 ssu := SharedStorageRequest{ 284 Name: new_name, 285 Description: new_desc, 286 Size: &new_size, 287 } 288 ss, err := api.UpdateSharedStorage(test_ss.Id, &ssu) 289 290 if err != nil { 291 t.Errorf("UpdateSharedStorage failed. Error: " + err.Error()) 292 } else { 293 api.WaitForState(ss, "ACTIVE", 10, 30) 294 } 295 ss, _ = api.GetSharedStorage(ss.Id) 296 if ss.Name != new_name { 297 t.Errorf("Failed to update shared storage name.") 298 } 299 if ss.Description != new_desc { 300 t.Errorf("Failed to update shared storage description.") 301 } 302 if ss.Size != new_size { 303 t.Errorf("Failed to update shared storage size.") 304 } 305 } 306 307 func TestDeleteSharedStorage(t *testing.T) { 308 set_ss.Do(set_shared_storage) 309 310 fmt.Printf("Deleting shared storage '%s'...\n", test_ss.Name) 311 ss, err := api.DeleteSharedStorage(test_ss.Id) 312 313 if err != nil { 314 t.Errorf("DeleteSharedStorage failed. Error: " + err.Error()) 315 return 316 } else { 317 api.WaitUntilDeleted(ss) 318 } 319 320 ss, err = api.GetSharedStorage(ss.Id) 321 322 if ss != nil { 323 t.Errorf("Unable to delete the shared storage.") 324 } else { 325 test_ss = nil 326 } 327 }