github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/storageprovisioner/provisioner_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package storageprovisioner_test 5 6 import ( 7 "errors" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 "gopkg.in/juju/names.v2" 12 13 "github.com/juju/juju/api/base/testing" 14 "github.com/juju/juju/api/storageprovisioner" 15 "github.com/juju/juju/apiserver/params" 16 "github.com/juju/juju/storage" 17 coretesting "github.com/juju/juju/testing" 18 ) 19 20 var _ = gc.Suite(&provisionerSuite{}) 21 22 type provisionerSuite struct { 23 coretesting.BaseSuite 24 } 25 26 func (s *provisionerSuite) TestWatchApplications(c *gc.C) { 27 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 28 c.Check(objType, gc.Equals, "StorageProvisioner") 29 c.Check(version, gc.Equals, 0) 30 c.Check(id, gc.Equals, "") 31 c.Check(request, gc.Equals, "WatchApplications") 32 c.Assert(result, gc.FitsTypeOf, ¶ms.StringsWatchResult{}) 33 *(result.(*params.StringsWatchResult)) = params.StringsWatchResult{ 34 Error: ¶ms.Error{Message: "FAIL"}, 35 } 36 return nil 37 }) 38 39 st, err := storageprovisioner.NewState(apiCaller) 40 c.Assert(err, jc.ErrorIsNil) 41 watcher, err := st.WatchApplications() 42 c.Assert(watcher, gc.IsNil) 43 c.Assert(err, gc.ErrorMatches, "FAIL") 44 } 45 46 func (s *provisionerSuite) TestWatchVolumes(c *gc.C) { 47 var callCount int 48 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 49 c.Check(objType, gc.Equals, "StorageProvisioner") 50 c.Check(version, gc.Equals, 0) 51 c.Check(id, gc.Equals, "") 52 c.Check(request, gc.Equals, "WatchVolumes") 53 c.Check(arg, jc.DeepEquals, params.Entities{ 54 Entities: []params.Entity{{Tag: "machine-123"}}, 55 }) 56 c.Assert(result, gc.FitsTypeOf, ¶ms.StringsWatchResults{}) 57 *(result.(*params.StringsWatchResults)) = params.StringsWatchResults{ 58 Results: []params.StringsWatchResult{{ 59 Error: ¶ms.Error{Message: "FAIL"}, 60 }}, 61 } 62 callCount++ 63 return nil 64 }) 65 66 st, err := storageprovisioner.NewState(apiCaller) 67 c.Assert(err, jc.ErrorIsNil) 68 _, err = st.WatchVolumes(names.NewMachineTag("123")) 69 c.Check(err, gc.ErrorMatches, "FAIL") 70 c.Check(callCount, gc.Equals, 1) 71 } 72 73 func (s *provisionerSuite) TestWatchFilesystems(c *gc.C) { 74 var callCount int 75 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 76 c.Check(objType, gc.Equals, "StorageProvisioner") 77 c.Check(version, gc.Equals, 0) 78 c.Check(id, gc.Equals, "") 79 c.Check(request, gc.Equals, "WatchFilesystems") 80 c.Check(arg, jc.DeepEquals, params.Entities{ 81 Entities: []params.Entity{{Tag: "machine-123"}}, 82 }) 83 c.Assert(result, gc.FitsTypeOf, ¶ms.StringsWatchResults{}) 84 *(result.(*params.StringsWatchResults)) = params.StringsWatchResults{ 85 Results: []params.StringsWatchResult{{ 86 Error: ¶ms.Error{Message: "FAIL"}, 87 }}, 88 } 89 callCount++ 90 return nil 91 }) 92 93 st, err := storageprovisioner.NewState(apiCaller) 94 c.Assert(err, jc.ErrorIsNil) 95 _, err = st.WatchFilesystems(names.NewMachineTag("123")) 96 c.Check(err, gc.ErrorMatches, "FAIL") 97 c.Check(callCount, gc.Equals, 1) 98 } 99 100 func (s *provisionerSuite) TestWatchVolumeAttachments(c *gc.C) { 101 var callCount int 102 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 103 c.Check(objType, gc.Equals, "StorageProvisioner") 104 c.Check(version, gc.Equals, 0) 105 c.Check(id, gc.Equals, "") 106 c.Check(request, gc.Equals, "WatchVolumeAttachments") 107 c.Check(arg, jc.DeepEquals, params.Entities{ 108 Entities: []params.Entity{{Tag: "machine-123"}}, 109 }) 110 c.Assert(result, gc.FitsTypeOf, ¶ms.MachineStorageIdsWatchResults{}) 111 *(result.(*params.MachineStorageIdsWatchResults)) = params.MachineStorageIdsWatchResults{ 112 Results: []params.MachineStorageIdsWatchResult{{ 113 Error: ¶ms.Error{Message: "FAIL"}, 114 }}, 115 } 116 callCount++ 117 return nil 118 }) 119 120 st, err := storageprovisioner.NewState(apiCaller) 121 c.Assert(err, jc.ErrorIsNil) 122 _, err = st.WatchVolumeAttachments(names.NewMachineTag("123")) 123 c.Check(err, gc.ErrorMatches, "FAIL") 124 c.Check(callCount, gc.Equals, 1) 125 } 126 127 func (s *provisionerSuite) TestWatchVolumeAttachmentPlans(c *gc.C) { 128 var callCount int 129 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 130 c.Check(objType, gc.Equals, "StorageProvisioner") 131 c.Check(version, gc.Equals, 0) 132 c.Check(id, gc.Equals, "") 133 c.Check(request, gc.Equals, "WatchVolumeAttachmentPlans") 134 c.Check(arg, jc.DeepEquals, params.Entities{ 135 Entities: []params.Entity{{Tag: "machine-123"}}, 136 }) 137 c.Assert(result, gc.FitsTypeOf, ¶ms.MachineStorageIdsWatchResults{}) 138 *(result.(*params.MachineStorageIdsWatchResults)) = params.MachineStorageIdsWatchResults{ 139 Results: []params.MachineStorageIdsWatchResult{{ 140 Error: ¶ms.Error{Message: "FAIL"}, 141 }}, 142 } 143 callCount++ 144 return nil 145 }) 146 147 st, err := storageprovisioner.NewState(apiCaller) 148 c.Assert(err, jc.ErrorIsNil) 149 _, err = st.WatchVolumeAttachmentPlans(names.NewMachineTag("123")) 150 c.Check(err, gc.ErrorMatches, "FAIL") 151 c.Check(callCount, gc.Equals, 1) 152 } 153 154 func (s *provisionerSuite) TestWatchFilesystemAttachments(c *gc.C) { 155 var callCount int 156 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 157 c.Check(objType, gc.Equals, "StorageProvisioner") 158 c.Check(version, gc.Equals, 0) 159 c.Check(id, gc.Equals, "") 160 c.Check(request, gc.Equals, "WatchFilesystemAttachments") 161 c.Check(arg, jc.DeepEquals, params.Entities{ 162 Entities: []params.Entity{{Tag: "machine-123"}}, 163 }) 164 c.Assert(result, gc.FitsTypeOf, ¶ms.MachineStorageIdsWatchResults{}) 165 *(result.(*params.MachineStorageIdsWatchResults)) = params.MachineStorageIdsWatchResults{ 166 Results: []params.MachineStorageIdsWatchResult{{ 167 Error: ¶ms.Error{Message: "FAIL"}, 168 }}, 169 } 170 callCount++ 171 return nil 172 }) 173 174 st, err := storageprovisioner.NewState(apiCaller) 175 c.Assert(err, jc.ErrorIsNil) 176 _, err = st.WatchFilesystemAttachments(names.NewMachineTag("123")) 177 c.Check(err, gc.ErrorMatches, "FAIL") 178 c.Check(callCount, gc.Equals, 1) 179 } 180 181 func (s *provisionerSuite) TestWatchBlockDevices(c *gc.C) { 182 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 183 c.Check(objType, gc.Equals, "StorageProvisioner") 184 c.Check(version, gc.Equals, 0) 185 c.Check(id, gc.Equals, "") 186 c.Check(request, gc.Equals, "WatchBlockDevices") 187 c.Assert(arg, gc.DeepEquals, params.Entities{ 188 Entities: []params.Entity{{"machine-123"}}, 189 }) 190 c.Assert(result, gc.FitsTypeOf, ¶ms.NotifyWatchResults{}) 191 *(result.(*params.NotifyWatchResults)) = params.NotifyWatchResults{ 192 Results: []params.NotifyWatchResult{{ 193 Error: ¶ms.Error{Message: "FAIL"}, 194 }}, 195 } 196 return nil 197 }) 198 199 st, err := storageprovisioner.NewState(apiCaller) 200 c.Assert(err, jc.ErrorIsNil) 201 _, err = st.WatchBlockDevices(names.NewMachineTag("123")) 202 c.Check(err, gc.ErrorMatches, "FAIL") 203 } 204 205 func (s *provisionerSuite) TestVolumes(c *gc.C) { 206 var callCount int 207 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 208 c.Check(objType, gc.Equals, "StorageProvisioner") 209 c.Check(version, gc.Equals, 0) 210 c.Check(id, gc.Equals, "") 211 c.Check(request, gc.Equals, "Volumes") 212 c.Check(arg, gc.DeepEquals, params.Entities{Entities: []params.Entity{{"volume-100"}}}) 213 c.Assert(result, gc.FitsTypeOf, ¶ms.VolumeResults{}) 214 *(result.(*params.VolumeResults)) = params.VolumeResults{ 215 Results: []params.VolumeResult{{ 216 Result: params.Volume{ 217 VolumeTag: "volume-100", 218 Info: params.VolumeInfo{ 219 VolumeId: "volume-id", 220 HardwareId: "abc", 221 Size: 1024, 222 }, 223 }, 224 }}, 225 } 226 callCount++ 227 return nil 228 }) 229 230 st, err := storageprovisioner.NewState(apiCaller) 231 c.Assert(err, jc.ErrorIsNil) 232 volumes, err := st.Volumes([]names.VolumeTag{names.NewVolumeTag("100")}) 233 c.Check(err, jc.ErrorIsNil) 234 c.Check(callCount, gc.Equals, 1) 235 c.Assert(volumes, jc.DeepEquals, []params.VolumeResult{{ 236 Result: params.Volume{ 237 VolumeTag: "volume-100", 238 Info: params.VolumeInfo{ 239 VolumeId: "volume-id", 240 HardwareId: "abc", 241 Size: 1024, 242 }, 243 }, 244 }}) 245 } 246 247 func (s *provisionerSuite) TestFilesystems(c *gc.C) { 248 var callCount int 249 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 250 c.Check(objType, gc.Equals, "StorageProvisioner") 251 c.Check(version, gc.Equals, 0) 252 c.Check(id, gc.Equals, "") 253 c.Check(request, gc.Equals, "Filesystems") 254 c.Check(arg, gc.DeepEquals, params.Entities{Entities: []params.Entity{{"filesystem-100"}}}) 255 c.Assert(result, gc.FitsTypeOf, ¶ms.FilesystemResults{}) 256 *(result.(*params.FilesystemResults)) = params.FilesystemResults{ 257 Results: []params.FilesystemResult{{ 258 Result: params.Filesystem{ 259 FilesystemTag: "filesystem-100", 260 Info: params.FilesystemInfo{ 261 FilesystemId: "filesystem-id", 262 Size: 1024, 263 }, 264 }, 265 }}, 266 } 267 callCount++ 268 return nil 269 }) 270 271 st, err := storageprovisioner.NewState(apiCaller) 272 c.Assert(err, jc.ErrorIsNil) 273 filesystems, err := st.Filesystems([]names.FilesystemTag{names.NewFilesystemTag("100")}) 274 c.Check(err, jc.ErrorIsNil) 275 c.Check(callCount, gc.Equals, 1) 276 c.Assert(filesystems, jc.DeepEquals, []params.FilesystemResult{{ 277 Result: params.Filesystem{ 278 FilesystemTag: "filesystem-100", 279 Info: params.FilesystemInfo{ 280 FilesystemId: "filesystem-id", 281 Size: 1024, 282 }, 283 }, 284 }}) 285 } 286 287 func (s *provisionerSuite) TestVolumeAttachments(c *gc.C) { 288 volumeAttachmentResults := []params.VolumeAttachmentResult{{ 289 Result: params.VolumeAttachment{ 290 MachineTag: "machine-100", 291 VolumeTag: "volume-100", 292 Info: params.VolumeAttachmentInfo{ 293 DeviceName: "xvdf1", 294 }, 295 }, 296 }} 297 298 var callCount int 299 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 300 c.Check(objType, gc.Equals, "StorageProvisioner") 301 c.Check(version, gc.Equals, 0) 302 c.Check(id, gc.Equals, "") 303 c.Check(request, gc.Equals, "VolumeAttachments") 304 c.Check(arg, gc.DeepEquals, params.MachineStorageIds{ 305 Ids: []params.MachineStorageId{{ 306 MachineTag: "machine-100", AttachmentTag: "volume-100", 307 }}, 308 }) 309 c.Assert(result, gc.FitsTypeOf, ¶ms.VolumeAttachmentResults{}) 310 *(result.(*params.VolumeAttachmentResults)) = params.VolumeAttachmentResults{ 311 Results: volumeAttachmentResults, 312 } 313 callCount++ 314 return nil 315 }) 316 317 st, err := storageprovisioner.NewState(apiCaller) 318 c.Assert(err, jc.ErrorIsNil) 319 volumes, err := st.VolumeAttachments([]params.MachineStorageId{{ 320 MachineTag: "machine-100", AttachmentTag: "volume-100", 321 }}) 322 c.Check(err, jc.ErrorIsNil) 323 c.Check(callCount, gc.Equals, 1) 324 c.Assert(volumes, jc.DeepEquals, volumeAttachmentResults) 325 } 326 327 func (s *provisionerSuite) TestVolumeAttachmentPlans(c *gc.C) { 328 volumeAttachmentPlanResults := []params.VolumeAttachmentPlanResult{{ 329 Result: params.VolumeAttachmentPlan{ 330 MachineTag: "machine-100", 331 VolumeTag: "volume-100", 332 PlanInfo: params.VolumeAttachmentPlanInfo{ 333 DeviceType: storage.DeviceTypeISCSI, 334 DeviceAttributes: map[string]string{ 335 "iqn": "bogusIQN", 336 "address": "192.168.1.1", 337 "port": "9999", 338 "chap-user": "example", 339 "chap-secret": "supersecretpassword", 340 }, 341 }, 342 BlockDevice: storage.BlockDevice{ 343 DeviceName: "sda", 344 }, 345 }, 346 }} 347 348 var callCount int 349 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 350 c.Check(objType, gc.Equals, "StorageProvisioner") 351 c.Check(version, gc.Equals, 0) 352 c.Check(id, gc.Equals, "") 353 c.Check(request, gc.Equals, "VolumeAttachmentPlans") 354 c.Check(arg, gc.DeepEquals, params.MachineStorageIds{ 355 Ids: []params.MachineStorageId{{ 356 MachineTag: "machine-100", AttachmentTag: "volume-100", 357 }}, 358 }) 359 c.Assert(result, gc.FitsTypeOf, ¶ms.VolumeAttachmentPlanResults{}) 360 *(result.(*params.VolumeAttachmentPlanResults)) = params.VolumeAttachmentPlanResults{ 361 Results: volumeAttachmentPlanResults, 362 } 363 callCount++ 364 return nil 365 }) 366 367 st, err := storageprovisioner.NewState(apiCaller) 368 c.Assert(err, jc.ErrorIsNil) 369 volumes, err := st.VolumeAttachmentPlans([]params.MachineStorageId{{ 370 MachineTag: "machine-100", AttachmentTag: "volume-100", 371 }}) 372 c.Check(err, jc.ErrorIsNil) 373 c.Check(callCount, gc.Equals, 1) 374 c.Assert(volumes, jc.DeepEquals, volumeAttachmentPlanResults) 375 } 376 377 func (s *provisionerSuite) TestVolumeBlockDevices(c *gc.C) { 378 blockDeviceResults := []params.BlockDeviceResult{{ 379 Result: storage.BlockDevice{ 380 DeviceName: "xvdf1", 381 HardwareId: "kjlaksjdlasjdklasd123123", 382 Size: 1024, 383 }, 384 }} 385 386 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 387 c.Check(objType, gc.Equals, "StorageProvisioner") 388 c.Check(version, gc.Equals, 0) 389 c.Check(id, gc.Equals, "") 390 c.Check(request, gc.Equals, "VolumeBlockDevices") 391 c.Check(arg, gc.DeepEquals, params.MachineStorageIds{ 392 Ids: []params.MachineStorageId{{ 393 MachineTag: "machine-100", AttachmentTag: "volume-100", 394 }}, 395 }) 396 c.Assert(result, gc.FitsTypeOf, ¶ms.BlockDeviceResults{}) 397 *(result.(*params.BlockDeviceResults)) = params.BlockDeviceResults{ 398 Results: blockDeviceResults, 399 } 400 return nil 401 }) 402 403 st, err := storageprovisioner.NewState(apiCaller) 404 c.Assert(err, jc.ErrorIsNil) 405 volumes, err := st.VolumeBlockDevices([]params.MachineStorageId{{ 406 MachineTag: "machine-100", AttachmentTag: "volume-100", 407 }}) 408 c.Check(err, jc.ErrorIsNil) 409 c.Assert(volumes, jc.DeepEquals, blockDeviceResults) 410 } 411 412 func (s *provisionerSuite) TestFilesystemAttachments(c *gc.C) { 413 filesystemAttachmentResults := []params.FilesystemAttachmentResult{{ 414 Result: params.FilesystemAttachment{ 415 MachineTag: "machine-100", 416 FilesystemTag: "filesystem-100", 417 Info: params.FilesystemAttachmentInfo{ 418 MountPoint: "/srv", 419 }, 420 }, 421 }} 422 423 var callCount int 424 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 425 c.Check(objType, gc.Equals, "StorageProvisioner") 426 c.Check(version, gc.Equals, 0) 427 c.Check(id, gc.Equals, "") 428 c.Check(request, gc.Equals, "FilesystemAttachments") 429 c.Check(arg, gc.DeepEquals, params.MachineStorageIds{ 430 Ids: []params.MachineStorageId{{ 431 MachineTag: "machine-100", AttachmentTag: "filesystem-100", 432 }}, 433 }) 434 c.Assert(result, gc.FitsTypeOf, ¶ms.FilesystemAttachmentResults{}) 435 *(result.(*params.FilesystemAttachmentResults)) = params.FilesystemAttachmentResults{ 436 Results: filesystemAttachmentResults, 437 } 438 callCount++ 439 return nil 440 }) 441 442 st, err := storageprovisioner.NewState(apiCaller) 443 c.Assert(err, jc.ErrorIsNil) 444 filesystems, err := st.FilesystemAttachments([]params.MachineStorageId{{ 445 MachineTag: "machine-100", AttachmentTag: "filesystem-100", 446 }}) 447 c.Check(err, jc.ErrorIsNil) 448 c.Check(callCount, gc.Equals, 1) 449 c.Assert(filesystems, jc.DeepEquals, filesystemAttachmentResults) 450 } 451 452 func (s *provisionerSuite) TestVolumeParams(c *gc.C) { 453 var callCount int 454 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 455 c.Check(objType, gc.Equals, "StorageProvisioner") 456 c.Check(version, gc.Equals, 0) 457 c.Check(id, gc.Equals, "") 458 c.Check(request, gc.Equals, "VolumeParams") 459 c.Check(arg, gc.DeepEquals, params.Entities{Entities: []params.Entity{{"volume-100"}}}) 460 c.Assert(result, gc.FitsTypeOf, ¶ms.VolumeParamsResults{}) 461 *(result.(*params.VolumeParamsResults)) = params.VolumeParamsResults{ 462 Results: []params.VolumeParamsResult{{ 463 Result: params.VolumeParams{ 464 VolumeTag: "volume-100", 465 Size: 1024, 466 Provider: "loop", 467 }, 468 }}, 469 } 470 callCount++ 471 return nil 472 }) 473 474 st, err := storageprovisioner.NewState(apiCaller) 475 c.Assert(err, jc.ErrorIsNil) 476 volumeParams, err := st.VolumeParams([]names.VolumeTag{names.NewVolumeTag("100")}) 477 c.Check(err, jc.ErrorIsNil) 478 c.Check(callCount, gc.Equals, 1) 479 c.Assert(volumeParams, jc.DeepEquals, []params.VolumeParamsResult{{ 480 Result: params.VolumeParams{ 481 VolumeTag: "volume-100", Size: 1024, Provider: "loop", 482 }, 483 }}) 484 } 485 486 func (s *provisionerSuite) TestRemoveVolumeParams(c *gc.C) { 487 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 488 c.Check(objType, gc.Equals, "StorageProvisioner") 489 c.Check(version, gc.Equals, 0) 490 c.Check(id, gc.Equals, "") 491 c.Check(request, gc.Equals, "RemoveVolumeParams") 492 c.Check(arg, gc.DeepEquals, params.Entities{Entities: []params.Entity{{"volume-100"}}}) 493 c.Assert(result, gc.FitsTypeOf, ¶ms.RemoveVolumeParamsResults{}) 494 *(result.(*params.RemoveVolumeParamsResults)) = params.RemoveVolumeParamsResults{ 495 Results: []params.RemoveVolumeParamsResult{{ 496 Result: params.RemoveVolumeParams{ 497 Provider: "foo", 498 VolumeId: "bar", 499 Destroy: true, 500 }, 501 }}, 502 } 503 return nil 504 }) 505 506 st, err := storageprovisioner.NewState(apiCaller) 507 c.Assert(err, jc.ErrorIsNil) 508 volumeParams, err := st.RemoveVolumeParams([]names.VolumeTag{names.NewVolumeTag("100")}) 509 c.Check(err, jc.ErrorIsNil) 510 c.Assert(volumeParams, jc.DeepEquals, []params.RemoveVolumeParamsResult{{ 511 Result: params.RemoveVolumeParams{ 512 Provider: "foo", 513 VolumeId: "bar", 514 Destroy: true, 515 }, 516 }}) 517 } 518 519 func (s *provisionerSuite) TestFilesystemParams(c *gc.C) { 520 var callCount int 521 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 522 c.Check(objType, gc.Equals, "StorageProvisioner") 523 c.Check(version, gc.Equals, 0) 524 c.Check(id, gc.Equals, "") 525 c.Check(request, gc.Equals, "FilesystemParams") 526 c.Check(arg, gc.DeepEquals, params.Entities{Entities: []params.Entity{{"filesystem-100"}}}) 527 c.Assert(result, gc.FitsTypeOf, ¶ms.FilesystemParamsResults{}) 528 *(result.(*params.FilesystemParamsResults)) = params.FilesystemParamsResults{ 529 Results: []params.FilesystemParamsResult{{ 530 Result: params.FilesystemParams{ 531 FilesystemTag: "filesystem-100", 532 Size: 1024, 533 Provider: "loop", 534 }, 535 }}, 536 } 537 callCount++ 538 return nil 539 }) 540 541 st, err := storageprovisioner.NewState(apiCaller) 542 c.Assert(err, jc.ErrorIsNil) 543 filesystemParams, err := st.FilesystemParams([]names.FilesystemTag{names.NewFilesystemTag("100")}) 544 c.Check(err, jc.ErrorIsNil) 545 c.Check(callCount, gc.Equals, 1) 546 c.Assert(filesystemParams, jc.DeepEquals, []params.FilesystemParamsResult{{ 547 Result: params.FilesystemParams{ 548 FilesystemTag: "filesystem-100", Size: 1024, Provider: "loop", 549 }, 550 }}) 551 } 552 553 func (s *provisionerSuite) TestRemoveFilesystemParams(c *gc.C) { 554 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 555 c.Check(objType, gc.Equals, "StorageProvisioner") 556 c.Check(version, gc.Equals, 0) 557 c.Check(id, gc.Equals, "") 558 c.Check(request, gc.Equals, "RemoveFilesystemParams") 559 c.Check(arg, gc.DeepEquals, params.Entities{Entities: []params.Entity{{"filesystem-100"}}}) 560 c.Assert(result, gc.FitsTypeOf, ¶ms.RemoveFilesystemParamsResults{}) 561 *(result.(*params.RemoveFilesystemParamsResults)) = params.RemoveFilesystemParamsResults{ 562 Results: []params.RemoveFilesystemParamsResult{{ 563 Result: params.RemoveFilesystemParams{ 564 Provider: "foo", 565 FilesystemId: "bar", 566 Destroy: true, 567 }, 568 }}, 569 } 570 return nil 571 }) 572 573 st, err := storageprovisioner.NewState(apiCaller) 574 c.Assert(err, jc.ErrorIsNil) 575 filesystemParams, err := st.RemoveFilesystemParams([]names.FilesystemTag{names.NewFilesystemTag("100")}) 576 c.Check(err, jc.ErrorIsNil) 577 c.Assert(filesystemParams, jc.DeepEquals, []params.RemoveFilesystemParamsResult{{ 578 Result: params.RemoveFilesystemParams{ 579 Provider: "foo", 580 FilesystemId: "bar", 581 Destroy: true, 582 }, 583 }}) 584 } 585 586 func (s *provisionerSuite) TestVolumeAttachmentParams(c *gc.C) { 587 paramsResults := []params.VolumeAttachmentParamsResult{{ 588 Result: params.VolumeAttachmentParams{ 589 MachineTag: "machine-100", 590 VolumeTag: "volume-100", 591 InstanceId: "inst-ance", 592 Provider: "loop", 593 }, 594 }} 595 596 var callCount int 597 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 598 c.Check(objType, gc.Equals, "StorageProvisioner") 599 c.Check(version, gc.Equals, 0) 600 c.Check(id, gc.Equals, "") 601 c.Check(request, gc.Equals, "VolumeAttachmentParams") 602 c.Check(arg, gc.DeepEquals, params.MachineStorageIds{ 603 Ids: []params.MachineStorageId{{ 604 MachineTag: "machine-100", AttachmentTag: "volume-100", 605 }}, 606 }) 607 c.Assert(result, gc.FitsTypeOf, ¶ms.VolumeAttachmentParamsResults{}) 608 *(result.(*params.VolumeAttachmentParamsResults)) = params.VolumeAttachmentParamsResults{ 609 Results: paramsResults, 610 } 611 callCount++ 612 return nil 613 }) 614 615 st, err := storageprovisioner.NewState(apiCaller) 616 c.Assert(err, jc.ErrorIsNil) 617 volumeParams, err := st.VolumeAttachmentParams([]params.MachineStorageId{{ 618 MachineTag: "machine-100", AttachmentTag: "volume-100", 619 }}) 620 c.Check(err, jc.ErrorIsNil) 621 c.Check(callCount, gc.Equals, 1) 622 c.Assert(volumeParams, jc.DeepEquals, paramsResults) 623 } 624 625 func (s *provisionerSuite) TestFilesystemAttachmentParams(c *gc.C) { 626 paramsResults := []params.FilesystemAttachmentParamsResult{{ 627 Result: params.FilesystemAttachmentParams{ 628 MachineTag: "machine-100", 629 FilesystemTag: "filesystem-100", 630 InstanceId: "inst-ance", 631 Provider: "loop", 632 MountPoint: "/srv", 633 }, 634 }} 635 636 var callCount int 637 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 638 c.Check(objType, gc.Equals, "StorageProvisioner") 639 c.Check(version, gc.Equals, 0) 640 c.Check(id, gc.Equals, "") 641 c.Check(request, gc.Equals, "FilesystemAttachmentParams") 642 c.Check(arg, gc.DeepEquals, params.MachineStorageIds{ 643 Ids: []params.MachineStorageId{{ 644 MachineTag: "machine-100", AttachmentTag: "filesystem-100", 645 }}, 646 }) 647 c.Assert(result, gc.FitsTypeOf, ¶ms.FilesystemAttachmentParamsResults{}) 648 *(result.(*params.FilesystemAttachmentParamsResults)) = params.FilesystemAttachmentParamsResults{ 649 Results: paramsResults, 650 } 651 callCount++ 652 return nil 653 }) 654 655 st, err := storageprovisioner.NewState(apiCaller) 656 c.Assert(err, jc.ErrorIsNil) 657 filesystemParams, err := st.FilesystemAttachmentParams([]params.MachineStorageId{{ 658 MachineTag: "machine-100", AttachmentTag: "filesystem-100", 659 }}) 660 c.Check(err, jc.ErrorIsNil) 661 c.Check(callCount, gc.Equals, 1) 662 c.Assert(filesystemParams, jc.DeepEquals, paramsResults) 663 } 664 665 func (s *provisionerSuite) TestSetVolumeInfo(c *gc.C) { 666 var callCount int 667 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 668 c.Check(objType, gc.Equals, "StorageProvisioner") 669 c.Check(version, gc.Equals, 0) 670 c.Check(id, gc.Equals, "") 671 c.Check(request, gc.Equals, "SetVolumeInfo") 672 c.Check(arg, gc.DeepEquals, params.Volumes{ 673 Volumes: []params.Volume{{ 674 VolumeTag: "volume-100", 675 Info: params.VolumeInfo{ 676 VolumeId: "123", 677 HardwareId: "abc", 678 Size: 1024, 679 Persistent: true, 680 }, 681 }}, 682 }) 683 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 684 *(result.(*params.ErrorResults)) = params.ErrorResults{ 685 Results: []params.ErrorResult{{Error: nil}}, 686 } 687 callCount++ 688 return nil 689 }) 690 691 st, err := storageprovisioner.NewState(apiCaller) 692 c.Assert(err, jc.ErrorIsNil) 693 volumes := []params.Volume{{ 694 VolumeTag: "volume-100", 695 Info: params.VolumeInfo{ 696 VolumeId: "123", HardwareId: "abc", Size: 1024, Persistent: true, 697 }, 698 }} 699 errorResults, err := st.SetVolumeInfo(volumes) 700 c.Check(err, jc.ErrorIsNil) 701 c.Check(callCount, gc.Equals, 1) 702 c.Assert(errorResults, gc.HasLen, 1) 703 c.Assert(errorResults[0].Error, gc.IsNil) 704 } 705 706 func (s *provisionerSuite) TestCreateVolumeAttachmentPlan(c *gc.C) { 707 var callCount int 708 709 attachmentPlan := []params.VolumeAttachmentPlan{ 710 { 711 MachineTag: "machine-100", 712 VolumeTag: "volume-100", 713 PlanInfo: params.VolumeAttachmentPlanInfo{ 714 DeviceType: storage.DeviceTypeISCSI, 715 DeviceAttributes: map[string]string{ 716 "iqn": "bogusIQN", 717 "address": "192.168.1.1", 718 "port": "9999", 719 "chap-user": "example", 720 "chap-secret": "supersecretpassword", 721 }, 722 }, 723 BlockDevice: storage.BlockDevice{ 724 DeviceName: "sda", 725 }, 726 }, 727 } 728 729 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 730 c.Check(objType, gc.Equals, "StorageProvisioner") 731 c.Check(version, gc.Equals, 0) 732 c.Check(id, gc.Equals, "") 733 c.Check(request, gc.Equals, "CreateVolumeAttachmentPlans") 734 c.Check(arg, gc.DeepEquals, params.VolumeAttachmentPlans{ 735 VolumeAttachmentPlans: []params.VolumeAttachmentPlan{ 736 { 737 MachineTag: "machine-100", 738 VolumeTag: "volume-100", 739 PlanInfo: params.VolumeAttachmentPlanInfo{ 740 DeviceType: storage.DeviceTypeISCSI, 741 DeviceAttributes: map[string]string{ 742 "iqn": "bogusIQN", 743 "address": "192.168.1.1", 744 "port": "9999", 745 "chap-user": "example", 746 "chap-secret": "supersecretpassword", 747 }, 748 }, 749 BlockDevice: storage.BlockDevice{ 750 DeviceName: "sda", 751 }, 752 }, 753 }, 754 }) 755 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 756 *(result.(*params.ErrorResults)) = params.ErrorResults{ 757 Results: []params.ErrorResult{{Error: nil}}, 758 } 759 callCount++ 760 return nil 761 }) 762 763 st, err := storageprovisioner.NewState(apiCaller) 764 c.Assert(err, jc.ErrorIsNil) 765 errorResults, err := st.CreateVolumeAttachmentPlans(attachmentPlan) 766 c.Check(err, jc.ErrorIsNil) 767 c.Check(callCount, gc.Equals, 1) 768 c.Assert(errorResults, gc.HasLen, 1) 769 c.Assert(errorResults[0].Error, gc.IsNil) 770 } 771 772 func (s *provisionerSuite) TestSetVolumeAttachmentPlanBlockInfo(c *gc.C) { 773 var callCount int 774 775 attachmentPlan := []params.VolumeAttachmentPlan{ 776 { 777 MachineTag: "machine-100", 778 VolumeTag: "volume-100", 779 PlanInfo: params.VolumeAttachmentPlanInfo{ 780 DeviceType: storage.DeviceTypeISCSI, 781 DeviceAttributes: map[string]string{ 782 "iqn": "bogusIQN", 783 "address": "192.168.1.1", 784 "port": "9999", 785 "chap-user": "example", 786 "chap-secret": "supersecretpassword", 787 }, 788 }, 789 BlockDevice: storage.BlockDevice{ 790 DeviceName: "sda", 791 }, 792 }, 793 } 794 795 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 796 c.Check(objType, gc.Equals, "StorageProvisioner") 797 c.Check(version, gc.Equals, 0) 798 c.Check(id, gc.Equals, "") 799 c.Check(request, gc.Equals, "SetVolumeAttachmentPlanBlockInfo") 800 c.Check(arg, gc.DeepEquals, params.VolumeAttachmentPlans{ 801 VolumeAttachmentPlans: []params.VolumeAttachmentPlan{ 802 { 803 MachineTag: "machine-100", 804 VolumeTag: "volume-100", 805 PlanInfo: params.VolumeAttachmentPlanInfo{ 806 DeviceType: storage.DeviceTypeISCSI, 807 DeviceAttributes: map[string]string{ 808 "iqn": "bogusIQN", 809 "address": "192.168.1.1", 810 "port": "9999", 811 "chap-user": "example", 812 "chap-secret": "supersecretpassword", 813 }, 814 }, 815 BlockDevice: storage.BlockDevice{ 816 DeviceName: "sda", 817 }, 818 }, 819 }, 820 }) 821 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 822 *(result.(*params.ErrorResults)) = params.ErrorResults{ 823 Results: []params.ErrorResult{{Error: nil}}, 824 } 825 callCount++ 826 return nil 827 }) 828 829 st, err := storageprovisioner.NewState(apiCaller) 830 c.Assert(err, jc.ErrorIsNil) 831 errorResults, err := st.SetVolumeAttachmentPlanBlockInfo(attachmentPlan) 832 c.Check(err, jc.ErrorIsNil) 833 c.Check(callCount, gc.Equals, 1) 834 c.Assert(errorResults, gc.HasLen, 1) 835 c.Assert(errorResults[0].Error, gc.IsNil) 836 } 837 838 func (s *provisionerSuite) TestRemoveVolumeAttachmentPlan(c *gc.C) { 839 var callCount int 840 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 841 c.Check(objType, gc.Equals, "StorageProvisioner") 842 c.Check(version, gc.Equals, 0) 843 c.Check(id, gc.Equals, "") 844 c.Check(request, gc.Equals, "RemoveVolumeAttachmentPlan") 845 c.Check(arg, gc.DeepEquals, params.MachineStorageIds{ 846 Ids: []params.MachineStorageId{{ 847 MachineTag: "machine-100", AttachmentTag: "volume-100", 848 }}, 849 }) 850 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 851 *(result.(*params.ErrorResults)) = params.ErrorResults{ 852 Results: []params.ErrorResult{{Error: nil}}, 853 } 854 callCount++ 855 return nil 856 }) 857 858 st, err := storageprovisioner.NewState(apiCaller) 859 c.Assert(err, jc.ErrorIsNil) 860 errorResults, err := st.RemoveVolumeAttachmentPlan([]params.MachineStorageId{{ 861 MachineTag: "machine-100", AttachmentTag: "volume-100", 862 }}) 863 c.Check(err, jc.ErrorIsNil) 864 c.Check(callCount, gc.Equals, 1) 865 c.Assert(errorResults, gc.HasLen, 1) 866 c.Assert(errorResults[0].Error, gc.IsNil) 867 } 868 869 func (s *provisionerSuite) TestSetFilesystemInfo(c *gc.C) { 870 var callCount int 871 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 872 c.Check(objType, gc.Equals, "StorageProvisioner") 873 c.Check(version, gc.Equals, 0) 874 c.Check(id, gc.Equals, "") 875 c.Check(request, gc.Equals, "SetFilesystemInfo") 876 c.Check(arg, gc.DeepEquals, params.Filesystems{ 877 Filesystems: []params.Filesystem{{ 878 FilesystemTag: "filesystem-100", 879 Info: params.FilesystemInfo{ 880 FilesystemId: "123", 881 Size: 1024, 882 }, 883 }}, 884 }) 885 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 886 *(result.(*params.ErrorResults)) = params.ErrorResults{ 887 Results: []params.ErrorResult{{Error: nil}}, 888 } 889 callCount++ 890 return nil 891 }) 892 893 st, err := storageprovisioner.NewState(apiCaller) 894 c.Assert(err, jc.ErrorIsNil) 895 filesystems := []params.Filesystem{{ 896 FilesystemTag: "filesystem-100", 897 Info: params.FilesystemInfo{ 898 FilesystemId: "123", 899 Size: 1024, 900 }, 901 }} 902 errorResults, err := st.SetFilesystemInfo(filesystems) 903 c.Check(err, jc.ErrorIsNil) 904 c.Check(callCount, gc.Equals, 1) 905 c.Assert(errorResults, gc.HasLen, 1) 906 c.Assert(errorResults[0].Error, gc.IsNil) 907 } 908 909 func (s *provisionerSuite) TestSetVolumeAttachmentInfo(c *gc.C) { 910 volumeAttachments := []params.VolumeAttachment{{ 911 VolumeTag: "volume-100", 912 MachineTag: "machine-200", 913 Info: params.VolumeAttachmentInfo{ 914 DeviceName: "xvdf1", 915 }, 916 }} 917 918 var callCount int 919 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 920 c.Check(objType, gc.Equals, "StorageProvisioner") 921 c.Check(version, gc.Equals, 0) 922 c.Check(id, gc.Equals, "") 923 c.Check(request, gc.Equals, "SetVolumeAttachmentInfo") 924 c.Check(arg, jc.DeepEquals, params.VolumeAttachments{volumeAttachments}) 925 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 926 *(result.(*params.ErrorResults)) = params.ErrorResults{ 927 Results: []params.ErrorResult{{Error: nil}}, 928 } 929 callCount++ 930 return nil 931 }) 932 933 st, err := storageprovisioner.NewState(apiCaller) 934 c.Assert(err, jc.ErrorIsNil) 935 errorResults, err := st.SetVolumeAttachmentInfo(volumeAttachments) 936 c.Check(err, jc.ErrorIsNil) 937 c.Check(callCount, gc.Equals, 1) 938 c.Assert(errorResults, gc.HasLen, 1) 939 c.Assert(errorResults[0].Error, gc.IsNil) 940 } 941 942 func (s *provisionerSuite) TestSetFilesystemAttachmentInfo(c *gc.C) { 943 filesystemAttachments := []params.FilesystemAttachment{{ 944 FilesystemTag: "filesystem-100", 945 MachineTag: "machine-200", 946 Info: params.FilesystemAttachmentInfo{ 947 MountPoint: "/srv", 948 }, 949 }} 950 951 var callCount int 952 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 953 c.Check(objType, gc.Equals, "StorageProvisioner") 954 c.Check(version, gc.Equals, 0) 955 c.Check(id, gc.Equals, "") 956 c.Check(request, gc.Equals, "SetFilesystemAttachmentInfo") 957 c.Check(arg, jc.DeepEquals, params.FilesystemAttachments{filesystemAttachments}) 958 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 959 *(result.(*params.ErrorResults)) = params.ErrorResults{ 960 Results: []params.ErrorResult{{Error: nil}}, 961 } 962 callCount++ 963 return nil 964 }) 965 966 st, err := storageprovisioner.NewState(apiCaller) 967 c.Assert(err, jc.ErrorIsNil) 968 errorResults, err := st.SetFilesystemAttachmentInfo(filesystemAttachments) 969 c.Check(err, jc.ErrorIsNil) 970 c.Check(callCount, gc.Equals, 1) 971 c.Assert(errorResults, gc.HasLen, 1) 972 c.Assert(errorResults[0].Error, gc.IsNil) 973 } 974 975 func (s *provisionerSuite) testOpWithTags( 976 c *gc.C, opName string, apiCall func(*storageprovisioner.State, []names.Tag) ([]params.ErrorResult, error), 977 ) { 978 var callCount int 979 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 980 c.Check(objType, gc.Equals, "StorageProvisioner") 981 c.Check(version, gc.Equals, 0) 982 c.Check(id, gc.Equals, "") 983 c.Check(request, gc.Equals, opName) 984 c.Check(arg, gc.DeepEquals, params.Entities{Entities: []params.Entity{{Tag: "volume-100"}}}) 985 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 986 *(result.(*params.ErrorResults)) = params.ErrorResults{ 987 Results: []params.ErrorResult{{Error: nil}}, 988 } 989 callCount++ 990 return nil 991 }) 992 993 st, err := storageprovisioner.NewState(apiCaller) 994 c.Assert(err, jc.ErrorIsNil) 995 volumes := []names.Tag{names.NewVolumeTag("100")} 996 errorResults, err := apiCall(st, volumes) 997 c.Check(err, jc.ErrorIsNil) 998 c.Check(callCount, gc.Equals, 1) 999 c.Assert(errorResults, jc.DeepEquals, []params.ErrorResult{{}}) 1000 } 1001 1002 func (s *provisionerSuite) TestRemove(c *gc.C) { 1003 s.testOpWithTags(c, "Remove", func(st *storageprovisioner.State, tags []names.Tag) ([]params.ErrorResult, error) { 1004 return st.Remove(tags) 1005 }) 1006 } 1007 1008 func (s *provisionerSuite) TestEnsureDead(c *gc.C) { 1009 s.testOpWithTags(c, "EnsureDead", func(st *storageprovisioner.State, tags []names.Tag) ([]params.ErrorResult, error) { 1010 return st.EnsureDead(tags) 1011 }) 1012 } 1013 1014 func (s *provisionerSuite) TestLife(c *gc.C) { 1015 var callCount int 1016 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1017 c.Check(objType, gc.Equals, "StorageProvisioner") 1018 c.Check(version, gc.Equals, 0) 1019 c.Check(id, gc.Equals, "") 1020 c.Check(request, gc.Equals, "Life") 1021 c.Check(arg, gc.DeepEquals, params.Entities{Entities: []params.Entity{{Tag: "volume-100"}}}) 1022 c.Assert(result, gc.FitsTypeOf, ¶ms.LifeResults{}) 1023 *(result.(*params.LifeResults)) = params.LifeResults{ 1024 Results: []params.LifeResult{{Life: params.Alive}}, 1025 } 1026 callCount++ 1027 return nil 1028 }) 1029 1030 st, err := storageprovisioner.NewState(apiCaller) 1031 c.Assert(err, jc.ErrorIsNil) 1032 volumes := []names.Tag{names.NewVolumeTag("100")} 1033 lifeResults, err := st.Life(volumes) 1034 c.Check(err, jc.ErrorIsNil) 1035 c.Check(callCount, gc.Equals, 1) 1036 c.Assert(lifeResults, jc.DeepEquals, []params.LifeResult{{Life: params.Alive}}) 1037 } 1038 1039 func (s *provisionerSuite) testClientError(c *gc.C, apiCall func(*storageprovisioner.State) error) { 1040 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1041 return errors.New("blargh") 1042 }) 1043 st, err := storageprovisioner.NewState(apiCaller) 1044 c.Assert(err, jc.ErrorIsNil) 1045 err = apiCall(st) 1046 c.Check(err, gc.ErrorMatches, "blargh") 1047 } 1048 1049 func (s *provisionerSuite) TestWatchVolumesClientError(c *gc.C) { 1050 s.testClientError(c, func(st *storageprovisioner.State) error { 1051 _, err := st.WatchVolumes(names.NewMachineTag("123")) 1052 return err 1053 }) 1054 } 1055 1056 func (s *provisionerSuite) TestVolumesClientError(c *gc.C) { 1057 s.testClientError(c, func(st *storageprovisioner.State) error { 1058 _, err := st.Volumes(nil) 1059 return err 1060 }) 1061 } 1062 1063 func (s *provisionerSuite) TestVolumeParamsClientError(c *gc.C) { 1064 s.testClientError(c, func(st *storageprovisioner.State) error { 1065 _, err := st.VolumeParams(nil) 1066 return err 1067 }) 1068 } 1069 1070 func (s *provisionerSuite) TestRemoveVolumeParamsClientError(c *gc.C) { 1071 s.testClientError(c, func(st *storageprovisioner.State) error { 1072 _, err := st.RemoveVolumeParams(nil) 1073 return err 1074 }) 1075 } 1076 1077 func (s *provisionerSuite) TestFilesystemParamsClientError(c *gc.C) { 1078 s.testClientError(c, func(st *storageprovisioner.State) error { 1079 _, err := st.FilesystemParams(nil) 1080 return err 1081 }) 1082 } 1083 1084 func (s *provisionerSuite) TestRemoveFilesystemParamsClientError(c *gc.C) { 1085 s.testClientError(c, func(st *storageprovisioner.State) error { 1086 _, err := st.RemoveFilesystemParams(nil) 1087 return err 1088 }) 1089 } 1090 1091 func (s *provisionerSuite) TestRemoveClientError(c *gc.C) { 1092 s.testClientError(c, func(st *storageprovisioner.State) error { 1093 _, err := st.Remove(nil) 1094 return err 1095 }) 1096 } 1097 1098 func (s *provisionerSuite) TestRemoveAttachmentsClientError(c *gc.C) { 1099 s.testClientError(c, func(st *storageprovisioner.State) error { 1100 _, err := st.RemoveAttachments(nil) 1101 return err 1102 }) 1103 } 1104 1105 func (s *provisionerSuite) TestSetVolumeInfoClientError(c *gc.C) { 1106 s.testClientError(c, func(st *storageprovisioner.State) error { 1107 _, err := st.SetVolumeInfo(nil) 1108 return err 1109 }) 1110 } 1111 1112 func (s *provisionerSuite) TestEnsureDeadClientError(c *gc.C) { 1113 s.testClientError(c, func(st *storageprovisioner.State) error { 1114 _, err := st.EnsureDead(nil) 1115 return err 1116 }) 1117 } 1118 1119 func (s *provisionerSuite) TestLifeClientError(c *gc.C) { 1120 s.testClientError(c, func(st *storageprovisioner.State) error { 1121 _, err := st.Life(nil) 1122 return err 1123 }) 1124 } 1125 1126 func (s *provisionerSuite) TestAttachmentLifeClientError(c *gc.C) { 1127 s.testClientError(c, func(st *storageprovisioner.State) error { 1128 _, err := st.AttachmentLife(nil) 1129 return err 1130 }) 1131 } 1132 1133 func (s *provisionerSuite) TestWatchVolumesServerError(c *gc.C) { 1134 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1135 *(result.(*params.StringsWatchResults)) = params.StringsWatchResults{ 1136 Results: []params.StringsWatchResult{{ 1137 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1138 }}, 1139 } 1140 return nil 1141 }) 1142 st, err := storageprovisioner.NewState(apiCaller) 1143 c.Assert(err, jc.ErrorIsNil) 1144 _, err = st.WatchVolumes(names.NewMachineTag("123")) 1145 c.Check(err, gc.ErrorMatches, "MSG") 1146 } 1147 1148 func (s *provisionerSuite) TestVolumesServerError(c *gc.C) { 1149 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1150 *(result.(*params.VolumeResults)) = params.VolumeResults{ 1151 Results: []params.VolumeResult{{ 1152 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1153 }}, 1154 } 1155 return nil 1156 }) 1157 st, err := storageprovisioner.NewState(apiCaller) 1158 c.Assert(err, jc.ErrorIsNil) 1159 results, err := st.Volumes([]names.VolumeTag{names.NewVolumeTag("100")}) 1160 c.Assert(err, jc.ErrorIsNil) 1161 c.Assert(results, gc.HasLen, 1) 1162 c.Check(results[0].Error, gc.ErrorMatches, "MSG") 1163 } 1164 1165 func (s *provisionerSuite) TestVolumeParamsServerError(c *gc.C) { 1166 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1167 *(result.(*params.VolumeParamsResults)) = params.VolumeParamsResults{ 1168 Results: []params.VolumeParamsResult{{ 1169 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1170 }}, 1171 } 1172 return nil 1173 }) 1174 st, err := storageprovisioner.NewState(apiCaller) 1175 c.Assert(err, jc.ErrorIsNil) 1176 results, err := st.VolumeParams([]names.VolumeTag{names.NewVolumeTag("100")}) 1177 c.Assert(err, jc.ErrorIsNil) 1178 c.Assert(results, gc.HasLen, 1) 1179 c.Check(results[0].Error, gc.ErrorMatches, "MSG") 1180 } 1181 1182 func (s *provisionerSuite) TestRemoveVolumeParamsServerError(c *gc.C) { 1183 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1184 *(result.(*params.RemoveVolumeParamsResults)) = params.RemoveVolumeParamsResults{ 1185 Results: []params.RemoveVolumeParamsResult{{ 1186 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1187 }}, 1188 } 1189 return nil 1190 }) 1191 st, err := storageprovisioner.NewState(apiCaller) 1192 c.Assert(err, jc.ErrorIsNil) 1193 results, err := st.RemoveVolumeParams([]names.VolumeTag{names.NewVolumeTag("100")}) 1194 c.Assert(err, jc.ErrorIsNil) 1195 c.Assert(results, gc.HasLen, 1) 1196 c.Check(results[0].Error, gc.ErrorMatches, "MSG") 1197 } 1198 1199 func (s *provisionerSuite) TestFilesystemParamsServerError(c *gc.C) { 1200 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1201 *(result.(*params.FilesystemParamsResults)) = params.FilesystemParamsResults{ 1202 Results: []params.FilesystemParamsResult{{ 1203 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1204 }}, 1205 } 1206 return nil 1207 }) 1208 st, err := storageprovisioner.NewState(apiCaller) 1209 c.Assert(err, jc.ErrorIsNil) 1210 results, err := st.FilesystemParams([]names.FilesystemTag{names.NewFilesystemTag("100")}) 1211 c.Assert(err, jc.ErrorIsNil) 1212 c.Assert(results, gc.HasLen, 1) 1213 c.Check(results[0].Error, gc.ErrorMatches, "MSG") 1214 } 1215 1216 func (s *provisionerSuite) TestRemoveFilesystemParamsServerError(c *gc.C) { 1217 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1218 *(result.(*params.RemoveFilesystemParamsResults)) = params.RemoveFilesystemParamsResults{ 1219 Results: []params.RemoveFilesystemParamsResult{{ 1220 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1221 }}, 1222 } 1223 return nil 1224 }) 1225 st, err := storageprovisioner.NewState(apiCaller) 1226 c.Assert(err, jc.ErrorIsNil) 1227 results, err := st.RemoveFilesystemParams([]names.FilesystemTag{names.NewFilesystemTag("100")}) 1228 c.Assert(err, jc.ErrorIsNil) 1229 c.Assert(results, gc.HasLen, 1) 1230 c.Check(results[0].Error, gc.ErrorMatches, "MSG") 1231 } 1232 1233 func (s *provisionerSuite) TestSetVolumeInfoServerError(c *gc.C) { 1234 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1235 *(result.(*params.ErrorResults)) = params.ErrorResults{ 1236 Results: []params.ErrorResult{{ 1237 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1238 }}, 1239 } 1240 return nil 1241 }) 1242 st, err := storageprovisioner.NewState(apiCaller) 1243 c.Assert(err, jc.ErrorIsNil) 1244 results, err := st.SetVolumeInfo([]params.Volume{{ 1245 VolumeTag: names.NewVolumeTag("100").String(), 1246 }}) 1247 c.Assert(err, jc.ErrorIsNil) 1248 c.Assert(results, gc.HasLen, 1) 1249 c.Check(results[0].Error, gc.ErrorMatches, "MSG") 1250 } 1251 1252 func (s *provisionerSuite) testServerError(c *gc.C, apiCall func(*storageprovisioner.State, []names.Tag) ([]params.ErrorResult, error)) { 1253 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1254 *(result.(*params.ErrorResults)) = params.ErrorResults{ 1255 Results: []params.ErrorResult{{ 1256 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1257 }}, 1258 } 1259 return nil 1260 }) 1261 st, err := storageprovisioner.NewState(apiCaller) 1262 c.Assert(err, jc.ErrorIsNil) 1263 tags := []names.Tag{ 1264 names.NewVolumeTag("100"), 1265 } 1266 results, err := apiCall(st, tags) 1267 c.Assert(err, jc.ErrorIsNil) 1268 c.Assert(results, gc.HasLen, 1) 1269 c.Check(results[0].Error, gc.ErrorMatches, "MSG") 1270 } 1271 1272 func (s *provisionerSuite) TestRemoveServerError(c *gc.C) { 1273 s.testServerError(c, func(st *storageprovisioner.State, tags []names.Tag) ([]params.ErrorResult, error) { 1274 return st.Remove(tags) 1275 }) 1276 } 1277 1278 func (s *provisionerSuite) TestEnsureDeadServerError(c *gc.C) { 1279 s.testServerError(c, func(st *storageprovisioner.State, tags []names.Tag) ([]params.ErrorResult, error) { 1280 return st.EnsureDead(tags) 1281 }) 1282 } 1283 1284 func (s *provisionerSuite) TestLifeServerError(c *gc.C) { 1285 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 1286 *(result.(*params.LifeResults)) = params.LifeResults{ 1287 Results: []params.LifeResult{{ 1288 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 1289 }}, 1290 } 1291 return nil 1292 }) 1293 st, err := storageprovisioner.NewState(apiCaller) 1294 c.Assert(err, jc.ErrorIsNil) 1295 tags := []names.Tag{ 1296 names.NewVolumeTag("100"), 1297 } 1298 results, err := st.Life(tags) 1299 c.Assert(err, jc.ErrorIsNil) 1300 c.Assert(results, gc.HasLen, 1) 1301 c.Check(results[0].Error, gc.ErrorMatches, "MSG") 1302 }