diff --git a/src/qgcunittest/QGCUASFileManagerTest.cc b/src/qgcunittest/QGCUASFileManagerTest.cc index de1a89975f4df8c09161aefcda7a06c0f5c6429b..0e83d47f95a0312966af001cfe0f98b1ddab73bb 100644 --- a/src/qgcunittest/QGCUASFileManagerTest.cc +++ b/src/qgcunittest/QGCUASFileManagerTest.cc @@ -59,15 +59,17 @@ void QGCUASFileManagerUnitTest::init(void) Q_ASSERT(connected); Q_UNUSED(connected); // Silent release build compiler warning - connected = connect(_fileManager, SIGNAL(statusMessage(const QString&)), this, SLOT(statusMessage(const QString&))); + connected = connect(_fileManager, SIGNAL(listEntry(const QString&)), this, SLOT(listEntry(const QString&))); Q_ASSERT(connected); - _rgSignals[statusMessageSignalIndex] = SIGNAL(statusMessage(const QString&)); - _rgSignals[errorMessageSignalIndex] = SIGNAL(errorMessage(const QString&)); - _rgSignals[resetStatusMessagesSignalIndex] = SIGNAL(resetStatusMessages(void)); + _rgSignals[listEntrySignalIndex] = SIGNAL(listEntry(const QString&)); _rgSignals[listCompleteSignalIndex] = SIGNAL(listComplete(void)); - _rgSignals[openFileLengthSignalIndex] = SIGNAL(openFileLength(unsigned int)); + + _rgSignals[downloadFileLengthSignalIndex] = SIGNAL(downloadFileLength(unsigned int)); + _rgSignals[downloadFileCompleteSignalIndex] = SIGNAL(downloadFileComplete(void)); + _rgSignals[errorMessageSignalIndex] = SIGNAL(errorMessage(const QString&)); + _multiSpy = new MultiSignalSpy(); Q_CHECK_PTR(_multiSpy); QCOMPARE(_multiSpy->init(_fileManager, _rgSignals, _cSignals), true); @@ -86,11 +88,11 @@ void QGCUASFileManagerUnitTest::cleanup(void) _multiSpy = NULL; } -/// @brief Connected to QGCUASFileManager statusMessage signal in order to catch list command output -void QGCUASFileManagerUnitTest::statusMessage(const QString& msg) +/// @brief Connected to QGCUASFileManager listEntry signal in order to catch list entries +void QGCUASFileManagerUnitTest::listEntry(const QString& entry) { // Keep a list of all names received so we can test it for correctness - _fileListReceived += msg; + _fileListReceived += entry; } @@ -151,14 +153,13 @@ void QGCUASFileManagerUnitTest::_listTest(void) Q_ASSERT(_multiSpy->checkNoSignals() == true); // QGCUASFileManager::listDirectory signalling as follows: - // Emits the resetStatusMessages signal - // Emits a statusMessage signal for each list entry + // Emits a listEntry signal for each list entry // Emits an errorMessage signal if: // It gets a Nak back // Sequence number is incorrrect on any response // CRC is incorrect on any responses // List entry is formatted incorrectly - // It is possible to get a number of good statusMessage signals, followed by an errorMessage signal + // It is possible to get a number of good listEntry signals, followed by an errorMessage signal // Emits listComplete after it receives the final list entry // If an errorMessage signal is signalled no listComplete is signalled @@ -166,7 +167,7 @@ void QGCUASFileManagerUnitTest::_listTest(void) // We should get a single resetStatusMessages signal // We should get a single errorMessage signal _fileManager->listDirectory("/bogus"); - QCOMPARE(_multiSpy->checkOnlySignalByMask(errorMessageSignalMask | resetStatusMessagesSignalMask), true); + QCOMPARE(_multiSpy->checkOnlySignalByMask(errorMessageSignalMask), true); _multiSpy->clearAllSignals(); // Setup the mock file server with a valid directory list @@ -187,15 +188,15 @@ void QGCUASFileManagerUnitTest::_listTest(void) // For simulated server errors on subsequent Acks, the first Ack will go through. This means we should have gotten some // partial results. In the case of the directory list test set, all entries fit into the first ack, so we should have // gotten back all of them. - QCOMPARE(_multiSpy->getSpyByIndex(statusMessageSignalIndex)->count(), fileList.count()); - _multiSpy->clearSignalByIndex(statusMessageSignalIndex); + QCOMPARE(_multiSpy->getSpyByIndex(listEntrySignalIndex)->count(), fileList.count()); + _multiSpy->clearSignalByIndex(listEntrySignalIndex); // And then it should have errored out because the next list Request would have failed. - QCOMPARE(_multiSpy->checkOnlySignalByMask(errorMessageSignalMask | resetStatusMessagesSignalMask), true); + QCOMPARE(_multiSpy->checkOnlySignalByMask(errorMessageSignalMask), true); } else { // For the simulated errors which failed the intial response we should not have gotten any results back at all. // Just an error. - QCOMPARE(_multiSpy->checkOnlySignalByMask(errorMessageSignalMask | resetStatusMessagesSignalMask), true); + QCOMPARE(_multiSpy->checkOnlySignalByMask(errorMessageSignalMask), true); } // Set everything back to initial state @@ -206,9 +207,9 @@ void QGCUASFileManagerUnitTest::_listTest(void) // Send a list command at the root of the directory tree which should succeed _fileManager->listDirectory("/"); - QCOMPARE(_multiSpy->checkSignalByMask(resetStatusMessagesSignalMask | listCompleteSignalMask), true); + QCOMPARE(_multiSpy->checkSignalByMask(listCompleteSignalMask), true); QCOMPARE(_multiSpy->checkNoSignalByMask(errorMessageSignalMask), true); - QCOMPARE(_multiSpy->getSpyByIndex(statusMessageSignalIndex)->count(), fileList.count()); + QCOMPARE(_multiSpy->getSpyByIndex(listEntrySignalIndex)->count(), fileList.count()); QVERIFY(_fileListReceived == fileList); } @@ -238,26 +239,26 @@ void QGCUASFileManagerUnitTest::_downloadTest(void) Q_ASSERT(_multiSpy->checkNoSignals() == true); // QGCUASFileManager::downloadPath works as follows: - // Emits the resetStatusMessages signal // Sends an Open Command to the server // Expects an Ack Response back from the server with the correct sequence numner // Emits an errorMessage signal if it gets a Nak back - // Emits an openFileLength signal with the file length if it gets back a good Ack + // Emits an downloadFileLength signal with the file length if it gets back a good Ack // Sends subsequent Read commands to the server until it gets the full file contents back + // Emits a downloadFileProgress for each read command ack it gets back // Sends Terminate command to server when download is complete to close Open command // Mock file server will signal terminateCommandReceived when it gets a Terminate command - // Sends statusMessage signal to indicate the download is complete + // Sends downloadFileComplete signal to indicate the download is complete // Emits an errorMessage signal if sequence number is incorrrect on any response // Emits an errorMessage signal if CRC is incorrect on any responses // Expected signals if the Open command fails for any reason - quint16 signalMaskOpenFailure = resetStatusMessagesSignalMask | errorMessageSignalMask; + quint16 signalMaskOpenFailure = errorMessageSignalMask; // Expected signals if the Read command fails for any reason - quint16 signalMaskReadFailure = resetStatusMessagesSignalMask | openFileLengthSignalMask | errorMessageSignalMask; + quint16 signalMaskReadFailure = downloadFileLengthSignalMask | errorMessageSignalMask; // Expected signals if the downloadPath command succeeds - quint16 signalMaskDownloadSuccess = resetStatusMessagesSignalMask | openFileLengthSignalMask | statusMessageSignalMask; + quint16 signalMaskDownloadSuccess = downloadFileLengthSignalMask | downloadFileCompleteSignalMask; // Send a bogus path // We should get a single resetStatusMessages signal @@ -296,7 +297,8 @@ void QGCUASFileManagerUnitTest::_downloadTest(void) // For simulated server errors on subsequent Acks, the first Ack will go through. We must handle things differently depending // on whether the downloaded file requires multiple packets to complete the download. if (testCase->fMultiPacketResponse) { - // The downloaded file requires multiple Acks to complete. Hence second Read should have failed. + // The downloaded file requires multiple Acks to complete. Hence first Read should have succeeded and sent one downloadFileComplete. + // Second Read should have failed. QCOMPARE(_multiSpy->checkOnlySignalByMask(signalMaskReadFailure), true); // Open command succeeded, so we should get a Terminate for the open @@ -333,7 +335,7 @@ void QGCUASFileManagerUnitTest::_downloadTest(void) QCOMPARE(_multiSpy->checkOnlySignalByMask(signalMaskDownloadSuccess), true); // Make sure the file length coming back through the openFileLength signal is correct - QVERIFY(_multiSpy->getSpyByIndex(openFileLengthSignalIndex)->takeFirst().at(0).toInt() == testCase->length); + QVERIFY(_multiSpy->getSpyByIndex(downloadFileLengthSignalIndex)->takeFirst().at(0).toInt() == testCase->length); _multiSpy->clearAllSignals(); diff --git a/src/qgcunittest/QGCUASFileManagerTest.h b/src/qgcunittest/QGCUASFileManagerTest.h index bc5cb9cf608ae7f64ab59036cfc47ffad33eeb42..fc7d0063eeff36c8f17015a7cad8516e700d69ca 100644 --- a/src/qgcunittest/QGCUASFileManagerTest.h +++ b/src/qgcunittest/QGCUASFileManagerTest.h @@ -58,29 +58,28 @@ private slots: void _listTest(void); void _downloadTest(void); - // Connected to QGCUASFileManager statusMessage signal - void statusMessage(const QString&); + // Connected to QGCUASFileManager listEntry signal + void listEntry(const QString& entry); private: void _validateFileContents(const QString& filePath, uint8_t length); enum { - statusMessageSignalIndex = 0, - errorMessageSignalIndex, - resetStatusMessagesSignalIndex, + listEntrySignalIndex = 0, listCompleteSignalIndex, - openFileLengthSignalIndex, + downloadFileLengthSignalIndex, + downloadFileCompleteSignalIndex, + errorMessageSignalIndex, maxSignalIndex }; enum { - statusMessageSignalMask = 1 << statusMessageSignalIndex, - errorMessageSignalMask = 1 << errorMessageSignalIndex, - resetStatusMessagesSignalMask = 1 << resetStatusMessagesSignalIndex, + listEntrySignalMask = 1 << listEntrySignalIndex, listCompleteSignalMask = 1 << listCompleteSignalIndex, - openFileLengthSignalMask = 1 << openFileLengthSignalIndex, + downloadFileLengthSignalMask = 1 << downloadFileLengthSignalIndex, + downloadFileCompleteSignalMask = 1 << downloadFileCompleteSignalIndex, + errorMessageSignalMask = 1 << errorMessageSignalIndex, }; - MockUAS _mockUAS; MockMavlinkFileServer _mockFileServer;