Esempio n. 1
0
    def test_list_multipath(self):
        #
        # multipath data partition
        #
        if platform.system() == "FreeBSD":
            return

        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        disk = "Xda"
        partition = "Xda1"

        def get_partition_type(dev):
            return main.PTYPE['mpath']['osd']['ready']
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=get_partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{
                           'dmcrypt': {},
                           'fs_type': None,
                           'is_partition': True,
                           'mount': None,
                           'multipath': True,
                           'path': '/dev/' + partition,
                           'ptype': main.PTYPE['mpath']['osd']['ready'],
                           'state': 'unprepared',
                           'type': 'data',
                           'uuid': partition_uuid,
                       }]}]
            assert expect == main.list_devices()
        #
        # multipath journal partition
        #
        journal_partition_uuid = "2cc40457-259e-4542-b029-785c7cc37871"

        def get_partition_type(dev):
            return main.PTYPE['mpath']['journal']['ready']
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_partition_uuid=lambda dev: journal_partition_uuid,
                get_partition_type=get_partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{
                           'dmcrypt': {},
                           'is_partition': True,
                           'multipath': True,
                           'path': '/dev/' + partition,
                           'ptype': main.PTYPE['mpath']['journal']['ready'],
                           'type': 'journal',
                           'uuid': journal_partition_uuid,
                       }]}]
            assert expect == main.list_devices()
Esempio n. 2
0
    def test_list_multipath(self):
        #
        # multipath data partition
        #
        if platform.system() == "FreeBSD":
            return

        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        disk = "Xda"
        partition = "Xda1"

        def get_partition_type(dev):
            return main.PTYPE['mpath']['osd']['ready']
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=get_partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{
                           'dmcrypt': {},
                           'fs_type': None,
                           'is_partition': True,
                           'mount': None,
                           'multipath': True,
                           'path': '/dev/' + partition,
                           'ptype': main.PTYPE['mpath']['osd']['ready'],
                           'state': 'unprepared',
                           'type': 'data',
                           'uuid': partition_uuid,
                       }]}]
            assert expect == main.list_devices()
        #
        # multipath journal partition
        #
        journal_partition_uuid = "2cc40457-259e-4542-b029-785c7cc37871"

        def get_partition_type(dev):
            return main.PTYPE['mpath']['journal']['ready']
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_partition_uuid=lambda dev: journal_partition_uuid,
                get_partition_type=get_partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{
                           'dmcrypt': {},
                           'is_partition': True,
                           'multipath': True,
                           'path': '/dev/' + partition,
                           'ptype': main.PTYPE['mpath']['journal']['ready'],
                           'type': 'journal',
                           'uuid': journal_partition_uuid,
                       }]}]
            assert expect == main.list_devices()
Esempio n. 3
0
    def test_list_data(self):
        #
        # a data partition that fails to mount is silently
        # ignored
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        disk = "Xda"
        partition = "Xda1"
        fs_type = "ext4"

        def get_partition_type(dev):
            return main.PTYPE['regular']['osd']['ready']
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=get_partition_type,
                get_dev_fs=lambda dev: fs_type,
                mount=fail_to_mount,
                unmount=DEFAULT,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{
                           'dmcrypt': {},
                           'fs_type': fs_type,
                           'is_partition': True,
                           'mount': None,
                           'path': '/dev/' + partition,
                           'ptype': main.PTYPE['regular']['osd']['ready'],
                           'state': 'unprepared',
                           'type': 'data',
                           'uuid': partition_uuid,
                       }]}]
            assert expect == main.list_devices()
Esempio n. 4
0
    def test_list_data(self):
        #
        # a data partition that fails to mount is silently
        # ignored
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        disk = "Xda"
        partition = "Xda1"
        fs_type = "ext4"

        def get_partition_type(dev):
            return main.PTYPE['regular']['osd']['ready']
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=get_partition_type,
                get_dev_fs=lambda dev: fs_type,
                mount=fail_to_mount,
                unmount=DEFAULT,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{
                           'dmcrypt': {},
                           'fs_type': fs_type,
                           'is_partition': True,
                           'mount': None,
                           'path': '/dev/' + partition,
                           'ptype': main.PTYPE['regular']['osd']['ready'],
                           'state': 'unprepared',
                           'type': 'data',
                           'uuid': partition_uuid,
                       }]}]
            assert expect == main.list_devices()
