func (s *VolumeStateSuite) TestSetVolumeInfo(c *gc.C) { _, u, storageTag := s.setupSingleStorage(c, "block", "loop-pool") err := s.State.AssignUnit(u, state.AssignCleanEmpty) c.Assert(err, jc.ErrorIsNil) volume := s.storageInstanceVolume(c, storageTag) volumeTag := volume.VolumeTag() s.assertVolumeUnprovisioned(c, volumeTag) volumeInfoSet := state.VolumeInfo{Size: 123, Persistent: true, VolumeId: "vol-ume"} err = s.State.SetVolumeInfo(volume.VolumeTag(), volumeInfoSet) c.Assert(err, jc.ErrorIsNil) volumeInfoSet.Pool = "loop-pool" // taken from params s.assertVolumeInfo(c, volumeTag, volumeInfoSet) }
func (s *VolumeStateSuite) TestSetVolumeInfoNoStorageAssigned(c *gc.C) { oneJob := []state.MachineJob{state.JobHostUnits} cons := constraints.MustParse("mem=4G") hc := instance.MustParseHardware("mem=2G") volumeParams := state.VolumeParams{ Pool: "loop-pool", Size: 123, } machineTemplate := state.MachineTemplate{ Series: "precise", Constraints: cons, HardwareCharacteristics: hc, InstanceId: "inst-id", Nonce: "nonce", Jobs: oneJob, Volumes: []state.MachineVolumeParams{{ Volume: volumeParams, }}, } machines, err := s.State.AddMachines(machineTemplate) c.Assert(err, jc.ErrorIsNil) c.Assert(machines, gc.HasLen, 1) m, err := s.State.Machine(machines[0].Id()) c.Assert(err, jc.ErrorIsNil) volumeAttachments, err := s.State.MachineVolumeAttachments(m.MachineTag()) c.Assert(err, jc.ErrorIsNil) c.Assert(volumeAttachments, gc.HasLen, 1) volumeTag := volumeAttachments[0].Volume() volume := s.volume(c, volumeTag) _, err = volume.StorageInstance() c.Assert(err, jc.Satisfies, errors.IsNotAssigned) s.assertVolumeUnprovisioned(c, volumeTag) volumeInfoSet := state.VolumeInfo{Size: 123, VolumeId: "vol-ume"} err = s.State.SetVolumeInfo(volume.VolumeTag(), volumeInfoSet) c.Assert(err, jc.ErrorIsNil) volumeInfoSet.Pool = "loop-pool" // taken from params s.assertVolumeInfo(c, volumeTag, volumeInfoSet) }
func (s *VolumeStateSuite) TestSetVolumeInfoImmutable(c *gc.C) { _, u, storageTag := s.setupSingleStorage(c, "block", "loop-pool") err := s.State.AssignUnit(u, state.AssignCleanEmpty) c.Assert(err, jc.ErrorIsNil) volume := s.storageInstanceVolume(c, storageTag) volumeTag := volume.VolumeTag() volumeInfoSet := state.VolumeInfo{Size: 123, VolumeId: "vol-ume"} err = s.State.SetVolumeInfo(volume.VolumeTag(), volumeInfoSet) c.Assert(err, jc.ErrorIsNil) // The first call to SetVolumeInfo takes the pool name from // the params; the second does not, but it must not change // either. Callers are expected to get the existing info and // update it, leaving immutable values intact. err = s.State.SetVolumeInfo(volume.VolumeTag(), volumeInfoSet) c.Assert(err, gc.ErrorMatches, `cannot set info for volume "0/0": cannot change pool from "loop-pool" to ""`) volumeInfoSet.Pool = "loop-pool" s.assertVolumeInfo(c, volumeTag, volumeInfoSet) }