File indexing completed on 2024-12-01 08:20:36
0001 /* 0002 SPDX-FileCopyrightText: 2023 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 0004 SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #include <QObject> 0008 0009 #include <QtTest> 0010 0011 #include "core/fstab.h" 0012 0013 using namespace Qt::StringLiterals; 0014 0015 struct ExpectedEntry { 0016 bool comment = false; 0017 QString device = QString(); 0018 QString mountPoint = QString(); 0019 QString type = QString(); 0020 }; 0021 0022 class FsTabTest : public QObject 0023 { 0024 Q_OBJECT 0025 0026 private Q_SLOTS: 0027 0028 void initTestCase() 0029 { 0030 0031 } 0032 0033 void testReadFstab() 0034 { 0035 auto fstabFile = QFINDTESTDATA("test_fstab_data/fstab"); 0036 auto entries = readFstabEntries(fstabFile); 0037 0038 std::array<ExpectedEntry, 13> expected_entries = {{ 0039 {.comment = true}, 0040 {.comment = true}, 0041 {.comment = true}, 0042 {.comment = true}, 0043 {.device = u"/dev/sda"_s, .mountPoint = u"/"_s, .type = u"ext4"_s }, 0044 {.comment = true}, 0045 {.device = u""_s, .mountPoint = u"/test"_s, .type = u"btrfs"_s}, 0046 {.comment = true}, 0047 {.device = u"127.0.0.1:/nfs/export"_s, .mountPoint = u"/nfs"_s, .type = u"nfs"_s}, 0048 {.comment = true}, 0049 {.device = u"none"_s, .mountPoint = u"/tmp"_s, .type = u"tmpfs"_s}, 0050 {.comment = true}, 0051 {.device = u"/dev/mapper/swap"_s, .mountPoint = u"none"_s, .type = u"swap"_s}, 0052 }}; 0053 0054 QCOMPARE(entries.size(), expected_entries.size()); 0055 0056 for (int i = 0; i < entries.size(); ++i) { 0057 auto entry = entries.at(i); 0058 auto expected = expected_entries.at(i); 0059 0060 if (expected.comment) { 0061 QVERIFY(!entry.comment().isNull()); 0062 continue; 0063 } 0064 0065 QCOMPARE(entry.deviceNode(), expected.device); 0066 QCOMPARE(entry.mountPoint(), expected.mountPoint); 0067 QCOMPARE(entry.type(), expected.type); 0068 } 0069 } 0070 0071 void testWriteFstab() 0072 { 0073 auto entries = FstabEntryList{{ 0074 {{}, {}, {}, {}, {}, {}, u"# Static information about the filesystems."_s}, 0075 {{}, {}, {}, {}, {}, {}, u"# See fstab(5) for details."_s}, 0076 {{}, {}, {}, {}, {}, {}, {}}, 0077 {{}, {}, {}, {}, {}, {}, u"# <file system> <dir> <type> <options> <dump> <pass>"_s}, 0078 {u"/dev/sda"_s, u"/"_s, u"ext4"_s, u"rw,relatime,discard"_s, 0, 1}, 0079 {{}, {}, {}, {}, {}, {}, {}}, 0080 {u"UUID=0491f5bc-487c-4797-b118-78add1e9cfb0"_s, u"/test"_s, u"btrfs"_s, u"defaults"_s, 0, 2}, 0081 {{}, {}, {}, {}, {}, {}, {}}, 0082 {u"127.0.0.1:/nfs/export"_s, u"/nfs"_s, u"nfs"_s, u"defaults"_s, 0, 2}, 0083 {{}, {}, {}, {}, {}, {}, {}}, 0084 {u"none"_s, u"/tmp"_s, u"tmpfs"_s, u"defaults"_s, 0, 0}, 0085 {{}, {}, {}, {}, {}, {}, {}}, 0086 {u"/dev/mapper/swap"_s, u"none"_s, u"swap"_s, u"defaults"_s, 0, 0}, 0087 }}; 0088 0089 auto fstab = generateFstab(entries).toUtf8().split('\n'); 0090 0091 auto fstabFilePath = QFINDTESTDATA("test_fstab_data/fstab"); 0092 QFile fstabFile(fstabFilePath); 0093 QVERIFY(fstabFile.open(QIODevice::OpenModeFlag::ReadOnly)); 0094 auto fileData = fstabFile.readAll().split('\n'); 0095 fstabFile.close(); 0096 0097 QCOMPARE(fstab, fileData); 0098 0099 // Test whether an empty mount point for not-swap is properly ignored. 0100 entries.append({u"/dev/sda"_s, u"none"_s, u"ext4"_s, u"defaults"_s}); 0101 entries.append({u"/dev/sda"_s, QString(), u"ext4"_s, u"defaults"_s}); 0102 fstab = generateFstab(entries).toUtf8().split('\n'); 0103 0104 QCOMPARE(fstab, fileData); 0105 } 0106 }; 0107 0108 QTEST_GUILESS_MAIN(FsTabTest) 0109 0110 0111 #include "test_fstab.moc"