func (s *BlockDevicesSuite) TestWatchBlockDevices(c *gc.C) { sda := state.BlockDeviceInfo{DeviceName: "sda"} sdb := state.BlockDeviceInfo{DeviceName: "sdb"} sdc := state.BlockDeviceInfo{DeviceName: "sdc"} err := s.machine.SetMachineBlockDevices(sda, sdb, sdc) c.Assert(err, jc.ErrorIsNil) // Start block device watcher. w := s.State.WatchBlockDevices(s.machine.MachineTag()) defer testing.AssertStop(c, w) wc := testing.NewNotifyWatcherC(c, s.State, w) wc.AssertOneChange() // Setting the same should not trigger the watcher. err = s.machine.SetMachineBlockDevices(sdc, sdb, sda) c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // change sdb's label. sdb.Label = "fatty" err = s.machine.SetMachineBlockDevices(sda, sdb, sdc) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // change sda's label and sdb's UUID at once. sda.Label = "giggly" sdb.UUID = "4c062658-6225-4f4b-96f3-debf00b964b4" err = s.machine.SetMachineBlockDevices(sda, sdb, sdc) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // drop sdc. err = s.machine.SetMachineBlockDevices(sda, sdb) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // add sdc again: should get a new name. err = s.machine.SetMachineBlockDevices(sda, sdb, sdc) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *BlockDevicesSuite) TestSetMachineBlockDevicesUpdates(c *gc.C) { sda := state.BlockDeviceInfo{DeviceName: "sda"} sdb := state.BlockDeviceInfo{DeviceName: "sdb"} err := s.machine.SetMachineBlockDevices(sda, sdb) c.Assert(err, jc.ErrorIsNil) s.assertBlockDevices(c, s.machine.MachineTag(), []state.BlockDeviceInfo{sda, sdb}) sdb.Label = "root" err = s.machine.SetMachineBlockDevices(sdb) c.Assert(err, jc.ErrorIsNil) s.assertBlockDevices(c, s.machine.MachineTag(), []state.BlockDeviceInfo{sdb}) // If a device is attached, unattached, then attached again, // then it gets a new name. sdb.Label = "" // Label should be reset. sdb.FilesystemType = "ext4" err = s.machine.SetMachineBlockDevices(sda, sdb) c.Assert(err, jc.ErrorIsNil) s.assertBlockDevices(c, s.machine.MachineTag(), []state.BlockDeviceInfo{ sda, sdb, }) }