Add CreateAndWriteUUIDAndReadLabel unit test (!104)

During review and testing of this patchset it was discovered that using
GParted to set a new UUID on a FAT16 or FAT32 file system that there was
a new unwanted side effect of clearing the label.

Add unit test to cover this error scenario.  It does the following:
1. Creates a file system with a known label;
2. Writes a new UUID;
3. Reads the label and confirms it matches the initial label.

This new unit test captures the fault like this:
    $ ./test_SupportedFileSystems --gtest_filter='*CreateAndWriteUUIDAndReadLabel*'
    ...
    [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat16
    test_SupportedFileSystems.cc:645: Failure
    Expected equality of these values:
      fs_label
        Which is: "TEST_LABEL"
      m_partition.get_filesystem_label().c_str()
        Which is: ""
    [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat16, where GetParam() = 13 (21 ms)
    [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat32
    test_SupportedFileSystems.cc:645: Failure
    Expected equality of these values:
      fs_label
        Which is: "TEST_LABEL"
      m_partition.get_filesystem_label().c_str()
        Which is: ""
    [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat32, where GetParam() = 14 (22 ms)

Don't forget to exclude this unit test for file systems which need a
loop device but which fails to be created inside the docker CI image.
Reference:
    39fdfe51da
    Exclude unit tests needing losetup in Docker CI image (!59)

Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
              with FAT16/32
This commit is contained in:
Mike Fleetwood 2022-07-01 09:09:52 +01:00 committed by Curtis Gedak
parent b7f951bcb8
commit fde76a949f
2 changed files with 30 additions and 0 deletions

View File

@ -92,6 +92,9 @@ stages:
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteLabel/nilfs2" - GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteLabel/nilfs2"
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteUUID/lvm2pv" - GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteUUID/lvm2pv"
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteUUID/nilfs2" - GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteUUID/nilfs2"
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/btrfs"
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/lvm2pv"
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/nilfs2"
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndCheck/lvm2pv" - GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndCheck/lvm2pv"
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndRemove/lvm2pv" - GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndRemove/lvm2pv"
- GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndGrow/btrfs" - GTEST_FILTER="$GTEST_FILTER:My/SupportedFileSystemsTest.CreateAndGrow/btrfs"

View File

@ -617,6 +617,33 @@ TEST_P(SupportedFileSystemsTest, CreateAndWriteUUID)
} }
TEST_P(SupportedFileSystemsTest, CreateAndWriteUUIDAndReadLabel)
{
SKIP_IF_FS_DOESNT_SUPPORT(create);
SKIP_IF_FS_DOESNT_SUPPORT(write_uuid);
SKIP_IF_FS_DOESNT_SUPPORT(read_label);
SKIP_IF_NOT_ROOT_FOR_REQUIRED_LOOPDEV_FOR_FS(FS_BTRFS);
SKIP_IF_NOT_ROOT_FOR_REQUIRED_LOOPDEV_FOR_FS(FS_LVM2_PV);
SKIP_IF_NOT_ROOT_FOR_REQUIRED_LOOPDEV_FOR_FS(FS_NILFS2);
const char* fs_label = "TEST_LABEL";
create_image_file();
m_partition.set_filesystem_label(fs_label);
ASSERT_TRUE(m_fs_object->create(m_partition, m_operation_detail)) << m_operation_detail;
// Test writing a new random UUID is successful.
ASSERT_TRUE(m_fs_object->write_uuid(m_partition, m_operation_detail)) << m_operation_detail;
// Test reading the label is successful and it hasn't changed.
reload_partition();
m_fs_object->read_label(m_partition);
EXPECT_STREQ(fs_label, m_partition.get_filesystem_label().c_str());
// Test messages from read operation are empty or print them.
EXPECT_TRUE(m_partition.get_messages().empty()) << m_partition;
}
TEST_P(SupportedFileSystemsTest, CreateAndCheck) TEST_P(SupportedFileSystemsTest, CreateAndCheck)
{ {
SKIP_IF_FS_DOESNT_SUPPORT(create); SKIP_IF_FS_DOESNT_SUPPORT(create);