From c15d0cd6aa765548e7384ed19a79b7e9e2e5595b Mon Sep 17 00:00:00 2001 From: Mike Fleetwood Date: Sun, 20 Oct 2019 12:22:49 +0100 Subject: [PATCH] Accept FS usage figures within significant unallocated threshold (!49) So far the read file system usage figures, read via the file system interface classes using file system specific tools, have been checked to the exact sector for: 0 <= used <= size 0 <= unused <= size unallocated = 0 used + unused = size However for JFS and NTFS this fails like this: # ./test_SupportedFileSystems --gtest_filter='*ReadUsage/*' | fgrep ' ms' [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs (335 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/exfat (0 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext2 (38 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext3 (131 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext4 (32 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/f2fs (47 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/fat16 (19 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/fat32 (48 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/hfs (0 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/hfsplus (0 ms) [ FAILED ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 (73 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/linuxswap (20 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/luks (0 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/lvm2pv (410 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/minix (0 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/nilfs2 (226 ms) [ FAILED ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23 (56 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/reiser4 (49 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/reiserfs (139 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/udf (34 ms) [ OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/xfs (67 ms) [----------] 21 tests from My/SupportedFileSystemsTest (1726 ms total) [==========] 21 tests from 1 test case ran. (1726 ms total) # ./test_SupportedFileSystems --gtest_filter='*ReadUsage/jfs:*ReadUsage/ntfs' Running main() from test_SupportedFileSystems.cc Note: Google Test filter = *ReadUsage/jfs:*ReadUsage/ntfs [==========] Running 2 tests from 1 test case. [----------] Global test environment set-up. [----------] 2 tests from My/SupportedFileSystemsTest [ RUN ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs test_SupportedFileSystems.cc:465: Failure Expected equality of these values: m_partition.sectors_unallocated Which is: 2472 0 test_SupportedFileSystems.cc:517: Failure Expected equality of these values: m_partition.sectors_used + m_partition.sectors_unused Which is: 521816 m_partition.get_sector_length() Which is: 524288 [ FAILED ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 (36 ms) [ RUN ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs test_SupportedFileSystems.cc:465: Failure Expected equality of these values: m_partition.sectors_unallocated Which is: 8 0 test_SupportedFileSystems.cc:517: Failure Expected equality of these values: m_partition.sectors_used + m_partition.sectors_unused Which is: 524280 m_partition.get_sector_length() Which is: 524288 [ FAILED ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23 (35 ms) [----------] 2 tests from My/SupportedFileSystemsTest (71 ms total) [----------] Global test environment tear-down [==========] 2 tests from 1 test case ran. (72 ms total) [ PASSED ] 0 tests. [ FAILED ] 2 tests, listed below: [ FAILED ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 [ FAILED ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23 2 FAILED TESTS So JFS is reporting 2472 unallocated sectors in a size of 524288 sectors and NTFS is reporting 8 unallocated sectors in the same size. This exact issue is already solved for GParted so that it doesn't show a small amount of unallocated space by commits [1][2] from Bug 499202 [3]. Fix the same way, use the accessors to the file system usage figures which don't show unallocated space when it is below the significant threshold. [1] b5c80f18a9ce27fda2b11e9b590d7f856209ac32 Enhance calculation of significant unallocated space (#499202) [2] 7ebedc4bb3b81e85fb4c628a2a05308ada147d68 Don't show intrinsic unallocated space (#499202) [3] Bug 499202 - gparted does not see the difference if partition size differs from filesystem size https://bugzilla.gnome.org/show_bug.cgi?id=499202 Closes !49 - Add file system interface tests --- tests/test_SupportedFileSystems.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_SupportedFileSystems.cc b/tests/test_SupportedFileSystems.cc index aca004a9..c80050fd 100644 --- a/tests/test_SupportedFileSystems.cc +++ b/tests/test_SupportedFileSystems.cc @@ -506,15 +506,15 @@ TEST_P(SupportedFileSystemsTest, CreateAndReadUsage) m_fs_object->set_used_sectors(m_partition); // Test file system usage is reported correctly. // Used is between 0 and length. - EXPECT_LE(0, m_partition.sectors_used); - EXPECT_LE(m_partition.sectors_used, m_partition.get_sector_length()); + EXPECT_LE(0, m_partition.get_sectors_used()); + EXPECT_LE(m_partition.get_sectors_used(), m_partition.get_sector_length()); // Unused is between 0 and length. - EXPECT_LE(0, m_partition.sectors_unused); - EXPECT_LE(m_partition.sectors_unused, m_partition.get_sector_length()); + EXPECT_LE(0, m_partition.get_sectors_unused()); + EXPECT_LE(m_partition.get_sectors_unused(), m_partition.get_sector_length()); // Unallocated is 0. - EXPECT_EQ(m_partition.sectors_unallocated, 0); + EXPECT_EQ(m_partition.get_sectors_unallocated(), 0); // Used + unused = length. - EXPECT_EQ(m_partition.sectors_used + m_partition.sectors_unused, m_partition.get_sector_length()); + EXPECT_EQ(m_partition.get_sectors_used() + m_partition.get_sectors_unused(), m_partition.get_sector_length()); // Test messages from read operation are empty or print them. EXPECT_TRUE(m_partition.get_messages().empty()) << m_partition;