Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
496b8297
Commit
496b8297
authored
Dec 03, 2014
by
Don Gagne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New Mavlink Log collection unit test
parent
654fe43b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
272 additions
and
2 deletions
+272
-2
qgroundcontrol.pro
qgroundcontrol.pro
+4
-2
MavlinkLogTest.cc
src/qgcunittest/MavlinkLogTest.cc
+210
-0
MavlinkLogTest.h
src/qgcunittest/MavlinkLogTest.h
+57
-0
MockLink.cc
src/qgcunittest/MockLink.cc
+1
-0
No files found.
qgroundcontrol.pro
View file @
496b8297
...
...
@@ -654,7 +654,8 @@ HEADERS += \
src
/
qgcunittest
/
PX4RCCalibrationTest
.
h
\
src
/
qgcunittest
/
LinkManagerTest
.
h
\
src
/
qgcunittest
/
MainWindowTest
.
h
\
src
/
AutoPilotPlugins
/
PX4
/
Tests
/
FlightModeConfigTest
.
h
src
/
AutoPilotPlugins
/
PX4
/
Tests
/
FlightModeConfigTest
.
h
\
src
/
qgcunittest
/
MavlinkLogTest
.
h
SOURCES
+=
\
src
/
qgcunittest
/
UnitTest
.
cc
\
...
...
@@ -675,7 +676,8 @@ SOURCES += \
src
/
qgcunittest
/
PX4RCCalibrationTest
.
cc
\
src
/
qgcunittest
/
LinkManagerTest
.
cc
\
src
/
qgcunittest
/
MainWindowTest
.
cc
\
src
/
AutoPilotPlugins
/
PX4
/
Tests
/
FlightModeConfigTest
.
cc
src
/
AutoPilotPlugins
/
PX4
/
Tests
/
FlightModeConfigTest
.
cc
\
src
/
qgcunittest
/
MavlinkLogTest
.
cc
}
#
...
...
src/qgcunittest/MavlinkLogTest.cc
0 → 100644
View file @
496b8297
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/// @file
/// @brief Test for mavlink log collection
///
/// @author Don Gagne <don@thegagnes.com>
#include "MavlinkLogTest.h"
#include "MainWindow.h"
#include "MockLink.h"
UT_REGISTER_TEST
(
MavlinkLogTest
)
const
char
*
MavlinkLogTest
::
_tempLogFileTemplate
=
"FlightDataXXXXXX"
;
///< Template for temporary log file
const
char
*
MavlinkLogTest
::
_logFileExtension
=
"mavlink"
;
///< Extension for log files
const
char
*
MavlinkLogTest
::
_saveLogFilename
=
"qgroundcontrol.mavlink.ut"
;
///< Filename to save log files to
MavlinkLogTest
::
MavlinkLogTest
(
void
)
{
}
void
MavlinkLogTest
::
init
(
void
)
{
UnitTest
::
init
();
// Make sure temp directory is clear of mavlink logs
QDir
tmpDir
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
TempLocation
));
QStringList
logFiles
(
tmpDir
.
entryList
(
QStringList
(
QString
(
"*.%1"
).
arg
(
_logFileExtension
)),
QDir
::
Files
));
foreach
(
QString
logFile
,
logFiles
)
{
bool
success
=
tmpDir
.
remove
(
logFile
);
Q_UNUSED
(
success
);
Q_ASSERT
(
success
);
}
}
void
MavlinkLogTest
::
cleanup
(
void
)
{
UnitTest
::
cleanup
();
// Make sure no left over logs in temp directory
QDir
tmpDir
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
TempLocation
));
QStringList
logFiles
(
tmpDir
.
entryList
(
QStringList
(
QString
(
"*.%1"
).
arg
(
_logFileExtension
)),
QDir
::
Files
));
QCOMPARE
(
logFiles
.
count
(),
0
);
}
void
MavlinkLogTest
::
_bootLogDetectionCancel_test
(
void
)
{
// Create a fake mavlink log
QTemporaryFile
tempLogFile
;
tempLogFile
.
setFileTemplate
(
QString
(
"%1/%2.%3"
).
arg
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
TempLocation
)).
arg
(
_tempLogFileTemplate
).
arg
(
_logFileExtension
));
tempLogFile
.
setAutoRemove
(
false
);
tempLogFile
.
open
();
tempLogFile
.
write
(
"foo"
);
tempLogFile
.
close
();
// We should get a message box, followed by a getSaveFileName dialog.
setExpectedMessageBox
(
QMessageBox
::
Ok
);
setExpectedFileDialog
(
getSaveFileName
,
QStringList
());
MainWindow
*
mainWindow
=
MainWindow
::
_create
(
NULL
,
MainWindow
::
CUSTOM_MODE_PX4
);
Q_CHECK_PTR
(
mainWindow
);
checkExpectedMessageBox
();
checkExpectedFileDialog
();
mainWindow
->
close
();
delete
mainWindow
;
}
void
MavlinkLogTest
::
_bootLogDetectionSave_test
(
void
)
{
// Create a fake mavlink log
QTemporaryFile
tempLogFile
;
tempLogFile
.
setFileTemplate
(
QString
(
"%1/%2.%3"
).
arg
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
TempLocation
)).
arg
(
_tempLogFileTemplate
).
arg
(
_logFileExtension
));
tempLogFile
.
setAutoRemove
(
false
);
tempLogFile
.
open
();
tempLogFile
.
write
(
"foo"
);
tempLogFile
.
close
();
// We should get a message box, followed by a getSaveFileName dialog.
setExpectedMessageBox
(
QMessageBox
::
Ok
);
QDir
logSaveDir
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DocumentsLocation
));
QString
logSaveFile
(
logSaveDir
.
filePath
(
_saveLogFilename
));
setExpectedFileDialog
(
getSaveFileName
,
QStringList
(
logSaveFile
));
MainWindow
*
mainWindow
=
MainWindow
::
_create
(
NULL
,
MainWindow
::
CUSTOM_MODE_PX4
);
Q_CHECK_PTR
(
mainWindow
);
checkExpectedMessageBox
();
checkExpectedFileDialog
();
// Make sure the file is there and delete it
QCOMPARE
(
logSaveDir
.
remove
(
_saveLogFilename
),
true
);
mainWindow
->
close
();
delete
mainWindow
;
}
void
MavlinkLogTest
::
_bootLogDetectionZeroLength_test
(
void
)
{
// Create a fake mavlink log
QTemporaryFile
tempLogFile
;
tempLogFile
.
setFileTemplate
(
QString
(
"%1/%2.%3"
).
arg
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
TempLocation
)).
arg
(
_tempLogFileTemplate
).
arg
(
_logFileExtension
));
tempLogFile
.
setAutoRemove
(
false
);
// Zero length file
tempLogFile
.
open
();
tempLogFile
.
close
();
// Zero length log files should not generate any additional UI pop-ups. It should just be deleted silently.
MainWindow
*
mainWindow
=
MainWindow
::
_create
(
NULL
,
MainWindow
::
CUSTOM_MODE_PX4
);
Q_CHECK_PTR
(
mainWindow
);
mainWindow
->
close
();
delete
mainWindow
;
}
void
MavlinkLogTest
::
_connectLog_test
(
void
)
{
MainWindow
*
mainWindow
=
MainWindow
::
_create
(
NULL
,
MainWindow
::
CUSTOM_MODE_PX4
);
Q_CHECK_PTR
(
mainWindow
);
LinkManager
*
linkMgr
=
LinkManager
::
instance
();
Q_CHECK_PTR
(
linkMgr
);
MockLink
*
link
=
new
MockLink
();
Q_CHECK_PTR
(
link
);
// FIXME: LinkManager/MainWindow needs to be re-architected so that you don't have to addLink to MainWindow to get things to work
mainWindow
->
addLink
(
link
);
linkMgr
->
connectLink
(
link
);
QTest
::
qWait
(
5000
);
// Give enough time for UI to settle and heartbeats to go through
// On Disconnect: We should get a getSaveFileName dialog.
QDir
logSaveDir
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DocumentsLocation
));
QString
logSaveFile
(
logSaveDir
.
filePath
(
_saveLogFilename
));
setExpectedFileDialog
(
getSaveFileName
,
QStringList
(
logSaveFile
));
linkMgr
->
disconnectLink
(
link
);
QTest
::
qWait
(
1000
);
// Need to allow signals to move between threads
checkExpectedFileDialog
();
// Make sure the file is there and delete it
QCOMPARE
(
logSaveDir
.
remove
(
_saveLogFilename
),
true
);
// MainWindow deletes itself on close
mainWindow
->
close
();
QTest
::
qWait
(
1000
);
// Need to allow signals to move between threads to shutdown MainWindow
}
void
MavlinkLogTest
::
_connectLogWindowClose_test
(
void
)
{
MainWindow
*
mainWindow
=
MainWindow
::
_create
(
NULL
,
MainWindow
::
CUSTOM_MODE_PX4
);
Q_CHECK_PTR
(
mainWindow
);
LinkManager
*
linkMgr
=
LinkManager
::
instance
();
Q_CHECK_PTR
(
linkMgr
);
MockLink
*
link
=
new
MockLink
();
Q_CHECK_PTR
(
link
);
// FIXME: LinkManager/MainWindow needs to be re-architected so that you don't have to addLink to MainWindow to get things to work
mainWindow
->
addLink
(
link
);
linkMgr
->
connectLink
(
link
);
QTest
::
qWait
(
5000
);
// Give enough time for UI to settle and heartbeats to go through
// On Disconnect: We should get a getSaveFileName dialog.
QDir
logSaveDir
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DocumentsLocation
));
QString
logSaveFile
(
logSaveDir
.
filePath
(
_saveLogFilename
));
setExpectedFileDialog
(
getSaveFileName
,
QStringList
(
logSaveFile
));
// MainWindow deletes itself on close
mainWindow
->
close
();
QTest
::
qWait
(
1000
);
// Need to allow signals to move between threads
checkExpectedFileDialog
();
// Make sure the file is there and delete it
QCOMPARE
(
logSaveDir
.
remove
(
_saveLogFilename
),
true
);
}
src/qgcunittest/MavlinkLogTest.h
0 → 100644
View file @
496b8297
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/// @file
/// @brief Test for mavlink log collection
///
/// @author Don Gagne <don@thegagnes.com>
#ifndef MAVLINKLOGTEST_H
#define MAVLINKLOGTEST_H
#include "UnitTest.h"
class
MavlinkLogTest
:
public
UnitTest
{
Q_OBJECT
public:
MavlinkLogTest
(
void
);
private
slots
:
void
init
(
void
);
void
cleanup
(
void
);
void
_bootLogDetectionCancel_test
(
void
);
void
_bootLogDetectionSave_test
(
void
);
void
_bootLogDetectionZeroLength_test
(
void
);
void
_connectLog_test
(
void
);
void
_connectLogWindowClose_test
(
void
);
private:
static
const
char
*
_tempLogFileTemplate
;
///< Template for temporary log file
static
const
char
*
_logFileExtension
;
///< Extension for log files
static
const
char
*
_saveLogFilename
;
///< Filename to save log files to
};
#endif
src/qgcunittest/MockLink.cc
View file @
496b8297
...
...
@@ -382,6 +382,7 @@ void MockLink::_handleParamRequestList(const mavlink_message_t& msg)
mavlink_message_t
responseMsg
;
char
paramId
[
MAVLINK_MSG_ID_PARAM_VALUE_LEN
];
Q_ASSERT
(
param
.
key
().
length
()
<=
MAVLINK_MSG_ID_PARAM_VALUE_LEN
);
strncpy
(
paramId
,
param
.
key
().
toLocal8Bit
().
constData
(),
MAVLINK_MSG_ID_PARAM_VALUE_LEN
);
mavlink_msg_param_value_pack
(
_vehicleSystemId
,
_vehicleComponentId
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment