def test_combination(self): # Add values here to test full combinations of specific filesystem types # The _ as key is the expected result _ = "use as key for the expected result" definitions = [ {_: "cramfs", "blkid": "cramfs", "magic": "Linux Compressed ROM File System data", "fsdescription": "???"}, {_: "exfat", "blkid": "exfat", "fsdescription": "NTFS / exFAT", "statfstype": "exFAT"}, {_: "ext", "blkid": "ext4", "fsdescription": "Linux (0x83)", "guid": "", "statfstype": "Ext2"}, {_: "fat", "blkid": "vfat", "magic": "FAT (12 bit)", "fsdescription": "DOS FAT12 (0x04)", "statfstype": "FAT12"}, {_: "iso", "blkid": "iso9660", "magic": ".. ISO 9660 ..", "statfstype": "ISO9660"}, {_: "minix", "blkid": "min ix", "magic": "Minix filesystem", "fsdescription": "???"}, {_: "ntfs", "blkid": "ntfs", "magic": ".. NTFS ..", "fsdescription": "NTFS / exFAT", "statfstype": "NTFS"}, {_: "squashfs", "blkid": "squashfs", "magic": "Squashfs filesystem", "fsdescription": "???"}, {_: "lvm", "guid": "79D3D6E6-07F5-C244-A23C-238F2A3DF928"}, {_: "raid", "fsdescription": "Linux (0x83)", "blkid": "linux_raid_member"}, {_: "volumesystem", "blkid": "dos", "fsdescription": "Logical Volume"}, {_: "volumesystem", "blkid": "dos", "fsdescription": "RAID Volume"}, {_: "volumesystem", "blkid": "dos", "magic": "DOS/MBR boot sector"}, {_: "volumesystem", "fsdescription": "BSD/386, 386BSD, NetBSD, FreeBSD (0xa5)", "blkid": "ufs"}, {_: "ufs", "fsdescription": "4.2BSD (0x07)", "blkid": "ufs"}, ] for definition in definitions: volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=definition.get("blkid")) volume._get_magic_type = mock.Mock(return_value=definition.get("magic")) volume.info = definition volume.determine_fs_type() self.assertEqual(FILE_SYSTEM_TYPES[definition[_]], volume.fstype)
def test_fstype_fallback(self): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume._get_fstype_from_parser('?ufs') volume.determine_fs_type() self.assertEqual(FILE_SYSTEM_TYPES["ufs"], volume.fstype)
def test_magic(self): # Add values here that are shown in the wild for file magic output # !! Always try to add it also to test_combination descriptions = { "Linux Compressed ROM File System data": "cramfs", "Linux rev 1.0 ext2 filesystem data": "ext", 'DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, ' 'root entries 512, sectors 100 (volumes <=32 MB) , Media descriptor 0xf8, ' 'sectors/FAT 1, sectors/track 32, heads 64, serial number 0x3cb7474b, ' 'label: "TEST ", FAT (12 bit)': "fat", "ISO 9660 CD-ROM filesystem data 'test'": "iso", "Minix filesystem, V1, 30 char names, 12800 zones": "minix", 'DOS/MBR boot sector, code offset 0x52+2, OEM-ID "NTFS ", sectors/cluster 8, ' 'Media descriptor 0xf8, sectors/track 0, dos < 4.0 BootSector (0x80), FAT (1Y bit ' 'by descriptor); NTFS, sectors 2048, $MFT start cluster 4, $MFTMirror start ' 'cluster 128, bytes/RecordSegment 2^(-1*246), clusters/index block 1, serial ' 'number 04e8742c12a96cecd; contains Microsoft Windows XP/VISTA bootloader BOOTMGR': "ntfs", "Squashfs filesystem, little endian, version 4.0": "squashfs", } for description, fstype in descriptions.items(): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=description) volume.determine_fs_type() self.assertEqual(FILE_SYSTEM_TYPES[fstype], volume.fstype)
def test_fsdescription(self): # Add names in here that are shown in the wild for output of mmls / gparted # !! Always try to add it also to test_combination descriptions = { # Names assigned by imagemounter "Logical Volume": "unknown", "LUKS Volume": "unknown", "BDE Volume": "unknown", "RAID Volume": "unknown", "VSS Store": "unknown", "NTFS / exFAT": "ntfs", # mmls, should use fallback "Linux (0x83)": "unknown", # should use unknown "4.2BSD": "ufs", "BSD/386, 386BSD, NetBSD, FreeBSD (0xa5)": "volumesystem", "DOS FAT16": "fat", } for description, fstype in descriptions.items(): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) self.fstype = "" # prevent fallback to unknown by default volume.info['fsdescription'] = description volume.determine_fs_type() self.assertEqual(FILE_SYSTEM_TYPES[fstype], volume.fstype)
def test_fstype_fallback(self): volume = Volume(disk=Disk(ImageParser(), "...")) volume.fstype = "?bsd" volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume.determine_fs_type() self.assertEqual("bsd", volume.fstype)
def test_guid(self): for description, fstype in FILE_SYSTEM_GUIDS.items(): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume.info['guid'] = description volume.determine_fs_type() self.assertEqual(fstype, volume.fstype)
def test_fstype_fallback_unknown(self): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume.info['fsdescription'] = "Linux (0x83)" # If something more specific is set, we use that volume.fstype = "?bsd" volume.determine_fs_type() self.assertEqual("bsd", volume.fstype) # Otherwise we fallback to unknown if Linux (0x83) is set volume.fstype = "" volume.determine_fs_type() self.assertEqual("unknown", volume.fstype)
def test_fstype_fallback_unknown(self): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume.info['fsdescription'] = "Linux (0x83)" # If something more specific is set, we use that volume._get_fstype_from_parser('?ufs') volume.determine_fs_type() self.assertEqual(FILE_SYSTEM_TYPES["ufs"], volume.fstype) # Otherwise we fallback to unknown if Linux (0x83) is set volume._get_fstype_from_parser('') volume.determine_fs_type() self.assertEqual(UnknownFileSystemType(), volume.fstype)
def test_guid(self): FILE_SYSTEM_GUIDS = { '2AE031AA-0F40-DB11-9590-000C2911D1B8': 'vmfs', #'8053279D-AD40-DB11-BF97-000C2911D1B8': 'vmkcore-diagnostics', #'6A898CC3-1DD2-11B2-99A6-080020736631': 'zfs-member', #'C38C896A-D21D-B211-99A6-080020736631': 'zfs-member', #'0FC63DAF-8483-4772-8E79-3D69D8477DE4': 'linux', 'E6D6D379-F507-44C2-A23C-238F2A3DF928': 'lvm', '79D3D6E6-07F5-C244-A23C-238F2A3DF928': 'lvm', 'CA7D7CCB-63ED-4C53-861C-1742536059CC': 'luks' } for description, fstype in FILE_SYSTEM_GUIDS.items(): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume.info['guid'] = description volume.determine_fs_type() self.assertEqual(FILE_SYSTEM_TYPES[fstype], volume.fstype)
def test_guid(self): FILE_SYSTEM_GUIDS = { '2AE031AA-0F40-DB11-9590-000C2911D1B8': 'vmfs', # '8053279D-AD40-DB11-BF97-000C2911D1B8': 'vmkcore-diagnostics', # '6A898CC3-1DD2-11B2-99A6-080020736631': 'zfs-member', # 'C38C896A-D21D-B211-99A6-080020736631': 'zfs-member', # '0FC63DAF-8483-4772-8E79-3D69D8477DE4': 'linux', 'E6D6D379-F507-44C2-A23C-238F2A3DF928': 'lvm', '79D3D6E6-07F5-C244-A23C-238F2A3DF928': 'lvm', 'CA7D7CCB-63ED-4C53-861C-1742536059CC': 'luks' } for description, fstype in FILE_SYSTEM_GUIDS.items(): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume.info['guid'] = description volume.determine_fs_type() self.assertEqual(FILE_SYSTEM_TYPES[fstype], volume.fstype)
def test_blkid(self): # Add values here that are shown in the wild for blkid # !! Always try to add it also to test_combination descriptions = { "cramfs": "cramfs", "ext4": "ext", "ext2": "ext", "vfat": "fat", "iso9660": "iso", "minix": "minix", "ntfs": "ntfs", "squashfs": "squashfs", "ufs": "ufs", "dos": "volumesystem", } for description, fstype in descriptions.items(): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=description) volume._get_magic_type = mock.Mock(return_value=None) volume.determine_fs_type() self.assertEqual(fstype, volume.fstype)
def test_blkid(self): # Add values here that are shown in the wild for blkid # !! Always try to add it also to test_combination descriptions = { "cramfs": "cramfs", "ext4": "ext", "ext2": "ext", "vfat": "fat", "iso9660": "iso", "minix": "minix", "ntfs": "ntfs", "squashfs": "squashfs", "ufs": "ufs", "dos": "volumesystem", } for description, fstype in descriptions.items(): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=description) volume._get_magic_type = mock.Mock(return_value=None) volume.determine_fs_type() self.assertEqual(FILE_SYSTEM_TYPES[fstype], volume.fstype)
def test_no_clue_fstype(self): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume.determine_fs_type() self.assertEqual(UnknownFileSystem, volume.filesystem.__class__)
def test_little_clue_fstype(self): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value="-") volume._get_magic_type = mock.Mock(return_value="-") volume.determine_fs_type() self.assertEqual(UnknownFileSystemType(), volume.fstype)
def test_no_clue_fstype(self): volume = Volume(disk=Disk(ImageParser(), "...")) volume._get_blkid_type = mock.Mock(return_value=None) volume._get_magic_type = mock.Mock(return_value=None) volume.determine_fs_type() self.assertEqual("unknown", volume.fstype)