Esempio n. 5
0
    def test_list_other(self):
        #
        # not swap, unknown fs type, not mounted, with uuid
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        partition_type = "e51adfb9-e9fd-4718-9fc1-7a0cb03ea3f4"
        disk = "Xda"
        partition = "Xda1"
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=lambda dev: partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{'dmcrypt': {},
                                       'is_partition': True,
                                       'path': '/dev/' + partition,
                                       'ptype': partition_type,
                                       'type': 'other',
                                       'uuid': partition_uuid}]}]
            assert expect == main.list_devices()
        #
        # not swap, mounted, ext4 fs type, with uuid
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        partition_type = "e51adfb9-e9fd-4718-9fc1-7a0cb03ea3f4"
        disk = "Xda"
        partition = "Xda1"
        mount_path = '/mount/path'
        fs_type = 'ext4'
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_dev_fs=lambda dev: fs_type,
                is_mounted=lambda dev: mount_path,
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=lambda dev: partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{
                           'dmcrypt': {},
                           'is_partition': True,
                           'mount': mount_path,
                           'fs_type': fs_type,
                           'path': '/dev/' + partition,
                           'ptype': partition_type,
                           'type': 'other',
                           'uuid': partition_uuid,
                       }]}]
            assert expect == main.list_devices()

        #
        # swap, with uuid
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        partition_type = "e51adfb9-e9fd-4718-9fc1-7a0cb03ea3f4"
        disk = "Xda"
        partition = "Xda1"
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                is_swap=lambda dev: True,
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=lambda dev: partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{'dmcrypt': {},
                                       'is_partition': True,
                                       'path': '/dev/' + partition,
                                       'ptype': partition_type,
                                       'type': 'swap',
                                       'uuid': partition_uuid}]}]
            assert expect == main.list_devices()

        #
        # whole disk
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        disk = "Xda"
        partition = "Xda1"
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: []},
                is_partition=lambda dev: False,
        ):
            expect = [{'path': '/dev/' + disk,
                       'dmcrypt': {},
                       'is_partition': False,
                       'ptype': 'unknown',
                       'type': 'other'}]
            assert expect == main.list_devices()
Esempio n. 6
0
    def list(self, data_ptype, space_ptype):
        #
        # a single disk has a data partition and a journal
        # partition and the osd is active
        #
        name = main.Ptype.space_ptype_to_name(space_ptype)
        data_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        disk = "Xda"
        data = "Xda1"
        data_holder = "dm-dummy"
        space = "Xda2"
        space_holder = "dm-dummy"
        mount_path = '/mount/path'
        fs_type = 'ext4'
        space_uuid = "7ad5e65a-0ca5-40e4-a896-62a74ca61c55"
        ceph_fsid = "60a2ef70-d99b-4b9b-a83c-8a86e5e60091"
        osd_id = '1234'

        def get_oneliner(path, what):
            if '_uuid' in what:
                if what == name + '_uuid':
                    return space_uuid
                else:
                    return None
            elif what == 'ceph_fsid':
                return ceph_fsid
            elif what == 'whoami':
                return osd_id
            else:
                raise Exception('unknown ' + what)

        def get_partition_uuid(dev):
            if dev == '/dev/' + data:
                return data_uuid
            elif dev == '/dev/' + space:
                return space_uuid
            else:
                raise Exception('unknown ' + dev)

        def get_partition_type(dev):
            if (dev == '/dev/' + data or
                    dev == '/dev/' + data_holder):
                return data_ptype
            elif (dev == '/dev/' + space or
                    dev == '/dev/' + space_holder):
                return space_ptype
            else:
                raise Exception('unknown ' + dev)
        cluster = 'ceph'
        if data_ptype == main.PTYPE['regular']['osd']['ready']:
            data_dmcrypt = {}
        elif data_ptype == main.PTYPE['plain']['osd']['ready']:
            data_dmcrypt = {
                'type': 'plain',
                'holders': [data_holder],
            }
        elif data_ptype == main.PTYPE['luks']['osd']['ready']:
            data_dmcrypt = {
                'type': 'LUKS',
                'holders': [data_holder],
            }
        else:
            raise Exception('unknown ' + data_ptype)

        if space_ptype == main.PTYPE['regular'][name]['ready']:
            space_dmcrypt = {}
        elif space_ptype == main.PTYPE['plain'][name]['ready']:
            space_dmcrypt = {
                'type': 'plain',
                'holders': [space_holder],
            }
        elif space_ptype == main.PTYPE['luks'][name]['ready']:
            space_dmcrypt = {
                'type': 'LUKS',
                'holders': [space_holder],
            }
        else:
            raise Exception('unknown ' + space_ptype)

        if data_dmcrypt:
            def is_held(dev):
                if dev == '/dev/' + data:
                    return [data_holder]
                elif dev == '/dev/' + space:
                    return [space_holder]
                else:
                    raise Exception('unknown ' + dev)
        else:
            def is_held(dev):
                return []

        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [data, space]},
                get_dev_fs=lambda dev: fs_type,
                is_mounted=lambda dev: mount_path,
                get_partition_uuid=get_partition_uuid,
                get_partition_type=get_partition_type,
                find_cluster_by_uuid=lambda ceph_fsid: cluster,
                is_partition=lambda dev: True,
                mount=DEFAULT,
                unmount=DEFAULT,
                get_oneliner=get_oneliner,
                is_held=is_held,
        ):
            expect = [{'path': '/dev/' + disk,
                       'partitions': [{
                           'ceph_fsid': ceph_fsid,
                           'cluster': cluster,
                           'dmcrypt': data_dmcrypt,
                           'fs_type': fs_type,
                           'is_partition': True,
                           name + '_dev': '/dev/' + space,
                           name + '_uuid': space_uuid,
                           'mount': mount_path,
                           'path': '/dev/' + data,
                           'ptype': data_ptype,
                           'state': 'active',
                           'type': 'data',
                           'whoami': osd_id,
                           'uuid': data_uuid,
                       }, {
                           'dmcrypt': space_dmcrypt,
                           'is_partition': True,
                           name + '_for': '/dev/' + data,
                           'path': '/dev/' + space,
                           'ptype': space_ptype,
                           'type': name,
                           'uuid': space_uuid,
                       }]}]
            assert expect == main.list_devices()
