From aa3f909be7d2e99ffca387bf4fdbfcc2250549b6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 2 Jul 2019 22:46:49 +0200 Subject: [PATCH] [libcalamares] Tests for UMask handling --- src/libcalamares/utils/Tests.cpp | 33 ++++++++++++++++++++++++++++++++ src/libcalamares/utils/Tests.h | 3 +++ 2 files changed, 36 insertions(+) diff --git a/src/libcalamares/utils/Tests.cpp b/src/libcalamares/utils/Tests.cpp index 60e1b08bd..2f2b7ff4b 100644 --- a/src/libcalamares/utils/Tests.cpp +++ b/src/libcalamares/utils/Tests.cpp @@ -20,12 +20,17 @@ #include "CalamaresUtilsSystem.h" #include "Logger.h" +#include "UMask.h" #include "Yaml.h" #include #include +#include +#include +#include + QTEST_GUILESS_MAIN( LibCalamaresTests ) LibCalamaresTests::LibCalamaresTests() {} @@ -141,3 +146,31 @@ LibCalamaresTests::testCommands() r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls" }, "/tmp" ); QVERIFY( r.getOutput().contains( tfn.fileName() ) ); } + +void +LibCalamaresTests::testUmask() +{ + struct stat mystat; + + QTemporaryFile ft; + QVERIFY( ft.open() ); + + mode_t m = CalamaresUtils::setUMask( 022 ); + QCOMPARE( CalamaresUtils::setUMask( m ), m ); + + for ( int i = 0; i <= 0777 /* octal! */; ++i ) + { + QByteArray name = ( ft.fileName() + QChar( '.' ) + QString::number( i, 8 ) ).toLatin1(); + CalamaresUtils::UMask um( i ); + int fd = creat( name, 0777 ); + QVERIFY( fd >= 0 ); + close( fd ); + QFileInfo fi( name ); + QVERIFY( fi.exists() ); + QCOMPARE( stat( name, &mystat ), 0 ); + QCOMPARE( mystat.st_mode & 0777, 0777 & ~i ); + QCOMPARE( unlink( name ), 0 ); + } + QCOMPARE( CalamaresUtils::setUMask( 022 ), m ); + QCOMPARE( CalamaresUtils::setUMask( m ), 022 ); +} diff --git a/src/libcalamares/utils/Tests.h b/src/libcalamares/utils/Tests.h index 5cdb3912b..d9140e0d0 100644 --- a/src/libcalamares/utils/Tests.h +++ b/src/libcalamares/utils/Tests.h @@ -36,6 +36,9 @@ private Q_SLOTS: void testLoadSaveYamlExtended(); // Do a find() in the src dir void testCommands(); + + /** @brief Test that all the UMask objects work correctly. */ + void testUmask(); }; #endif