diff --git a/src/modules/machineid/CMakeLists.txt b/src/modules/machineid/CMakeLists.txt
index efb6454e8..a57d5163d 100644
--- a/src/modules/machineid/CMakeLists.txt
+++ b/src/modules/machineid/CMakeLists.txt
@@ -12,6 +12,7 @@ calamares_add_plugin( machineid
if ( ECM_FOUND AND BUILD_TESTING )
ecm_add_test(
Tests.cpp
+ MachineIdJob.cpp
Workers.cpp
TEST_NAME
machineidtest
diff --git a/src/modules/machineid/Tests.cpp b/src/modules/machineid/Tests.cpp
index 87853af82..53abd0482 100644
--- a/src/modules/machineid/Tests.cpp
+++ b/src/modules/machineid/Tests.cpp
@@ -16,11 +16,14 @@
* along with Calamares. If not, see .
*/
+#include "MachineIdJob.h"
#include "Workers.h"
+#include "GlobalStorage.h"
+#include "JobQueue.h"
+#include "utils/CalamaresUtilsSystem.h"
#include "utils/Logger.h"
-
#include
#include
#include
@@ -38,6 +41,8 @@ private Q_SLOTS:
void testCopyFile();
void testPoolSize();
+
+ void testJob();
};
void
@@ -95,6 +100,62 @@ MachineIdTests::testPoolSize()
#endif
}
+void
+MachineIdTests::testJob()
+{
+ Logger::setupLogLevel( Logger::LOGDEBUG );
+
+ // Ensure we have a system object, expect it to be a "bogus" one
+ CalamaresUtils::System* system = CalamaresUtils::System::instance();
+ QVERIFY( system );
+ QVERIFY( system->doChroot() );
+
+ // Ensure we have a system-wide GlobalStorage with /tmp as root
+ if ( !Calamares::JobQueue::instance() )
+ {
+ cDebug() << "Creating new JobQueue";
+ (void)new Calamares::JobQueue();
+ }
+ Calamares::GlobalStorage* gs
+ = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr;
+ QVERIFY( gs );
+ gs->insert( "rootMountPoint", "/tmp" );
+
+ // Prepare part of the target filesystem
+ QVERIFY( system->createTargetDirs("/etc") );
+ QVERIFY( !(system->createTargetFile( "/etc/machine-id", "Hello" ).isEmpty() ) );
+
+ MachineIdJob job( nullptr );
+ QVERIFY( !job.prettyName().isEmpty() );
+
+ QVariantMap config;
+ config.insert( "dbus", true );
+ job.setConfigurationMap( config );
+
+ {
+ auto r = job.exec();
+ QVERIFY( !r ); // It's supposed to fail, because no dbus-uuidgen executable exists
+ QVERIFY( QFile::exists( "/tmp/var/lib/dbus" ) ); // but the target dir exists
+ }
+
+ config.insert( "dbus-symlink", true );
+ job.setConfigurationMap( config );
+ {
+ auto r = job.exec();
+ QVERIFY( !r ); // It's supposed to fail, because no dbus-uuidgen executable exists
+ QVERIFY( QFile::exists( "/tmp/var/lib/dbus" ) ); // but the target dir exists
+
+ // These all (would) fail, because the chroot isn't viable
+#if 0
+ QVERIFY( QFile::exists( "/tmp/var/lib/dbus/machine-id" ) );
+
+ QFileInfo fi( "/tmp/var/lib/dbus/machine-id" );
+ QVERIFY( fi.exists() );
+ QVERIFY( fi.isSymLink() );
+ QCOMPARE( fi.size(), 5);
+#endif
+ }
+}
QTEST_GUILESS_MAIN( MachineIdTests )