knetworkmountstestpaths.cpp 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /*
  2. This software is a contribution of the LiMux project of the city of Munich.
  3. SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
  4. SPDX-License-Identifier: LGPL-2.0-or-later
  5. */
  6. #include "knetworkmountstestpaths.h"
  7. #include <KNetworkMounts>
  8. #include <QFile>
  9. #include <QStandardPaths>
  10. #include <QTest>
  11. QTEST_MAIN(KNetworkMountsTestPaths)
  12. void KNetworkMountsTestPaths::initTestCase()
  13. {
  14. QStandardPaths::setTestModeEnabled(true);
  15. m_configFileName = QStringLiteral("%1/network_mounts").arg(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
  16. QFile::remove(m_configFileName);
  17. QVERIFY(!QFile::exists(m_configFileName));
  18. KNetworkMounts::self()->setEnabled(true);
  19. QVERIFY(KNetworkMounts::self()->isEnabled());
  20. KNetworkMounts::self()->sync();
  21. QVERIFY(QFile::exists(m_configFileName));
  22. QVERIFY(KNetworkMounts::self()->isEnabled());
  23. // nfs path
  24. const QString nfsPath = QStringLiteral("/mnt/nfs");
  25. const QString savedNfsPath = QStringLiteral("/mnt/nfs/");
  26. const QStringList savedNfsPaths = {savedNfsPath};
  27. KNetworkMounts::self()->addPath(nfsPath, KNetworkMounts::NfsPaths);
  28. QStringList allSavedPaths = savedNfsPaths;
  29. QCOMPARE(KNetworkMounts::self()->paths(), allSavedPaths);
  30. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), QStringList());
  31. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::NfsPaths), savedNfsPaths);
  32. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), QStringList());
  33. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), QStringList());
  34. // smb shares
  35. const QStringList paths = {QStringLiteral("/mnt/server1"), QStringLiteral("/mnt/server2")};
  36. const QStringList savedSmbPaths = {QStringLiteral("/mnt/server1/"), QStringLiteral("/mnt/server2/")};
  37. KNetworkMounts::self()->setPaths(paths, KNetworkMounts::SmbPaths);
  38. allSavedPaths << savedSmbPaths;
  39. QCOMPARE(KNetworkMounts::self()->paths(), allSavedPaths);
  40. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), savedSmbPaths);
  41. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::NfsPaths), savedNfsPaths);
  42. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), QStringList());
  43. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), QStringList());
  44. // symlink dir
  45. const QStringList symlinkDirs = {QStringLiteral("/home/user/netshares")};
  46. const QStringList savedSymlinkDirs = {QStringLiteral("/home/user/netshares/")};
  47. KNetworkMounts::self()->setPaths(symlinkDirs, KNetworkMounts::SymlinkDirectory);
  48. allSavedPaths << savedSymlinkDirs;
  49. QCOMPARE(KNetworkMounts::self()->paths(), allSavedPaths);
  50. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), savedSmbPaths);
  51. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), savedSymlinkDirs);
  52. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::NfsPaths), savedNfsPaths);
  53. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), QStringList());
  54. // symlink to nfs or smb
  55. const QString symlinkToNfs = QStringLiteral("/somedir/symlinkToNfs");
  56. const QString savedSymlinkToNfs = QStringLiteral("/somedir/symlinkToNfs/");
  57. const QStringList savedSymlinkToNfsPaths = {savedSymlinkToNfs};
  58. KNetworkMounts::self()->addPath(symlinkToNfs, KNetworkMounts::SymlinkToNetworkMount);
  59. allSavedPaths << savedSymlinkToNfsPaths;
  60. QCOMPARE(KNetworkMounts::self()->paths(), allSavedPaths);
  61. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), savedSmbPaths);
  62. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), savedSymlinkDirs);
  63. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::NfsPaths), savedNfsPaths);
  64. QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), savedSymlinkToNfsPaths);
  65. }
  66. void KNetworkMountsTestPaths::cleanupTestCase()
  67. {
  68. KNetworkMounts::self()->sync();
  69. QFile::remove(m_configFileName);
  70. }
  71. void KNetworkMountsTestPaths::testPaths_data()
  72. {
  73. QTest::addColumn<QString>("path");
  74. QTest::addColumn<bool>("expected_path_option");
  75. QTest::addColumn<bool>("expected_path");
  76. QTest::addColumn<bool>("expected_symlink_dir");
  77. QTest::addColumn<bool>("expected_symlink_to_nfs_or_smb");
  78. QTest::addColumn<bool>("expected_nfs");
  79. QTest::addColumn<bool>("expected_smb");
  80. QTest::newRow("fast_path") << "/mnt" << false << false << false << false << false << false;
  81. QTest::newRow("fast_path_slash_end") << "/mnt/" << false << false << false << false << false << false;
  82. QTest::newRow("slow_path1") << "/mnt/server1" << true << true << false << false << false << true;
  83. QTest::newRow("slow_path2") << "/mnt/server2" << true << true << false << false << false << true;
  84. QTest::newRow("slow_path2_dir") << "/mnt/server2/dir" << true << true << false << false << false << true;
  85. QTest::newRow("slow_path2_dir_subdir") << "/mnt/server2/dir/subdir" << true << true << false << false << false << true;
  86. QTest::newRow("slow_path2_dir_subdir_slash_end") << "/mnt/server2/dir/subdir/" << true << true << false << false << false << true;
  87. QTest::newRow("slow_symlink_path") << "/home/user/netshares" << true << true << true << false << false << false;
  88. QTest::newRow("fast_path_root") << "/" << false << false << false << false << false << false;
  89. QTest::newRow("fast_path_home") << "/home" << false << false << false << false << false << false;
  90. QTest::newRow("fast_path_home_user") << "/home/user" << false << false << false << false << false << false;
  91. QTest::newRow("slow_symlink_path_subdir1") << "/home/user/netshares/subdir1" << true << true << true << false << false << false;
  92. QTest::newRow("slow_symlink_path_subdir1_subdir2") << "/home/user/netshares/subdir1/subdir2" << true << true << true << false << false << false;
  93. QTest::newRow("slow_symlink_path_subdir1_subdir2_slash_end") << "/home/user/netshares/subdir1/subdir2/" << true << true << true << false << false << false;
  94. QTest::newRow("slow_path_nfs") << "/mnt/nfs" << true << true << false << false << true << false;
  95. QTest::newRow("slow_path_nfs_dir") << "/mnt/nfs/dir" << true << true << false << false << true << false;
  96. QTest::newRow("slow_path_nfs_dir_subdir") << "/mnt/nfs/dir/subdir" << true << true << false << false << true << false;
  97. QTest::newRow("slow_path_nfs_dir_subdir_slash_end") << "/mnt/nfs/dir/subdir/" << true << true << false << false << true << false;
  98. QTest::newRow("slow_path_symlink_to_nfs") << "/somedir/symlinkToNfs" << true << true << false << true << false << false;
  99. QTest::newRow("slow_path_symlink_to_nfs_dir") << "/somedir/symlinkToNfs/dir" << true << true << false << true << false << false;
  100. QTest::newRow("slow_path_symlink_to_nfs_dir_subdir") << "/somedir/symlinkToNfs/dir/subdir" << true << true << false << true << false << false;
  101. QTest::newRow("slow_path_symlink_to_nfs_dir_subdir_slash_end") << "/somedir/symlinkToNfs/dir/subdir/" << true << true << false << true << false << false;
  102. }
  103. void KNetworkMountsTestPaths::testPaths()
  104. {
  105. QFETCH(QString, path);
  106. QFETCH(bool, expected_path_option);
  107. QFETCH(bool, expected_path);
  108. QFETCH(bool, expected_symlink_dir);
  109. QFETCH(bool, expected_symlink_to_nfs_or_smb);
  110. QFETCH(bool, expected_nfs);
  111. QFETCH(bool, expected_smb);
  112. QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::SymlinkPathsUseCache), expected_path_option);
  113. QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::KDirWatchUseINotify), expected_path_option);
  114. QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::KDirWatchDontAddWatches), expected_path_option);
  115. QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::LowSideEffectsOptimizations), expected_path_option);
  116. QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::MediumSideEffectsOptimizations), expected_path_option);
  117. QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::StrongSideEffectsOptimizations), expected_path_option);
  118. QCOMPARE(KNetworkMounts::self()->isSlowPath(path), expected_path);
  119. QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::KNetworkMountsType::Any), expected_path);
  120. QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::SymlinkDirectory), expected_symlink_dir);
  121. QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::SymlinkToNetworkMount), expected_symlink_to_nfs_or_smb);
  122. QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::NfsPaths), expected_nfs);
  123. QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::SmbPaths), expected_smb);
  124. }
  125. #include "moc_knetworkmountstestpaths.cpp"