def test_lxc_teardown_container( self, mock_remove_maps, mock_nbd_disconnect, mock_umount, mock_loopremove, mock_exist): def proc_mounts(mount_point): mount_points = { '/mnt/loop/nopart': '/dev/loop0', '/mnt/loop/part': '/dev/mapper/loop0p1', '/mnt/nbd/nopart': '/dev/nbd15', '/mnt/nbd/part': '/dev/mapper/nbd15p1', } return mount_points[mount_point] self.stub_out('nova.virt.disk.api._DiskImage._device_for_path', proc_mounts) expected_commands = [] disk_api.teardown_container('/mnt/loop/nopart') mock_loopremove.assert_has_calls([mock.call('/dev/loop0')]) mock_loopremove.reset_mock() mock_umount.assert_has_calls([mock.call('/dev/loop0')]) mock_umount.reset_mock() disk_api.teardown_container('/mnt/loop/part') mock_loopremove.assert_has_calls([mock.call('/dev/loop0')]) mock_loopremove.reset_mock() mock_umount.assert_has_calls([mock.call('/dev/mapper/loop0p1')]) mock_umount.reset_mock() mock_remove_maps.assert_has_calls([mock.call('/dev/loop0')]) mock_remove_maps.reset_mock() disk_api.teardown_container('/mnt/nbd/nopart') expected_commands += [ ('blockdev', '--flushbufs', '/dev/nbd15'), ] mock_nbd_disconnect.assert_has_calls([mock.call('/dev/nbd15')]) mock_umount.assert_has_calls([mock.call('/dev/nbd15')]) mock_nbd_disconnect.reset_mock() mock_umount.reset_mock() disk_api.teardown_container('/mnt/nbd/part') expected_commands += [ ('blockdev', '--flushbufs', '/dev/nbd15'), ] mock_nbd_disconnect.assert_has_calls([mock.call('/dev/nbd15')]) mock_umount.assert_has_calls([mock.call('/dev/mapper/nbd15p1')]) mock_nbd_disconnect.reset_mock() mock_umount.reset_mock() mock_remove_maps.assert_has_calls([mock.call('/dev/nbd15')]) mock_remove_maps.reset_mock() # NOTE(thomasem): Not adding any commands in this case, because we're # not expecting an additional umount for LocalBlockImages. This is to # assert that no additional commands are run in this case. disk_api.teardown_container('/dev/volume-group/uuid_disk') mock_umount.assert_not_called() self.assertEqual(self.executes, expected_commands)
def test_lxc_teardown_container( self, mock_blockdev_flush, mock_remove_maps, mock_nbd_disconnect, mock_umount, mock_loopremove, mock_exist): def proc_mounts(mount_point): mount_points = { '/mnt/loop/nopart': '/dev/loop0', '/mnt/loop/part': '/dev/mapper/loop0p1', '/mnt/nbd/nopart': '/dev/nbd15', '/mnt/nbd/part': '/dev/mapper/nbd15p1', } return mount_points[mount_point] self.stub_out('nova.virt.disk.api._DiskImage._device_for_path', proc_mounts) disk_api.teardown_container('/mnt/loop/nopart') mock_loopremove.assert_has_calls([mock.call('/dev/loop0')]) mock_loopremove.reset_mock() mock_umount.assert_has_calls([mock.call('/dev/loop0')]) mock_umount.reset_mock() disk_api.teardown_container('/mnt/loop/part') mock_loopremove.assert_has_calls([mock.call('/dev/loop0')]) mock_loopremove.reset_mock() mock_umount.assert_has_calls([mock.call('/dev/mapper/loop0p1')]) mock_umount.reset_mock() mock_remove_maps.assert_has_calls([mock.call('/dev/loop0')]) mock_remove_maps.reset_mock() disk_api.teardown_container('/mnt/nbd/nopart') mock_nbd_disconnect.assert_has_calls([mock.call('/dev/nbd15')]) mock_umount.assert_has_calls([mock.call('/dev/nbd15')]) mock_blockdev_flush.assert_has_calls([mock.call('/dev/nbd15')]) mock_nbd_disconnect.reset_mock() mock_umount.reset_mock() mock_blockdev_flush.reset_mock() disk_api.teardown_container('/mnt/nbd/part') mock_nbd_disconnect.assert_has_calls([mock.call('/dev/nbd15')]) mock_umount.assert_has_calls([mock.call('/dev/mapper/nbd15p1')]) mock_blockdev_flush.assert_has_calls([mock.call('/dev/nbd15')]) mock_nbd_disconnect.reset_mock() mock_umount.reset_mock() mock_remove_maps.assert_has_calls([mock.call('/dev/nbd15')]) mock_remove_maps.reset_mock() mock_blockdev_flush.reset_mock() # NOTE(thomasem): Not adding any commands in this case, because we're # not expecting an additional umount for LocalBlockImages. This is to # assert that no additional commands are run in this case. disk_api.teardown_container('/dev/volume-group/uuid_disk') mock_umount.assert_not_called()
def test_lxc_teardown_container_with_namespace_cleaned(self): def proc_mounts(self, mount_point): return None self.stubs.Set(os.path, 'exists', lambda _: True) self.stubs.Set(disk_api._DiskImage, '_device_for_path', proc_mounts) expected_commands = [] disk_api.teardown_container('/mnt/loop/nopart', '/dev/loop0') expected_commands += [ ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/loop/part', '/dev/loop0') expected_commands += [ ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/nbd/nopart', '/dev/nbd15') expected_commands += [ ('qemu-nbd', '-d', '/dev/nbd15'), ] disk_api.teardown_container('/mnt/nbd/part', '/dev/nbd15') expected_commands += [ ('qemu-nbd', '-d', '/dev/nbd15'), ] self.assertEqual(self.executes, expected_commands)
def test_lxc_teardown_container_with_namespace_cleaned(self): def proc_mounts(self, mount_point): return None self.stubs.Set(os.path, 'exists', lambda _: True) self.stubs.Set(disk_api._DiskImage, '_device_for_path', proc_mounts) expected_commands = [] disk_api.teardown_container('/mnt/loop/nopart', '/dev/loop0') expected_commands += [ ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/loop/part', '/dev/loop0') expected_commands += [ ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/nbd/nopart', '/dev/nbd15') expected_commands += [ ('qemu-nbd', '-d', '/dev/nbd15'), ] disk_api.teardown_container('/mnt/nbd/part', '/dev/nbd15') expected_commands += [ ('qemu-nbd', '-d', '/dev/nbd15'), ] self.assertEqual(self.executes, expected_commands)
def test_lxc_teardown_container(self): def proc_mounts(mount_point): mount_points = { '/mnt/loop/nopart': '/dev/loop0', '/mnt/loop/part': '/dev/mapper/loop0p1', '/mnt/nbd/nopart': '/dev/nbd15', '/mnt/nbd/part': '/dev/mapper/nbd15p1', } return mount_points[mount_point] self.stub_out('os.path.exists', lambda _: True) self.stub_out('nova.virt.disk.api._DiskImage._device_for_path', proc_mounts) expected_commands = [] disk_api.teardown_container('/mnt/loop/nopart') expected_commands += [ ('umount', '/dev/loop0'), ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/loop/part') expected_commands += [ ('umount', '/dev/mapper/loop0p1'), ('kpartx', '-d', '/dev/loop0'), ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/nbd/nopart') expected_commands += [ ('blockdev', '--flushbufs', '/dev/nbd15'), ('umount', '/dev/nbd15'), ('qemu-nbd', '-d', '/dev/nbd15'), ] disk_api.teardown_container('/mnt/nbd/part') expected_commands += [ ('blockdev', '--flushbufs', '/dev/nbd15'), ('umount', '/dev/mapper/nbd15p1'), ('kpartx', '-d', '/dev/nbd15'), ('qemu-nbd', '-d', '/dev/nbd15'), ] # NOTE(thomasem): Not adding any commands in this case, because we're # not expecting an additional umount for LocalBlockImages. This is to # assert that no additional commands are run in this case. disk_api.teardown_container('/dev/volume-group/uuid_disk') self.assertEqual(self.executes, expected_commands)
def test_lxc_teardown_container(self): def proc_mounts(self, mount_point): mount_points = { "/mnt/loop/nopart": "/dev/loop0", "/mnt/loop/part": "/dev/mapper/loop0p1", "/mnt/nbd/nopart": "/dev/nbd15", "/mnt/nbd/part": "/dev/mapper/nbd15p1", } return mount_points[mount_point] self.stubs.Set(os.path, "exists", lambda _: True) self.stubs.Set(disk_api._DiskImage, "_device_for_path", proc_mounts) expected_commands = [] disk_api.teardown_container("/mnt/loop/nopart") expected_commands += [("umount", "/dev/loop0"), ("losetup", "--detach", "/dev/loop0")] disk_api.teardown_container("/mnt/loop/part") expected_commands += [ ("umount", "/dev/mapper/loop0p1"), ("kpartx", "-d", "/dev/loop0"), ("losetup", "--detach", "/dev/loop0"), ] disk_api.teardown_container("/mnt/nbd/nopart") expected_commands += [("umount", "/dev/nbd15"), ("qemu-nbd", "-d", "/dev/nbd15")] disk_api.teardown_container("/mnt/nbd/part") expected_commands += [ ("umount", "/dev/mapper/nbd15p1"), ("kpartx", "-d", "/dev/nbd15"), ("qemu-nbd", "-d", "/dev/nbd15"), ] self.assertEqual(self.executes, expected_commands)
def test_lxc_teardown_container(self): def proc_mounts(self, mount_point): mount_points = { '/mnt/loop/nopart': '/dev/loop0', '/mnt/loop/part': '/dev/mapper/loop0p1', '/mnt/nbd/nopart': '/dev/nbd15', '/mnt/nbd/part': '/dev/mapper/nbd15p1', } return mount_points[mount_point] self.stubs.Set(os.path, 'exists', lambda _: True) self.stubs.Set(disk_api._DiskImage, '_device_for_path', proc_mounts) expected_commands = [] disk_api.teardown_container('/mnt/loop/nopart') expected_commands += [ ('umount', '/dev/loop0'), ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/loop/part') expected_commands += [ ('umount', '/dev/mapper/loop0p1'), ('kpartx', '-d', '/dev/loop0'), ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/nbd/nopart') expected_commands += [ ('blockdev', '--flushbufs', '/dev/nbd15'), ('umount', '/dev/nbd15'), ('qemu-nbd', '-d', '/dev/nbd15'), ] disk_api.teardown_container('/mnt/nbd/part') expected_commands += [ ('blockdev', '--flushbufs', '/dev/nbd15'), ('umount', '/dev/mapper/nbd15p1'), ('kpartx', '-d', '/dev/nbd15'), ('qemu-nbd', '-d', '/dev/nbd15'), ] self.assertEqual(self.executes, expected_commands)
def test_lxc_teardown_container(self): def proc_mounts(self, mount_point): mount_points = { '/mnt/loop/nopart': '/dev/loop0', '/mnt/loop/part': '/dev/mapper/loop0p1', '/mnt/nbd/nopart': '/dev/nbd15', '/mnt/nbd/part': '/dev/mapper/nbd15p1', } return mount_points[mount_point] self.stubs.Set(os.path, 'exists', lambda _: True) self.stubs.Set(disk_api._DiskImage, '_device_for_path', proc_mounts) expected_commands = [] disk_api.teardown_container('/mnt/loop/nopart') expected_commands += [ ('umount', '/dev/loop0'), ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/loop/part') expected_commands += [ ('umount', '/dev/mapper/loop0p1'), ('kpartx', '-d', '/dev/loop0'), ('losetup', '--detach', '/dev/loop0'), ] disk_api.teardown_container('/mnt/nbd/nopart') expected_commands += [ ('blockdev', '--flushbufs', '/dev/nbd15'), ('umount', '/dev/nbd15'), ('qemu-nbd', '-d', '/dev/nbd15'), ] disk_api.teardown_container('/mnt/nbd/part') expected_commands += [ ('blockdev', '--flushbufs', '/dev/nbd15'), ('umount', '/dev/mapper/nbd15p1'), ('kpartx', '-d', '/dev/nbd15'), ('qemu-nbd', '-d', '/dev/nbd15'), ] self.assertEqual(self.executes, expected_commands)
def test_lxc_teardown_container_with_namespace_cleaned( self, mock_nbd_disconnect, mock_loopremove, mock_device_for_path, mock_exists): disk_api.teardown_container('/mnt/loop/nopart', '/dev/loop0') mock_loopremove.assert_has_calls([mock.call('/dev/loop0')]) mock_loopremove.reset_mock() disk_api.teardown_container('/mnt/loop/part', '/dev/loop0') mock_loopremove.assert_has_calls([mock.call('/dev/loop0')]) mock_loopremove.reset_mock() disk_api.teardown_container('/mnt/nbd/nopart', '/dev/nbd15') mock_nbd_disconnect.assert_has_calls([mock.call('/dev/nbd15')]) mock_nbd_disconnect.reset_mock() disk_api.teardown_container('/mnt/nbd/part', '/dev/nbd15') mock_nbd_disconnect.assert_has_calls([mock.call('/dev/nbd15')]) mock_nbd_disconnect.reset_mock()
def test_lxc_teardown_container_with_namespace_cleaned( self, mock_nbd_disconnect, mock_loopremove, mock_device_for_path, mock_exists): disk_api.teardown_container('/mnt/loop/nopart', '/dev/loop0') mock_loopremove.assert_has_calls([mock.call('/dev/loop0')]) mock_loopremove.reset_mock() disk_api.teardown_container('/mnt/loop/part', '/dev/loop0') mock_loopremove.assert_has_calls([mock.call('/dev/loop0')]) mock_loopremove.reset_mock() disk_api.teardown_container('/mnt/nbd/nopart', '/dev/nbd15') mock_nbd_disconnect.assert_has_calls([mock.call('/dev/nbd15')]) mock_nbd_disconnect.reset_mock() disk_api.teardown_container('/mnt/nbd/part', '/dev/nbd15') mock_nbd_disconnect.assert_has_calls([mock.call('/dev/nbd15')]) mock_nbd_disconnect.reset_mock()
def test_lxc_teardown_container_with_namespace_cleaned(self): def proc_mounts(self, mount_point): return None self.stubs.Set(os.path, "exists", lambda _: True) self.stubs.Set(disk_api._DiskImage, "_device_for_path", proc_mounts) expected_commands = [] disk_api.teardown_container("/mnt/loop/nopart", "/dev/loop0") expected_commands += [("losetup", "--detach", "/dev/loop0")] disk_api.teardown_container("/mnt/loop/part", "/dev/loop0") expected_commands += [("losetup", "--detach", "/dev/loop0")] disk_api.teardown_container("/mnt/nbd/nopart", "/dev/nbd15") expected_commands += [("qemu-nbd", "-d", "/dev/nbd15")] disk_api.teardown_container("/mnt/nbd/part", "/dev/nbd15") expected_commands += [("qemu-nbd", "-d", "/dev/nbd15")] self.assertEqual(self.executes, expected_commands)