github.com/leeclow-ops/gophercloud@v1.2.1/acceptance/openstack/sharedfilesystems/v2/shares_test.go (about) 1 //go:build acceptance 2 // +build acceptance 3 4 package v2 5 6 import ( 7 "testing" 8 9 "github.com/leeclow-ops/gophercloud/acceptance/clients" 10 "github.com/leeclow-ops/gophercloud/acceptance/tools" 11 "github.com/leeclow-ops/gophercloud/openstack/sharedfilesystems/v2/shares" 12 th "github.com/leeclow-ops/gophercloud/testhelper" 13 ) 14 15 func TestShareCreate(t *testing.T) { 16 client, err := clients.NewSharedFileSystemV2Client() 17 if err != nil { 18 t.Fatalf("Unable to create a shared file system client: %v", err) 19 } 20 21 share, err := CreateShare(t, client) 22 if err != nil { 23 t.Fatalf("Unable to create a share: %v", err) 24 } 25 26 defer DeleteShare(t, client, share) 27 28 created, err := shares.Get(client, share.ID).Extract() 29 if err != nil { 30 t.Errorf("Unable to retrieve share: %v", err) 31 } 32 tools.PrintResource(t, created) 33 } 34 35 func TestShareExportLocations(t *testing.T) { 36 client, err := clients.NewSharedFileSystemV2Client() 37 if err != nil { 38 t.Fatalf("Unable to create a shared file system client: %v", err) 39 } 40 41 share, err := CreateShare(t, client) 42 if err != nil { 43 t.Fatalf("Unable to create a share: %v", err) 44 } 45 46 defer DeleteShare(t, client, share) 47 48 err = waitForStatus(t, client, share.ID, "available") 49 if err != nil { 50 t.Fatalf("Share status error: %v", err) 51 } 52 53 client.Microversion = "2.9" 54 55 exportLocations, err := shares.ListExportLocations(client, share.ID).Extract() 56 if err != nil { 57 t.Errorf("Unable to list share export locations: %v", err) 58 } 59 tools.PrintResource(t, exportLocations) 60 61 exportLocation, err := shares.GetExportLocation(client, share.ID, exportLocations[0].ID).Extract() 62 if err != nil { 63 t.Errorf("Unable to get share export location: %v", err) 64 } 65 tools.PrintResource(t, exportLocation) 66 th.AssertEquals(t, exportLocations[0], *exportLocation) 67 } 68 69 func TestShareUpdate(t *testing.T) { 70 client, err := clients.NewSharedFileSystemV2Client() 71 if err != nil { 72 t.Fatalf("Unable to create shared file system client: %v", err) 73 } 74 75 share, err := CreateShare(t, client) 76 if err != nil { 77 t.Fatalf("Unable to create share: %v", err) 78 } 79 80 defer DeleteShare(t, client, share) 81 82 expectedShare, err := shares.Get(client, share.ID).Extract() 83 if err != nil { 84 t.Errorf("Unable to retrieve share: %v", err) 85 } 86 87 name := "NewName" 88 description := "" 89 iFalse := false 90 options := shares.UpdateOpts{ 91 DisplayName: &name, 92 DisplayDescription: &description, 93 IsPublic: &iFalse, 94 } 95 96 expectedShare.Name = name 97 expectedShare.Description = description 98 expectedShare.IsPublic = iFalse 99 100 _, err = shares.Update(client, share.ID, options).Extract() 101 if err != nil { 102 t.Errorf("Unable to update share: %v", err) 103 } 104 105 updatedShare, err := shares.Get(client, share.ID).Extract() 106 if err != nil { 107 t.Errorf("Unable to retrieve share: %v", err) 108 } 109 110 // Update time has to be set in order to get the assert equal to pass 111 expectedShare.UpdatedAt = updatedShare.UpdatedAt 112 113 tools.PrintResource(t, share) 114 115 th.CheckDeepEquals(t, expectedShare, updatedShare) 116 } 117 118 func TestShareListDetail(t *testing.T) { 119 client, err := clients.NewSharedFileSystemV2Client() 120 if err != nil { 121 t.Fatalf("Unable to create a shared file system client: %v", err) 122 } 123 124 share, err := CreateShare(t, client) 125 if err != nil { 126 t.Fatalf("Unable to create a share: %v", err) 127 } 128 129 defer DeleteShare(t, client, share) 130 131 ss, err := ListShares(t, client) 132 if err != nil { 133 t.Fatalf("Unable to list shares: %v", err) 134 } 135 136 for i := range ss { 137 tools.PrintResource(t, &ss[i]) 138 } 139 } 140 141 func TestGrantAndRevokeAccess(t *testing.T) { 142 client, err := clients.NewSharedFileSystemV2Client() 143 if err != nil { 144 t.Fatalf("Unable to create a shared file system client: %v", err) 145 } 146 client.Microversion = "2.49" 147 148 share, err := CreateShare(t, client) 149 if err != nil { 150 t.Fatalf("Unable to create a share: %v", err) 151 } 152 153 defer DeleteShare(t, client, share) 154 155 accessRight, err := GrantAccess(t, client, share) 156 if err != nil { 157 t.Fatalf("Unable to grant access: %v", err) 158 } 159 160 tools.PrintResource(t, accessRight) 161 162 if err = RevokeAccess(t, client, share, accessRight); err != nil { 163 t.Fatalf("Unable to revoke access: %v", err) 164 } 165 } 166 167 func TestListAccessRights(t *testing.T) { 168 client, err := clients.NewSharedFileSystemV2Client() 169 if err != nil { 170 t.Fatalf("Unable to create a shared file system client: %v", err) 171 } 172 client.Microversion = "2.7" 173 174 share, err := CreateShare(t, client) 175 if err != nil { 176 t.Fatalf("Unable to create a share: %v", err) 177 } 178 179 defer DeleteShare(t, client, share) 180 181 _, err = GrantAccess(t, client, share) 182 if err != nil { 183 t.Fatalf("Unable to grant access: %v", err) 184 } 185 186 rs, err := GetAccessRightsSlice(t, client, share) 187 if err != nil { 188 t.Fatalf("Unable to retrieve list of access rules for share %s: %v", share.ID, err) 189 } 190 191 if len(rs) != 1 { 192 t.Fatalf("Unexpected number of access rules for share %s: got %d, expected 1", share.ID, len(rs)) 193 } 194 195 t.Logf("Share %s has %d access rule(s):", share.ID, len(rs)) 196 197 for _, r := range rs { 198 tools.PrintResource(t, &r) 199 } 200 } 201 202 func TestExtendAndShrink(t *testing.T) { 203 client, err := clients.NewSharedFileSystemV2Client() 204 if err != nil { 205 t.Fatalf("Unable to create a shared file system client: %v", err) 206 } 207 client.Microversion = "2.7" 208 209 share, err := CreateShare(t, client) 210 if err != nil { 211 t.Fatalf("Unable to create a share: %v", err) 212 } 213 214 defer DeleteShare(t, client, share) 215 216 err = ExtendShare(t, client, share, 2) 217 if err != nil { 218 t.Fatalf("Unable to extend a share: %v", err) 219 } 220 221 // We need to wait till the Extend operation is done 222 err = waitForStatus(t, client, share.ID, "available") 223 if err != nil { 224 t.Fatalf("Share status error: %v", err) 225 } 226 227 t.Logf("Share %s successfuly extended", share.ID) 228 229 /* disable shrinking for the LVM dhss=false 230 err = ShrinkShare(t, client, share, 1) 231 if err != nil { 232 t.Fatalf("Unable to shrink a share: %v", err) 233 } 234 235 // We need to wait till the Shrink operation is done 236 err = waitForStatus(t, client, share.ID, "available") 237 if err != nil { 238 t.Fatalf("Share status error: %v", err) 239 } 240 241 t.Logf("Share %s successfuly shrunk", share.ID) 242 */ 243 } 244 245 func TestShareMetadata(t *testing.T) { 246 client, err := clients.NewSharedFileSystemV2Client() 247 if err != nil { 248 t.Fatalf("Unable to create a shared file system client: %v", err) 249 } 250 client.Microversion = "2.7" 251 252 share, err := CreateShare(t, client) 253 if err != nil { 254 t.Fatalf("Unable to create a share: %v", err) 255 } 256 257 defer DeleteShare(t, client, share) 258 259 const ( 260 k = "key" 261 v1 = "value1" 262 v2 = "value2" 263 ) 264 265 checkMetadataEq := func(m map[string]string, value string) { 266 if m == nil || len(m) != 1 || m[k] != value { 267 t.Fatalf("Unexpected metadata contents %v", m) 268 } 269 } 270 271 metadata, err := shares.SetMetadata(client, share.ID, shares.SetMetadataOpts{Metadata: map[string]string{k: v1}}).Extract() 272 if err != nil { 273 t.Fatalf("Unable to set share metadata: %v", err) 274 } 275 checkMetadataEq(metadata, v1) 276 277 metadata, err = shares.UpdateMetadata(client, share.ID, shares.UpdateMetadataOpts{Metadata: map[string]string{k: v2}}).Extract() 278 if err != nil { 279 t.Fatalf("Unable to update share metadata: %v", err) 280 } 281 checkMetadataEq(metadata, v2) 282 283 metadata, err = shares.GetMetadatum(client, share.ID, k).Extract() 284 if err != nil { 285 t.Fatalf("Unable to get share metadatum: %v", err) 286 } 287 checkMetadataEq(metadata, v2) 288 289 err = shares.DeleteMetadatum(client, share.ID, k).ExtractErr() 290 if err != nil { 291 t.Fatalf("Unable to delete share metadatum: %v", err) 292 } 293 294 metadata, err = shares.GetMetadata(client, share.ID).Extract() 295 if err != nil { 296 t.Fatalf("Unable to get share metadata: %v", err) 297 } 298 299 if metadata == nil || len(metadata) != 0 { 300 t.Fatalf("Unexpected metadata contents %v, expected an empty map", metadata) 301 } 302 } 303 304 func TestRevert(t *testing.T) { 305 client, err := clients.NewSharedFileSystemV2Client() 306 if err != nil { 307 t.Fatalf("Unable to create a shared file system client: %v", err) 308 } 309 client.Microversion = "2.27" 310 311 share, err := CreateShare(t, client) 312 if err != nil { 313 t.Fatalf("Unable to create a share: %v", err) 314 } 315 316 defer DeleteShare(t, client, share) 317 318 err = waitForStatus(t, client, share.ID, "available") 319 if err != nil { 320 t.Fatalf("Share status error: %v", err) 321 } 322 323 snapshot, err := CreateSnapshot(t, client, share.ID) 324 if err != nil { 325 t.Fatalf("Unable to create a snapshot: %v", err) 326 } 327 defer DeleteSnapshot(t, client, snapshot) 328 329 err = waitForSnapshotStatus(t, client, snapshot.ID, "available") 330 if err != nil { 331 t.Fatalf("Snapshot status error: %v", err) 332 } 333 334 revertOpts := &shares.RevertOpts{ 335 SnapshotID: snapshot.ID, 336 } 337 err = shares.Revert(client, share.ID, revertOpts).ExtractErr() 338 if err != nil { 339 t.Fatalf("Unable to revert a snapshot: %v", err) 340 } 341 342 // We need to wait till the Extend operation is done 343 err = waitForStatus(t, client, share.ID, "available") 344 if err != nil { 345 t.Fatalf("Share status error: %v", err) 346 } 347 348 err = waitForSnapshotStatus(t, client, snapshot.ID, "available") 349 if err != nil { 350 t.Fatalf("Snapshot status error: %v", err) 351 } 352 353 t.Logf("Share %s successfuly reverted", share.ID) 354 } 355 356 func TestResetStatus(t *testing.T) { 357 client, err := clients.NewSharedFileSystemV2Client() 358 if err != nil { 359 t.Fatalf("Unable to create a shared file system client: %v", err) 360 } 361 client.Microversion = "2.7" 362 363 share, err := CreateShare(t, client) 364 if err != nil { 365 t.Fatalf("Unable to create a share: %v", err) 366 } 367 368 defer DeleteShare(t, client, share) 369 370 err = waitForStatus(t, client, share.ID, "available") 371 if err != nil { 372 t.Fatalf("Share status error: %v", err) 373 } 374 375 resetStatusOpts := &shares.ResetStatusOpts{ 376 Status: "error", 377 } 378 err = shares.ResetStatus(client, share.ID, resetStatusOpts).ExtractErr() 379 if err != nil { 380 t.Fatalf("Unable to reset a share status: %v", err) 381 } 382 383 // We need to wait till the Extend operation is done 384 err = waitForStatus(t, client, share.ID, "error") 385 if err != nil { 386 t.Fatalf("Share status error: %v", err) 387 } 388 389 t.Logf("Share %s status successfuly reset", share.ID) 390 } 391 392 func TestForceDelete(t *testing.T) { 393 client, err := clients.NewSharedFileSystemV2Client() 394 if err != nil { 395 t.Fatalf("Unable to create a shared file system client: %v", err) 396 } 397 client.Microversion = "2.7" 398 399 share, err := CreateShare(t, client) 400 if err != nil { 401 t.Fatalf("Unable to create a share: %v", err) 402 } 403 404 defer DeleteShare(t, client, share) 405 406 err = waitForStatus(t, client, share.ID, "available") 407 if err != nil { 408 t.Fatalf("Share status error: %v", err) 409 } 410 411 err = shares.ForceDelete(client, share.ID).ExtractErr() 412 if err != nil { 413 t.Fatalf("Unable to force delete a share: %v", err) 414 } 415 416 err = waitForStatus(t, client, share.ID, "deleted") 417 if err != nil { 418 t.Fatalf("Share status error: %v", err) 419 } 420 421 t.Logf("Share %s was successfuly deleted", share.ID) 422 } 423 424 func TestUnmanage(t *testing.T) { 425 clients.RequireAdmin(t) 426 427 client, err := clients.NewSharedFileSystemV2Client() 428 if err != nil { 429 t.Fatalf("Unable to create a shared file system client: %v", err) 430 } 431 client.Microversion = "2.7" 432 433 share, err := CreateShare(t, client) 434 if err != nil { 435 t.Fatalf("Unable to create a share: %v", err) 436 } 437 438 defer DeleteShare(t, client, share) 439 440 err = waitForStatus(t, client, share.ID, "available") 441 if err != nil { 442 t.Fatalf("Share status error: %v", err) 443 } 444 445 err = shares.Unmanage(client, share.ID).ExtractErr() 446 if err != nil { 447 t.Fatalf("Unable to unmanage a share: %v", err) 448 } 449 450 err = waitForStatus(t, client, share.ID, "deleted") 451 if err != nil { 452 t.Fatalf("Share status error: %v", err) 453 } 454 455 t.Logf("Share %s was successfuly unmanaged", share.ID) 456 }