Esempio n. 7
0
 def test_list_dmcrypt_data(self):
     partition_type2type = {
         main.PTYPE['plain']['osd']['ready']: 'plain',
         main.PTYPE['luks']['osd']['ready']: 'LUKS',
     }
     for (partition_type, type) in partition_type2type.iteritems():
         #
         # dmcrypt data partition with one holder
         #
         partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
         disk = "Xda"
         partition = "Xda1"
         holders = ["dm-dummy"]
         with patch.multiple(
                 main,
                 is_held=lambda dev: holders,
                 list_all_partitions=lambda: {disk: [partition]},
                 get_partition_uuid=lambda dev: partition_uuid,
                 get_partition_type=lambda dev: partition_type,
                 is_partition=lambda dev: True,
         ):
             expect = [{'path': '/dev/' + disk,
                        'partitions': [{
                            'dmcrypt': {
                                'holders': holders,
                                'type': type,
                            },
                            'fs_type': None,
                            'is_partition': True,
                            'mount': None,
                            'path': '/dev/' + partition,
                            'ptype': partition_type,
                            'state': 'unprepared',
                            'type': 'data',
                            'uuid': partition_uuid,
                        }]}]
             assert expect == main.list_devices()
         #
         # dmcrypt data partition with two holders
         #
         partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
         disk = "Xda"
         partition = "Xda1"
         holders = ["dm-dummy", "dm-dummy1"]
         with patch.multiple(
                 main,
                 is_held=lambda dev: holders,
                 list_all_partitions=lambda: {disk: [partition]},
                 get_partition_uuid=lambda dev: partition_uuid,
                 get_partition_type=lambda dev: partition_type,
                 is_partition=lambda dev: True,
         ):
             expect = [{'path': '/dev/' + disk,
                        'partitions': [{
                            'dmcrypt': {
                                'holders': holders,
                                'type': type,
                            },
                            'is_partition': True,
                            'path': '/dev/' + partition,
                            'ptype': partition_type,
                            'type': 'data',
                            'uuid': partition_uuid,
                        }]}]
             assert expect == main.list_devices()
