Skip to content

Commit

Permalink
tests: Add a test case with multiple devices with the same name
Browse files Browse the repository at this point in the history
  • Loading branch information
vojtechtrefny committed Dec 5, 2023
1 parent 4170889 commit 3e23729
Showing 1 changed file with 142 additions and 0 deletions.
142 changes: 142 additions & 0 deletions tests/storage_tests/devices_test/misc_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
import os
import unittest

try:
from unittest.mock import patch
except ImportError:
from mock import patch

from ..storagetestcase import StorageTestCase

import blivet
from blivet.devices.btrfs import BTRFSVolumeDevice


class DeviceIDTestCase(StorageTestCase):

vgname = "blivetTestVG"

@classmethod
def setUpClass(cls):
unavailable_deps = BTRFSVolumeDevice.unavailable_type_dependencies()
if unavailable_deps:
dep_str = ", ".join([d.name for d in unavailable_deps])
raise unittest.SkipTest("some unavailable dependencies required for this test: %s" % dep_str)

def setUp(self):
super().setUp()

# allow automounting to get btrfs information
blivet.flags.flags.auto_dev_updates = True

disks = [os.path.basename(vdev) for vdev in self.vdevs]
self.storage = blivet.Blivet()
self.storage.exclusive_disks = disks
self.storage.reset()

# make sure only the targetcli disks are in the devicetree
for disk in self.storage.disks:
self.assertTrue(disk.path in self.vdevs)
self.assertIsNone(disk.format.type)
self.assertFalse(disk.children)

def _clean_up(self):
self.storage.reset()
for disk in self.storage.disks:
if disk.path not in self.vdevs:
raise RuntimeError("Disk %s found in devicetree but not in disks created for tests" % disk.name)
self.storage.recursive_remove(disk)

self.storage.do_it()

# reset back to default
blivet.flags.flags.auto_dev_updates = False

return super()._clean_up()

def test_same_name_devices(self):
""" Test that we can handle multiple devices with the same name
This test cases creates three devices named "test": two btrfs
volumes and one VG and checks that reset() and get_device_by_device_id()
work as expected.
"""

# BTRFS volume named "test"
disk = self.storage.devicetree.get_device_by_path(self.vdevs[0])
self.assertIsNotNone(disk)

self.storage.initialize_disk(disk)

part = self.storage.new_partition(size=blivet.size.Size("1 GiB"), fmt_type="btrfs",
parents=[disk])
self.storage.create_device(part)

blivet.partitioning.do_partitioning(self.storage)

vol = self.storage.new_btrfs(name="test", parents=[part])
btrfs1_uuid = vol.uuid
self.storage.create_device(vol)
self.storage.do_it()
self.storage.reset()

# second BTRFS volume also named "test"
disk = self.storage.devicetree.get_device_by_path(self.vdevs[1])
self.assertIsNotNone(disk)

self.storage.initialize_disk(disk)

part = self.storage.new_partition(size=blivet.size.Size("1 GiB"), fmt_type="btrfs",
parents=[disk])
self.storage.create_device(part)

blivet.partitioning.do_partitioning(self.storage)

# XXX we actually cannot create another device with the same name
with patch("blivet.devicetree.DeviceTree.names", []):
vol = self.storage.new_btrfs(name="test", parents=[part])
btrfs2_uuid = vol.uuid
self.storage.create_device(vol)
self.storage.do_it()
self.storage.reset()

# LVM VG named "test"
disk = self.storage.devicetree.get_device_by_path(self.vdevs[2])
self.assertIsNotNone(disk)

self.storage.initialize_disk(disk)

pv = self.storage.new_partition(size=blivet.size.Size("100 MiB"), fmt_type="lvmpv",
parents=[disk])
self.storage.create_device(pv)

blivet.partitioning.do_partitioning(self.storage)

# XXX we actually cannot create another device with the same name
with patch("blivet.devicetree.DeviceTree.names", []):
vg = self.storage.new_vg(name="test", parents=[pv])
self.storage.create_device(vg)
self.storage.do_it()
self.storage.reset()

# we should now have three devices named test
test_devs = [dev for dev in self.storage.devices if dev.name == "test"]
self.assertEqual(len(test_devs), 3)

vol1 = self.storage.devicetree.get_device_by_device_id("BTRFS-" + btrfs1_uuid)
self.assertIsNotNone(vol1)
self.assertEqual(vol1.type, "btrfs volume")
self.assertEqual(vol1.name, "test")
self.assertEqual(vol1.parents[0].path, self.vdevs[0] + "1")

vol2 = self.storage.devicetree.get_device_by_device_id("BTRFS-" + btrfs2_uuid)
self.assertIsNotNone(vol2)
self.assertEqual(vol2.type, "btrfs volume")
self.assertEqual(vol2.name, "test")
self.assertEqual(vol2.parents[0].path, self.vdevs[1] + "1")

vg = self.storage.devicetree.get_device_by_device_id("LVM-test")
self.assertIsNotNone(vg)
self.assertEqual(vg.type, "lvmvg")
self.assertEqual(vg.name, "test")
self.assertEqual(vg.parents[0].path, self.vdevs[2] + "1")

0 comments on commit 3e23729

Please sign in to comment.