From 484d7c4d15299ddf4a6e319149f54a1ff38fda07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20G=C3=A2teau?= Date: Wed, 23 Jul 2014 14:34:06 +0200 Subject: [PATCH] Update partition path after partition has been created Fixes #56 --- src/modules/mount/main.py | 3 + src/modules/partition/CreatePartitionJob.cpp | 1 + src/modules/partition/tests/JobTests.cpp | 68 ++++++++++++++------ 3 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py index 09c94cf74..c969f8fa1 100644 --- a/src/modules/mount/main.py +++ b/src/modules/mount/main.py @@ -27,6 +27,9 @@ import sys def mount( devicePath, mountPoint, fs ): if not os.path.exists( mountPoint ): os.makedirs( mountPoint ) + assert devicePath + assert mountPoint + assert fs subprocess.check_call( [ "mount", "-t", fs, devicePath, mountPoint ] ) diff --git a/src/modules/partition/CreatePartitionJob.cpp b/src/modules/partition/CreatePartitionJob.cpp index ec94d2b75..67c9789a3 100644 --- a/src/modules/partition/CreatePartitionJob.cpp +++ b/src/modules/partition/CreatePartitionJob.cpp @@ -89,6 +89,7 @@ CreatePartitionJob::exec() report.toText() ); } + m_partition->setPartitionPath( partitionPath ); backendPartitionTable->commit(); progress( step++ / stepCount ); diff --git a/src/modules/partition/tests/JobTests.cpp b/src/modules/partition/tests/JobTests.cpp index b4239001b..169683c5d 100644 --- a/src/modules/partition/tests/JobTests.cpp +++ b/src/modules/partition/tests/JobTests.cpp @@ -70,8 +70,8 @@ JobTests::JobTests() void JobTests::initTestCase() { - QString deviceName = qgetenv( "CALAMARES_TEST_DISK" ); - if ( deviceName.isEmpty() ) + QString devicePath = qgetenv( "CALAMARES_TEST_DISK" ); + if ( devicePath.isEmpty() ) { QSKIP( "Skipping test, CALAMARES_TEST_DISK is not set. It should point to a disk which can be safely formatted" ); } @@ -79,7 +79,7 @@ JobTests::initTestCase() QVERIFY( CalaPM::init() ); CoreBackend* backend = CoreBackendManager::self()->backend(); - m_device.reset( backend->scanDevice( deviceName ) ); + m_device.reset( backend->scanDevice( devicePath ) ); QVERIFY( !m_device.isNull() ); FileSystemFactory::init(); @@ -141,26 +141,40 @@ JobTests::testCreatePartition() { queuePartitionTableCreation( PartitionTable::gpt ); CreatePartitionJob* job; + Partition* freePartition; - Partition* partition = firstFreePartition( m_device->partitionTable() ); - job = newCreatePartitionJob( partition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 1 * MB); - QVERIFY( job ); + freePartition = firstFreePartition( m_device->partitionTable() ); + QVERIFY( freePartition ); + job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 1 * MB); + Partition* partition1 = job->partition(); + QVERIFY( partition1 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); - partition = firstFreePartition( m_device->partitionTable() ); - QVERIFY( partition ); - job = newCreatePartitionJob( partition, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, 1 * MB); + freePartition = firstFreePartition( m_device->partitionTable() ); + QVERIFY( freePartition ); + job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, 1 * MB); + Partition* partition2 = job->partition(); + QVERIFY( partition2 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); - partition = firstFreePartition( m_device->partitionTable() ); - QVERIFY( partition ); - job = newCreatePartitionJob( partition, PartitionRole( PartitionRole::Primary ), FileSystem::Fat32, 1 * MB); + freePartition = firstFreePartition( m_device->partitionTable() ); + QVERIFY( freePartition ); + job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Fat32, 1 * MB); + Partition* partition3 = job->partition(); + QVERIFY( partition3 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); QVERIFY( m_runner.run() ); + + // Check partitionPath has been set. It is not known until the job has + // executed. + QString devicePath = m_device->deviceNode(); + QCOMPARE( partition1->partitionPath(), devicePath + "1" ); + QCOMPARE( partition2->partitionPath(), devicePath + "2" ); + QCOMPARE( partition3->partitionPath(), devicePath + "3" ); } void @@ -168,25 +182,37 @@ JobTests::testCreatePartitionExtended() { queuePartitionTableCreation( PartitionTable::msdos ); CreatePartitionJob* job; + Partition* freePartition; - Partition* partition = firstFreePartition( m_device->partitionTable() ); - job = newCreatePartitionJob( partition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 10 * MB); - QVERIFY( job ); + freePartition = firstFreePartition( m_device->partitionTable() ); + QVERIFY( freePartition ); + job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 10 * MB); + Partition* partition1 = job->partition(); + QVERIFY( partition1 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); - partition = firstFreePartition( m_device->partitionTable() ); - QVERIFY( partition ); - job = newCreatePartitionJob( partition, PartitionRole( PartitionRole::Extended ), FileSystem::Extended, 10 * MB); + freePartition = firstFreePartition( m_device->partitionTable() ); + QVERIFY( freePartition ); + job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Extended ), FileSystem::Extended, 10 * MB); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); Partition* extendedPartition = job->partition(); - partition = firstFreePartition( extendedPartition ); - QVERIFY( partition ); - job = newCreatePartitionJob( partition, PartitionRole( PartitionRole::Logical ), FileSystem::Ext4, 0); + freePartition = firstFreePartition( extendedPartition ); + QVERIFY( freePartition ); + job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Logical ), FileSystem::Ext4, 0); + Partition* partition2 = job->partition(); + QVERIFY( partition2 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); QVERIFY( m_runner.run() ); + + // Check partitionPath has been set. It is not known until the job has + // executed. + QString devicePath = m_device->deviceNode(); + QCOMPARE( partition1->partitionPath(), devicePath + "1" ); + QCOMPARE( extendedPartition->partitionPath(), devicePath + "2" ); + QCOMPARE( partition2->partitionPath(), devicePath + "5" ); }