Esempio n. 8
0
    def test_list_other(self):
        #
        # not swap, unknown fs type, not mounted, with uuid
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        partition_type = "e51adfb9-e9fd-4718-9fc1-7a0cb03ea3f4"
        disk = "Xda"
        partition = "Xda1"
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=lambda dev: partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{
                'path':
                '/dev/' + disk,
                'partitions': [{
                    'dmcrypt': {},
                    'is_partition': True,
                    'path': '/dev/' + partition,
                    'ptype': partition_type,
                    'type': 'other',
                    'uuid': partition_uuid
                }]
            }]
            assert expect == main.list_devices()
        #
        # not swap, mounted, ext4 fs type, with uuid
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        partition_type = "e51adfb9-e9fd-4718-9fc1-7a0cb03ea3f4"
        disk = "Xda"
        partition = "Xda1"
        mount_path = '/mount/path'
        fs_type = 'ext4'
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                get_dev_fs=lambda dev: fs_type,
                is_mounted=lambda dev: mount_path,
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=lambda dev: partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{
                'path':
                '/dev/' + disk,
                'partitions': [{
                    'dmcrypt': {},
                    'is_partition': True,
                    'mount': mount_path,
                    'fs_type': fs_type,
                    'path': '/dev/' + partition,
                    'ptype': partition_type,
                    'type': 'other',
                    'uuid': partition_uuid,
                }]
            }]
            assert expect == main.list_devices()

        #
        # swap, with uuid
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        partition_type = "e51adfb9-e9fd-4718-9fc1-7a0cb03ea3f4"
        disk = "Xda"
        partition = "Xda1"
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [partition]},
                is_swap=lambda dev: True,
                get_partition_uuid=lambda dev: partition_uuid,
                get_partition_type=lambda dev: partition_type,
                is_partition=lambda dev: True,
        ):
            expect = [{
                'path':
                '/dev/' + disk,
                'partitions': [{
                    'dmcrypt': {},
                    'is_partition': True,
                    'path': '/dev/' + partition,
                    'ptype': partition_type,
                    'type': 'swap',
                    'uuid': partition_uuid
                }]
            }]
            assert expect == main.list_devices()

        #
        # whole disk
        #
        partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        disk = "Xda"
        partition = "Xda1"
        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: []},
                is_partition=lambda dev: False,
        ):
            expect = [{
                'path': '/dev/' + disk,
                'dmcrypt': {},
                'is_partition': False,
                'ptype': 'unknown',
                'type': 'other'
            }]
            assert expect == main.list_devices()
