]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Merge pull request #54629 from guits/wip-63599-reef
authorGuillaume Abrioux <gabrioux@ibm.com>
Wed, 24 Jan 2024 15:28:41 +0000 (16:28 +0100)
committerGitHub <noreply@github.com>
Wed, 24 Jan 2024 15:28:41 +0000 (16:28 +0100)
reef: ceph-volume: fixes fallback to stat in is_device and is_partition

1  2 
src/ceph-volume/ceph_volume/tests/util/test_device.py
src/ceph-volume/ceph_volume/tests/util/test_disk.py
src/ceph-volume/ceph_volume/util/disk.py

index ce1f9466fd56782360314938b7b055bf914e50a2,94325b475ef0dc3a8f596b685b24b45773f792da..b287530dc17fcf8a91bb26fe14229bd8d2d38974
@@@ -1,38 -1,13 +1,43 @@@
  import os
  import pytest
  from ceph_volume.util import disk
 -from mock.mock import patch
 +from mock.mock import patch, MagicMock
 +
 +
 +class TestFunctions:
 +    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=False))
 +    def test_is_device_path_does_not_exist(self):
 +        assert not disk.is_device('/dev/foo')
 +
 +    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
 +    def test_is_device_dev_doesnt_startswith_dev(self):
 +        assert not disk.is_device('/foo')
 +
 +    @patch('ceph_volume.util.disk.allow_loop_devices', MagicMock(return_value=False))
 +    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
 +    def test_is_device_loop_not_allowed(self):
 +        assert not disk.is_device('/dev/loop123')
 +
 +    @patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo', 'TYPE': 'disk'}))
 +    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
 +    def test_is_device_type_disk(self):
 +        assert disk.is_device('/dev/foo')
 +
 +    @patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo', 'TYPE': 'mpath'}))
 +    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
 +    def test_is_device_type_mpath(self):
 +        assert disk.is_device('/dev/foo')
 +
 +    @patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo1', 'TYPE': 'part'}))
 +    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
 +    def test_is_device_type_part(self):
 +        assert not disk.is_device('/dev/foo1')
  
+     @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
+     @patch('ceph_volume.util.disk.get_partitions', MagicMock(return_value={"sda1": "sda"}))
+     def test_is_partition(self):
+         assert disk.is_partition('sda1')
  
  class TestLsblkParser(object):
  
index 05db875fee409c6af4d3b11503870f7afd544845,c1d1360765faf046313226d18c5f0d6431cbfb3d..7148612f3297665dd7a6c8170b19a7bb58776eea
@@@ -359,15 -359,11 +359,15 @@@ def is_device(dev)
          if not allow_loop_devices():
              return False
  
 +    TYPE = lsblk(dev).get('TYPE')
 +    if TYPE:
 +        return TYPE in ['disk', 'mpath']
 +
      # fallback to stat
-     return _stat_is_device(os.lstat(dev).st_mode)
+     return _stat_is_device(os.lstat(dev).st_mode) and not is_partition(dev)
  
  
- def is_partition(dev):
+ def is_partition(dev: str) -> bool:
      """
      Boolean to determine if a given device is a partition, like /dev/sda1
      """