github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/sharedfilesystems/v2/shares/testing/request_test.go (about) 1 package testing 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/vnpaycloud-console/gophercloud/v2/openstack/sharedfilesystems/v2/shares" 9 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 10 "github.com/vnpaycloud-console/gophercloud/v2/testhelper/client" 11 ) 12 13 func TestCreate(t *testing.T) { 14 th.SetupHTTP() 15 defer th.TeardownHTTP() 16 17 MockCreateResponse(t) 18 19 options := &shares.CreateOpts{ 20 Size: 1, 21 Name: "my_test_share", 22 ShareProto: "NFS", 23 SchedulerHints: &shares.SchedulerHints{ 24 SameHost: "e268f4aa-d571-43dd-9ab3-f49ad06ffaef", 25 DifferentHost: "e268f4aa-d571-43dd-9ab3-f49ad06ffaef", 26 }, 27 } 28 n, err := shares.Create(context.TODO(), client.ServiceClient(), options).Extract() 29 30 th.AssertNoErr(t, err) 31 th.AssertEquals(t, n.Name, "my_test_share") 32 th.AssertEquals(t, n.Size, 1) 33 th.AssertEquals(t, n.ShareProto, "NFS") 34 th.AssertEquals(t, n.Metadata["__affinity_same_host"], "e268f4aa-d571-43dd-9ab3-f49ad06ffaef") 35 th.AssertEquals(t, n.Metadata["__affinity_different_host"], "e268f4aa-d571-43dd-9ab3-f49ad06ffaef") 36 } 37 38 func TestUpdate(t *testing.T) { 39 th.SetupHTTP() 40 defer th.TeardownHTTP() 41 42 MockUpdateResponse(t) 43 44 name := "my_new_test_share" 45 description := "" 46 iFalse := false 47 options := &shares.UpdateOpts{ 48 DisplayName: &name, 49 DisplayDescription: &description, 50 IsPublic: &iFalse, 51 } 52 n, err := shares.Update(context.TODO(), client.ServiceClient(), shareID, options).Extract() 53 54 th.AssertNoErr(t, err) 55 th.AssertEquals(t, n.Name, "my_new_test_share") 56 th.AssertEquals(t, n.Description, "") 57 th.AssertEquals(t, n.IsPublic, false) 58 } 59 60 func TestDelete(t *testing.T) { 61 th.SetupHTTP() 62 defer th.TeardownHTTP() 63 64 MockDeleteResponse(t) 65 66 result := shares.Delete(context.TODO(), client.ServiceClient(), shareID) 67 th.AssertNoErr(t, result.Err) 68 } 69 70 func TestGet(t *testing.T) { 71 th.SetupHTTP() 72 defer th.TeardownHTTP() 73 74 MockGetResponse(t) 75 76 s, err := shares.Get(context.TODO(), client.ServiceClient(), shareID).Extract() 77 th.AssertNoErr(t, err) 78 th.AssertDeepEquals(t, s, &shares.Share{ 79 AvailabilityZone: "nova", 80 ShareNetworkID: "713df749-aac0-4a54-af52-10f6c991e80c", 81 ShareServerID: "e268f4aa-d571-43dd-9ab3-f49ad06ffaef", 82 SnapshotID: "", 83 ID: shareID, 84 Size: 1, 85 ShareType: "25747776-08e5-494f-ab40-a64b9d20d8f7", 86 ShareTypeName: "default", 87 ConsistencyGroupID: "9397c191-8427-4661-a2e8-b23820dc01d4", 88 ProjectID: "16e1ab15c35a457e9c2b2aa189f544e1", 89 Metadata: map[string]string{ 90 "project": "my_app", 91 "aim": "doc", 92 }, 93 Status: "available", 94 Description: "My custom share London", 95 Host: "manila2@generic1#GENERIC1", 96 HasReplicas: false, 97 ReplicationType: "", 98 TaskState: "", 99 SnapshotSupport: true, 100 CreateShareFromSnapshotSupport: true, 101 Name: "my_test_share", 102 CreatedAt: time.Date(2015, time.September, 18, 10, 25, 24, 0, time.UTC), 103 ShareProto: "NFS", 104 VolumeType: "default", 105 SourceCgsnapshotMemberID: "", 106 IsPublic: true, 107 Links: []map[string]string{ 108 { 109 "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", 110 "rel": "self", 111 }, 112 { 113 "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", 114 "rel": "bookmark", 115 }, 116 }, 117 }) 118 } 119 120 func TestListDetail(t *testing.T) { 121 th.SetupHTTP() 122 defer th.TeardownHTTP() 123 124 MockListDetailResponse(t) 125 126 allPages, err := shares.ListDetail(client.ServiceClient(), &shares.ListOpts{}).AllPages(context.TODO()) 127 128 th.AssertNoErr(t, err) 129 130 actual, err := shares.ExtractShares(allPages) 131 th.AssertNoErr(t, err) 132 133 th.AssertDeepEquals(t, actual, []shares.Share{ 134 { 135 AvailabilityZone: "nova", 136 ShareNetworkID: "713df749-aac0-4a54-af52-10f6c991e80c", 137 ShareServerID: "e268f4aa-d571-43dd-9ab3-f49ad06ffaef", 138 SnapshotID: "", 139 ID: shareID, 140 Size: 1, 141 ShareType: "25747776-08e5-494f-ab40-a64b9d20d8f7", 142 ShareTypeName: "default", 143 ConsistencyGroupID: "9397c191-8427-4661-a2e8-b23820dc01d4", 144 ProjectID: "16e1ab15c35a457e9c2b2aa189f544e1", 145 Metadata: map[string]string{ 146 "project": "my_app", 147 "aim": "doc", 148 }, 149 Status: "available", 150 Description: "My custom share London", 151 Host: "manila2@generic1#GENERIC1", 152 HasReplicas: false, 153 ReplicationType: "", 154 TaskState: "", 155 SnapshotSupport: true, 156 CreateShareFromSnapshotSupport: true, 157 Name: "my_test_share", 158 CreatedAt: time.Date(2015, time.September, 18, 10, 25, 24, 0, time.UTC), 159 ShareProto: "NFS", 160 VolumeType: "default", 161 SourceCgsnapshotMemberID: "", 162 IsPublic: true, 163 Links: []map[string]string{ 164 { 165 "href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", 166 "rel": "self", 167 }, 168 { 169 "href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264", 170 "rel": "bookmark", 171 }, 172 }, 173 }, 174 }) 175 } 176 177 func TestListExportLocationsSuccess(t *testing.T) { 178 th.SetupHTTP() 179 defer th.TeardownHTTP() 180 181 MockListExportLocationsResponse(t) 182 183 c := client.ServiceClient() 184 // Client c must have Microversion set; minimum supported microversion for List Export Locations is 2.9 185 c.Microversion = "2.9" 186 187 s, err := shares.ListExportLocations(context.TODO(), c, shareID).Extract() 188 189 th.AssertNoErr(t, err) 190 th.AssertDeepEquals(t, s, []shares.ExportLocation{ 191 { 192 Path: "127.0.0.1:/var/lib/manila/mnt/share-9a922036-ad26-4d27-b955-7a1e285fa74d", 193 ShareInstanceID: "011d21e2-fbc3-4e4a-9993-9ea223f73264", 194 IsAdminOnly: false, 195 ID: "80ed63fc-83bc-4afc-b881-da4a345ac83d", 196 Preferred: false, 197 }, 198 }) 199 } 200 201 func TestGetExportLocationSuccess(t *testing.T) { 202 th.SetupHTTP() 203 defer th.TeardownHTTP() 204 205 MockGetExportLocationResponse(t) 206 207 c := client.ServiceClient() 208 // Client c must have Microversion set; minimum supported microversion for Get Export Location is 2.9 209 c.Microversion = "2.9" 210 211 s, err := shares.GetExportLocation(context.TODO(), c, shareID, "80ed63fc-83bc-4afc-b881-da4a345ac83d").Extract() 212 213 th.AssertNoErr(t, err) 214 th.AssertDeepEquals(t, s, &shares.ExportLocation{ 215 Path: "127.0.0.1:/var/lib/manila/mnt/share-9a922036-ad26-4d27-b955-7a1e285fa74d", 216 ShareInstanceID: "011d21e2-fbc3-4e4a-9993-9ea223f73264", 217 IsAdminOnly: false, 218 ID: "80ed63fc-83bc-4afc-b881-da4a345ac83d", 219 Preferred: false, 220 }) 221 } 222 223 func TestGrantAcessSuccess(t *testing.T) { 224 th.SetupHTTP() 225 defer th.TeardownHTTP() 226 227 MockGrantAccessResponse(t) 228 229 c := client.ServiceClient() 230 // Client c must have Microversion set; minimum supported microversion for Grant Access is 2.7 231 c.Microversion = "2.7" 232 233 var grantAccessReq shares.GrantAccessOpts 234 grantAccessReq.AccessType = "ip" 235 grantAccessReq.AccessTo = "0.0.0.0/0" 236 grantAccessReq.AccessLevel = "rw" 237 238 s, err := shares.GrantAccess(context.TODO(), c, shareID, grantAccessReq).Extract() 239 240 th.AssertNoErr(t, err) 241 th.AssertDeepEquals(t, s, &shares.AccessRight{ 242 ShareID: "011d21e2-fbc3-4e4a-9993-9ea223f73264", 243 AccessType: "ip", 244 AccessTo: "0.0.0.0/0", 245 AccessKey: "", 246 AccessLevel: "rw", 247 State: "new", 248 ID: "a2f226a5-cee8-430b-8a03-78a59bd84ee8", 249 }) 250 } 251 252 func TestRevokeAccessSuccess(t *testing.T) { 253 th.SetupHTTP() 254 defer th.TeardownHTTP() 255 256 MockRevokeAccessResponse(t) 257 258 c := client.ServiceClient() 259 // Client c must have Microversion set; minimum supported microversion for Revoke Access is 2.7 260 c.Microversion = "2.7" 261 262 options := &shares.RevokeAccessOpts{AccessID: "a2f226a5-cee8-430b-8a03-78a59bd84ee8"} 263 264 err := shares.RevokeAccess(context.TODO(), c, shareID, options).ExtractErr() 265 th.AssertNoErr(t, err) 266 } 267 268 func TestListAccessRightsSuccess(t *testing.T) { 269 th.SetupHTTP() 270 defer th.TeardownHTTP() 271 272 MockListAccessRightsResponse(t) 273 274 c := client.ServiceClient() 275 // Client c must have Microversion set; minimum supported microversion for Grant Access is 2.7 276 c.Microversion = "2.7" 277 278 s, err := shares.ListAccessRights(context.TODO(), c, shareID).Extract() 279 280 th.AssertNoErr(t, err) 281 th.AssertDeepEquals(t, s, []shares.AccessRight{ 282 { 283 ShareID: "011d21e2-fbc3-4e4a-9993-9ea223f73264", 284 AccessType: "ip", 285 AccessTo: "0.0.0.0/0", 286 AccessKey: "", 287 AccessLevel: "rw", 288 State: "new", 289 ID: "a2f226a5-cee8-430b-8a03-78a59bd84ee8", 290 }, 291 }) 292 } 293 294 func TestExtendSuccess(t *testing.T) { 295 th.SetupHTTP() 296 defer th.TeardownHTTP() 297 298 MockExtendResponse(t) 299 300 c := client.ServiceClient() 301 // Client c must have Microversion set; minimum supported microversion for Grant Access is 2.7 302 c.Microversion = "2.7" 303 304 err := shares.Extend(context.TODO(), c, shareID, &shares.ExtendOpts{NewSize: 2}).ExtractErr() 305 th.AssertNoErr(t, err) 306 } 307 308 func TestShrinkSuccess(t *testing.T) { 309 th.SetupHTTP() 310 defer th.TeardownHTTP() 311 312 MockShrinkResponse(t) 313 314 c := client.ServiceClient() 315 // Client c must have Microversion set; minimum supported microversion for Grant Access is 2.7 316 c.Microversion = "2.7" 317 318 err := shares.Shrink(context.TODO(), c, shareID, &shares.ShrinkOpts{NewSize: 1}).ExtractErr() 319 th.AssertNoErr(t, err) 320 } 321 322 func TestGetMetadataSuccess(t *testing.T) { 323 th.SetupHTTP() 324 defer th.TeardownHTTP() 325 326 MockGetMetadataResponse(t) 327 328 c := client.ServiceClient() 329 330 actual, err := shares.GetMetadata(context.TODO(), c, shareID).Extract() 331 th.AssertNoErr(t, err) 332 th.AssertDeepEquals(t, map[string]string{"foo": "bar"}, actual) 333 } 334 335 func TestGetMetadatumSuccess(t *testing.T) { 336 th.SetupHTTP() 337 defer th.TeardownHTTP() 338 339 MockGetMetadatumResponse(t, "foo") 340 341 c := client.ServiceClient() 342 343 actual, err := shares.GetMetadatum(context.TODO(), c, shareID, "foo").Extract() 344 th.AssertNoErr(t, err) 345 th.AssertDeepEquals(t, map[string]string{"foo": "bar"}, actual) 346 } 347 348 func TestSetMetadataSuccess(t *testing.T) { 349 th.SetupHTTP() 350 defer th.TeardownHTTP() 351 352 MockSetMetadataResponse(t) 353 354 c := client.ServiceClient() 355 356 actual, err := shares.SetMetadata(context.TODO(), c, shareID, &shares.SetMetadataOpts{Metadata: map[string]string{"foo": "bar"}}).Extract() 357 th.AssertNoErr(t, err) 358 th.AssertDeepEquals(t, map[string]string{"foo": "bar"}, actual) 359 } 360 361 func TestUpdateMetadataSuccess(t *testing.T) { 362 th.SetupHTTP() 363 defer th.TeardownHTTP() 364 365 MockUpdateMetadataResponse(t) 366 367 c := client.ServiceClient() 368 369 actual, err := shares.UpdateMetadata(context.TODO(), c, shareID, &shares.UpdateMetadataOpts{Metadata: map[string]string{"foo": "bar"}}).Extract() 370 th.AssertNoErr(t, err) 371 th.AssertDeepEquals(t, map[string]string{"foo": "bar"}, actual) 372 } 373 374 func TestUnsetMetadataSuccess(t *testing.T) { 375 th.SetupHTTP() 376 defer th.TeardownHTTP() 377 378 MockDeleteMetadatumResponse(t, "foo") 379 380 c := client.ServiceClient() 381 382 err := shares.DeleteMetadatum(context.TODO(), c, shareID, "foo").ExtractErr() 383 th.AssertNoErr(t, err) 384 } 385 386 func TestRevertSuccess(t *testing.T) { 387 th.SetupHTTP() 388 defer th.TeardownHTTP() 389 390 MockRevertResponse(t) 391 392 c := client.ServiceClient() 393 // Client c must have Microversion set; minimum supported microversion for Revert is 2.27 394 c.Microversion = "2.27" 395 396 err := shares.Revert(context.TODO(), c, shareID, &shares.RevertOpts{SnapshotID: "ddeac769-9742-497f-b985-5bcfa94a3fd6"}).ExtractErr() 397 th.AssertNoErr(t, err) 398 } 399 400 func TestResetStatusSuccess(t *testing.T) { 401 th.SetupHTTP() 402 defer th.TeardownHTTP() 403 404 MockResetStatusResponse(t) 405 406 c := client.ServiceClient() 407 // Client c must have Microversion set; minimum supported microversion for ResetStatus is 2.7 408 c.Microversion = "2.7" 409 410 err := shares.ResetStatus(context.TODO(), c, shareID, &shares.ResetStatusOpts{Status: "error"}).ExtractErr() 411 th.AssertNoErr(t, err) 412 } 413 414 func TestForceDeleteSuccess(t *testing.T) { 415 th.SetupHTTP() 416 defer th.TeardownHTTP() 417 418 MockForceDeleteResponse(t) 419 420 c := client.ServiceClient() 421 // Client c must have Microversion set; minimum supported microversion for ForceDelete is 2.7 422 c.Microversion = "2.7" 423 424 err := shares.ForceDelete(context.TODO(), c, shareID).ExtractErr() 425 th.AssertNoErr(t, err) 426 } 427 428 func TestUnmanageSuccess(t *testing.T) { 429 th.SetupHTTP() 430 defer th.TeardownHTTP() 431 432 MockUnmanageResponse(t) 433 434 c := client.ServiceClient() 435 // Client c must have Microversion set; minimum supported microversion for Unmanage is 2.7 436 c.Microversion = "2.7" 437 438 err := shares.Unmanage(context.TODO(), c, shareID).ExtractErr() 439 th.AssertNoErr(t, err) 440 }