Esempio n. 9
0
    def list(self, data_ptype, space_ptype):
        #
        # a single disk has a data partition and a journal
        # partition and the osd is active
        #
        name = main.Ptype.space_ptype_to_name(space_ptype)
        data_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
        disk = "Xda"
        data = "Xda1"
        data_holder = "dm-dummy"
        space = "Xda2"
        space_holder = "dm-dummy"
        mount_path = '/mount/path'
        fs_type = 'ext4'
        space_uuid = "7ad5e65a-0ca5-40e4-a896-62a74ca61c55"
        ceph_fsid = "60a2ef70-d99b-4b9b-a83c-8a86e5e60091"
        osd_id = '1234'

        def get_oneliner(path, what):
            if '_uuid' in what:
                if what == name + '_uuid':
                    return space_uuid
                else:
                    return None
            elif what == 'ceph_fsid':
                return ceph_fsid
            elif what == 'whoami':
                return osd_id
            else:
                raise Exception('unknown ' + what)

        def get_partition_uuid(dev):
            if dev == '/dev/' + data:
                return data_uuid
            elif dev == '/dev/' + space:
                return space_uuid
            else:
                raise Exception('unknown ' + dev)

        def get_partition_type(dev):
            if (dev == '/dev/' + data or dev == '/dev/' + data_holder):
                return data_ptype
            elif (dev == '/dev/' + space or dev == '/dev/' + space_holder):
                return space_ptype
            else:
                raise Exception('unknown ' + dev)

        cluster = 'ceph'
        if data_ptype == main.PTYPE['regular']['osd']['ready']:
            data_dmcrypt = {}
        elif data_ptype == main.PTYPE['plain']['osd']['ready']:
            data_dmcrypt = {
                'type': 'plain',
                'holders': [data_holder],
            }
        elif data_ptype == main.PTYPE['luks']['osd']['ready']:
            data_dmcrypt = {
                'type': 'LUKS',
                'holders': [data_holder],
            }
        else:
            raise Exception('unknown ' + data_ptype)

        if space_ptype == main.PTYPE['regular'][name]['ready']:
            space_dmcrypt = {}
        elif space_ptype == main.PTYPE['plain'][name]['ready']:
            space_dmcrypt = {
                'type': 'plain',
                'holders': [space_holder],
            }
        elif space_ptype == main.PTYPE['luks'][name]['ready']:
            space_dmcrypt = {
                'type': 'LUKS',
                'holders': [space_holder],
            }
        else:
            raise Exception('unknown ' + space_ptype)

        if data_dmcrypt:

            def is_held(dev):
                if dev == '/dev/' + data:
                    return [data_holder]
                elif dev == '/dev/' + space:
                    return [space_holder]
                else:
                    raise Exception('unknown ' + dev)
        else:

            def is_held(dev):
                return []

        with patch.multiple(
                main,
                list_all_partitions=lambda: {disk: [data, space]},
                get_dev_fs=lambda dev: fs_type,
                is_mounted=lambda dev: mount_path,
                get_partition_uuid=get_partition_uuid,
                get_partition_type=get_partition_type,
                find_cluster_by_uuid=lambda ceph_fsid: cluster,
                is_partition=lambda dev: True,
                mount=DEFAULT,
                unmount=DEFAULT,
                get_oneliner=get_oneliner,
                is_held=is_held,
        ):
            expect = [{
                'path':
                '/dev/' + disk,
                'partitions': [{
                    'ceph_fsid': ceph_fsid,
                    'cluster': cluster,
                    'dmcrypt': data_dmcrypt,
                    'fs_type': fs_type,
                    'is_partition': True,
                    name + '_dev': '/dev/' + space,
                    name + '_uuid': space_uuid,
                    'mount': mount_path,
                    'path': '/dev/' + data,
                    'ptype': data_ptype,
                    'state': 'active',
                    'type': 'data',
                    'whoami': osd_id,
                    'uuid': data_uuid,
                }, {
                    'dmcrypt': space_dmcrypt,
                    'is_partition': True,
                    name + '_for': '/dev/' + data,
                    'path': '/dev/' + space,
                    'ptype': space_ptype,
                    'type': name,
                    'uuid': space_uuid,
                }]
            }]
            assert expect == main.list_devices()
Esempio n. 10
0
 def test_list_dmcrypt_data(self):
     partition_type2type = {
         main.PTYPE['plain']['osd']['ready']: 'plain',
         main.PTYPE['luks']['osd']['ready']: 'LUKS',
     }
     for (partition_type, type) in partition_type2type.iteritems():
         #
         # dmcrypt data partition with one holder
         #
         partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
         disk = "Xda"
         partition = "Xda1"
         holders = ["dm-dummy"]
         with patch.multiple(
                 main,
                 is_held=lambda dev: holders,
                 list_all_partitions=lambda: {disk: [partition]},
                 get_partition_uuid=lambda dev: partition_uuid,
                 get_partition_type=lambda dev: partition_type,
                 is_partition=lambda dev: True,
         ):
             expect = [{
                 'path':
                 '/dev/' + disk,
                 'partitions': [{
                     'dmcrypt': {
                         'holders': holders,
                         'type': type,
                     },
                     'fs_type': None,
                     'is_partition': True,
                     'mount': None,
                     'path': '/dev/' + partition,
                     'ptype': partition_type,
                     'state': 'unprepared',
                     'type': 'data',
                     'uuid': partition_uuid,
                 }]
             }]
             assert expect == main.list_devices()
         #
         # dmcrypt data partition with two holders
         #
         partition_uuid = "56244cf5-83ef-4984-888a-2d8b8e0e04b2"
         disk = "Xda"
         partition = "Xda1"
         holders = ["dm-dummy", "dm-dummy1"]
         with patch.multiple(
                 main,
                 is_held=lambda dev: holders,
                 list_all_partitions=lambda: {disk: [partition]},
                 get_partition_uuid=lambda dev: partition_uuid,
                 get_partition_type=lambda dev: partition_type,
                 is_partition=lambda dev: True,
         ):
             expect = [{
                 'path':
                 '/dev/' + disk,
                 'partitions': [{
                     'dmcrypt': {
                         'holders': holders,
                         'type': type,
                     },
                     'is_partition': True,
                     'path': '/dev/' + partition,
                     'ptype': partition_type,
                     'type': 'data',
                     'uuid': partition_uuid,
                 }]
             }]
             assert expect == main.list_devices()