Commit b7419158 authored by Lorenz Meier's avatar Lorenz Meier

Merge pull request #148 from jjhall89/memCheck

memory leaks fixed fot unit tests
parents e111a65e 6577e48a
...@@ -34,7 +34,7 @@ QT += network \ ...@@ -34,7 +34,7 @@ QT += network \
TEMPLATE = app TEMPLATE = app
TARGET = qgcunittest TARGET = qgcunittest
BASEDIR = $${IN_PWD} BASEDIR = $${IN_PWD}
TESTDIR = $$BASEDIR/qgcunittest TESTDIR = $$BASEDIR/src/qgcunittest
linux-g++|linux-g++-64{ linux-g++|linux-g++-64{
debug { debug {
TARGETDIR = $${OUT_PWD}/debug TARGETDIR = $${OUT_PWD}/debug
......
...@@ -53,8 +53,11 @@ QGCFlightGearLink::QGCFlightGearLink(UASInterface* mav, QString remoteHost, QHos ...@@ -53,8 +53,11 @@ QGCFlightGearLink::QGCFlightGearLink(UASInterface* mav, QString remoteHost, QHos
} }
QGCFlightGearLink::~QGCFlightGearLink() QGCFlightGearLink::~QGCFlightGearLink()
{ { //do not disconnect unless it is connected.
disconnectSimulation(); //disconnectSimulation will delete the memory that was allocated for proces, terraSync and socket
if(connectState){
disconnectSimulation();
}
} }
/** /**
...@@ -136,6 +139,7 @@ void QGCFlightGearLink::setRemoteHost(const QString& host) ...@@ -136,6 +139,7 @@ void QGCFlightGearLink::setRemoteHost(const QString& host)
currentHost = info.addresses().first(); currentHost = info.addresses().first();
} }
} }
} }
void QGCFlightGearLink::updateControls(uint64_t time, float rollAilerons, float pitchElevator, float yawRudder, float throttle, uint8_t systemMode, uint8_t navMode) void QGCFlightGearLink::updateControls(uint64_t time, float rollAilerons, float pitchElevator, float yawRudder, float throttle, uint8_t systemMode, uint8_t navMode)
......
...@@ -30,7 +30,7 @@ This file is part of the QGROUNDCONTROL project ...@@ -30,7 +30,7 @@ This file is part of the QGROUNDCONTROL project
#ifndef QGCMAVLINK_H #ifndef QGCMAVLINK_H
#define QGCMAVLINK_H #define QGCMAVLINK_H
#include <mavlink.h> #include <../../mavlink/include/mavlink/v1.0/common/mavlink.h>
//#ifdef MAVLINK_CONF //#ifdef MAVLINK_CONF
//#define MY_MACRO(x) <x> //#define MY_MACRO(x) <x>
......
#include "UASUnitTest.h" #include "UASUnitTest.h"
#include <stdio.h> #include <stdio.h>
#include <QObject>
UASUnitTest::UASUnitTest() UASUnitTest::UASUnitTest()
{ {
} }
...@@ -13,10 +14,11 @@ void UASUnitTest::init() ...@@ -13,10 +14,11 @@ void UASUnitTest::init()
//this function is called after every test //this function is called after every test
void UASUnitTest::cleanup() void UASUnitTest::cleanup()
{ {
delete mav; delete uas;
mav = NULL; uas = NULL;
delete uas;
uas = NULL; delete mav;
mav = NULL;
} }
void UASUnitTest::getUASID_test() void UASUnitTest::getUASID_test()
...@@ -122,7 +124,6 @@ void UASUnitTest::getStatusForCode_test() ...@@ -122,7 +124,6 @@ void UASUnitTest::getStatusForCode_test()
uas->getStatusForCode(5325, state, desc); uas->getStatusForCode(5325, state, desc);
QVERIFY(state == "UNKNOWN"); QVERIFY(state == "UNKNOWN");
} }
void UASUnitTest::getLocalX_test() void UASUnitTest::getLocalX_test()
...@@ -138,7 +139,8 @@ void UASUnitTest::getLocalZ_test() ...@@ -138,7 +139,8 @@ void UASUnitTest::getLocalZ_test()
QCOMPARE(uas->getLocalZ(), 0.0); QCOMPARE(uas->getLocalZ(), 0.0);
} }
void UASUnitTest::getLatitude_test() void UASUnitTest::getLatitude_test()
{ QCOMPARE(uas->getLatitude(), 0.0); {
QCOMPARE(uas->getLatitude(), 0.0);
} }
void UASUnitTest::getLongitude_test() void UASUnitTest::getLongitude_test()
{ {
...@@ -167,8 +169,9 @@ void UASUnitTest::getSelected_test() ...@@ -167,8 +169,9 @@ void UASUnitTest::getSelected_test()
} }
void UASUnitTest::getSystemType_test() void UASUnitTest::getSystemType_test()
{ //best guess: it is not initialized in the constructor, { //check that system type is set to MAV_TYPE_GENERIC when initialized
//what should it be initialized to? QCOMPARE(uas->getSystemType(), 0);
uas->setSystemType(13);
QCOMPARE(uas->getSystemType(), 13); QCOMPARE(uas->getSystemType(), 13);
} }
...@@ -192,6 +195,7 @@ void UASUnitTest::setAirframe_test() ...@@ -192,6 +195,7 @@ void UASUnitTest::setAirframe_test()
uas->setAirframe(12); uas->setAirframe(12);
QVERIFY(uas->getAirframe() == 11); QVERIFY(uas->getAirframe() == 11);
} }
void UASUnitTest::getWaypointList_test() void UASUnitTest::getWaypointList_test()
{ {
QVector<Waypoint*> kk = uas->getWaypointManager()->getWaypointEditableList(); QVector<Waypoint*> kk = uas->getWaypointManager()->getWaypointEditableList();
...@@ -251,43 +255,48 @@ void UASUnitTest::getWaypoint_test() ...@@ -251,43 +255,48 @@ void UASUnitTest::getWaypoint_test()
void UASUnitTest::signalWayPoint_test() void UASUnitTest::signalWayPoint_test()
{ {
QSignalSpy spy(uas->getWaypointManager(), SIGNAL(waypointListChanged(UASID))); QSignalSpy spy(uas->getWaypointManager(), SIGNAL(waypointEditableListChanged()));
Waypoint* wp = new Waypoint(0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,false, false, MAV_FRAME_GLOBAL, MAV_CMD_MISSION_START, "blah"); Waypoint* wp = new Waypoint(0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,false, false, MAV_FRAME_GLOBAL, MAV_CMD_MISSION_START, "blah");
uas->getWaypointManager()->addWaypointEditable(wp, true); uas->getWaypointManager()->addWaypointEditable(wp, true);
printf("spy.count = %d\n", spy.count()); QCOMPARE(spy.count(), 1); // 1 listChanged for add wayPoint
//QCOMPARE(spy.count(), 1); // 1 listChanged for add wayPoint
uas->getWaypointManager()->removeWaypoint(0); uas->getWaypointManager()->removeWaypoint(0);
QCOMPARE(spy.count(), 2); // 2 listChanged for remove wayPoint QCOMPARE(spy.count(), 2); // 2 listChanged for remove wayPoint
QSignalSpy spyDestroyed(uas->getWaypointManager(), SIGNAL(destroyed())); QSignalSpy spyDestroyed(uas->getWaypointManager(), SIGNAL(destroyed()));
QVERIFY(spyDestroyed.isValid()); QVERIFY(spyDestroyed.isValid());
QCOMPARE( spyDestroyed.count(), 0 ); QCOMPARE( spyDestroyed.count(), 0 );
delete uas;// delete(destroyed) uas for validating delete uas;// delete(destroyed) uas for validating
uas = NULL;
QCOMPARE(spyDestroyed.count(), 1);// count destroyed uas should are 1 QCOMPARE(spyDestroyed.count(), 1);// count destroyed uas should are 1
uas = new UAS(mav,UASID); uas = new UAS(mav,UASID);
QSignalSpy spy2(uas->getWaypointManager(), SIGNAL(waypointListChanged())); QSignalSpy spy2(uas->getWaypointManager(), SIGNAL(waypointEditableListChanged()));
QCOMPARE(spy2.count(), 0); QCOMPARE(spy2.count(), 0);
Waypoint* wp2 = new Waypoint(0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,false, false, MAV_FRAME_GLOBAL, MAV_CMD_MISSION_START, "blah");
uas->getWaypointManager()->addWaypointEditable(wp, true); uas->getWaypointManager()->addWaypointEditable(wp2, true);
QCOMPARE(spy2.count(), 1); QCOMPARE(spy2.count(), 1);
uas->getWaypointManager()->clearWaypointList(); uas->getWaypointManager()->clearWaypointList();
QVector<Waypoint*> wpList = uas->getWaypointManager()->getWaypointEditableList(); QVector<Waypoint*> wpList = uas->getWaypointManager()->getWaypointEditableList();
QCOMPARE(wpList.count(), 1); QCOMPARE(wpList.count(), 1);
delete uas;
uas = NULL;
delete wp2;
} }
void UASUnitTest::signalUASLink_test() void UASUnitTest::signalUASLink_test()
{ {
QSignalSpy spy(uas, SIGNAL(modeChanged(int,QString,QString))); QSignalSpy spy(uas, SIGNAL(modeChanged(int,QString,QString)));
uas->setMode(2); uas->setMode(2);
QCOMPARE(spy.count(), 0);// not solve for UAS not receiving message from UAS QCOMPARE(spy.count(), 0);// not solve for UAS not receiving message from UAS
QSignalSpy spyS(LinkManager::instance(), SIGNAL(newLink(LinkInterface*))); QSignalSpy spyS(LinkManager::instance(), SIGNAL(newLink(LinkInterface*)));
SerialLink* link = new SerialLink(); SerialLink* link = new SerialLink();
LinkManager::instance()->add(link); LinkManager::instance()->add(link);
LinkManager::instance()->addProtocol(link, mav); LinkManager::instance()->addProtocol(link, mav);
QCOMPARE(spyS.count(), 1); QCOMPARE(spyS.count(), 1);
...@@ -324,41 +333,74 @@ void UASUnitTest::signalUASLink_test() ...@@ -324,41 +333,74 @@ void UASUnitTest::signalUASLink_test()
LinkInterface* ff99 = static_cast<LinkInterface*>(links.at(1)); LinkInterface* ff99 = static_cast<LinkInterface*>(links.at(1));
LinkManager::instance()->removeLink(ff99); LinkManager::instance()->removeLink(ff99);
delete link2;
QCOMPARE(LinkManager::instance()->getLinks().count(), 1); QCOMPARE(LinkManager::instance()->getLinks().count(), 1);
QCOMPARE(uas->getLinks()->count(), 2); QCOMPARE(uas->getLinks()->count(), 2);
QCOMPARE(static_cast<LinkInterface*>(LinkManager::instance()->getLinks().at(0))->getId(), QCOMPARE(static_cast<LinkInterface*>(LinkManager::instance()->getLinks().at(0))->getId(),
static_cast<LinkInterface*>(uas->getLinks()->at(0))->getId()); static_cast<LinkInterface*>(uas->getLinks()->at(0))->getId());
link = new SerialLink(); SerialLink* link3 = new SerialLink();
LinkManager::instance()->add(link); LinkManager::instance()->add(link3);
LinkManager::instance()->addProtocol(link, mav); LinkManager::instance()->addProtocol(link3, mav);
QCOMPARE(spyS.count(), 3); QCOMPARE(spyS.count(), 3);
QCOMPARE(LinkManager::instance()->getLinks().count(), 2);
LinkManager::instance()->removeLink(link3);
delete link3;
QCOMPARE(LinkManager::instance()->getLinks().count(), 1);
LinkManager::instance()->removeLink(link);
delete link;
QCOMPARE(LinkManager::instance()->getLinks().count(), 0);
} }
void UASUnitTest::signalIdUASLink_test() void UASUnitTest::signalIdUASLink_test()
{ {
QCOMPARE(LinkManager::instance()->getLinks().count(), 0);
SerialLink* myLink = new SerialLink(); SerialLink* myLink = new SerialLink();
myLink->setPortName("COM 17"); myLink->setPortName("COM 17");
LinkManager::instance()->add(myLink); LinkManager::instance()->add(myLink);
LinkManager::instance()->addProtocol(myLink, mav); LinkManager::instance()->addProtocol(myLink, mav);
myLink = new SerialLink(); SerialLink* myLink2 = new SerialLink();
myLink->setPortName("COM 18"); myLink2->setPortName("COM 18");
LinkManager::instance()->add(myLink); LinkManager::instance()->add(myLink2);
LinkManager::instance()->addProtocol(myLink, mav); LinkManager::instance()->addProtocol(myLink2, mav);
SerialLink* myLink3 = new SerialLink();
myLink3->setPortName("COM 19");
LinkManager::instance()->add(myLink3);
LinkManager::instance()->addProtocol(myLink3, mav);
SerialLink* myLink4 = new SerialLink();
myLink4->setPortName("COM 20");
LinkManager::instance()->add(myLink4);
LinkManager::instance()->addProtocol(myLink4, mav);
QCOMPARE(LinkManager::instance()->getLinks().count(), 4); QCOMPARE(LinkManager::instance()->getLinks().count(), 4);
QList<LinkInterface*> links = LinkManager::instance()->getLinks(); QList<LinkInterface*> links = LinkManager::instance()->getLinks();
LinkInterface* a = static_cast<LinkInterface*>(links.at(2)); LinkInterface* a = static_cast<LinkInterface*>(links.at(0));
LinkInterface* b = static_cast<LinkInterface*>(links.at(3)); LinkInterface* b = static_cast<LinkInterface*>(links.at(1));
LinkInterface* c = static_cast<LinkInterface*>(links.at(2));
LinkInterface* d = static_cast<LinkInterface*>(links.at(3));
QCOMPARE(a->getName(), QString("serial port COM 17")); QCOMPARE(a->getName(), QString("serial port COM 17"));
QCOMPARE(b->getName(), QString("serial port COM 18")); QCOMPARE(b->getName(), QString("serial port COM 18"));
QCOMPARE(c->getName(), QString("serial port COM 19"));
QCOMPARE(d->getName(), QString("serial port COM 20"));
LinkManager::instance()->removeLink(myLink4);
delete myLink4;
LinkManager::instance()->removeLink(myLink3);
delete myLink3;
LinkManager::instance()->removeLink(myLink2);
delete myLink2;
LinkManager::instance()->removeLink(myLink);
delete myLink;
QCOMPARE(LinkManager::instance()->getLinks().count(), 0);
} }
...@@ -106,22 +106,24 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(), ...@@ -106,22 +106,24 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(),
} }
color = UASInterface::getNextColor(); color = UASInterface::getNextColor();
setBatterySpecs(QString("9V,9.5V,12.6V")); setBatterySpecs(QString("9V,9.5V,12.6V"));
connect(statusTimeout, SIGNAL(timeout()), this, SLOT(updateState())); connect(statusTimeout, SIGNAL(timeout()), this, SLOT(updateState()));
connect(this, SIGNAL(systemSpecsChanged(int)), this, SLOT(writeSettings())); connect(this, SIGNAL(systemSpecsChanged(int)), this, SLOT(writeSettings()));
statusTimeout->start(500); statusTimeout->start(500);
readSettings(); readSettings();
type = MAV_TYPE_GENERIC;
// Initial signals // Initial signals
emit disarmed(); emit disarmed();
emit armingChanged(false); emit armingChanged(false);
} }
UAS::~UAS() UAS::~UAS()
{ {
writeSettings(); writeSettings();
delete links; delete links;
links=NULL; delete statusTimeout;
delete simulation;
delete paramManager;
} }
void UAS::writeSettings() void UAS::writeSettings()
{ {
...@@ -2081,21 +2083,25 @@ void UAS::requestParameter(int component, const QString& parameter) ...@@ -2081,21 +2083,25 @@ void UAS::requestParameter(int component, const QString& parameter)
void UAS::setSystemType(int systemType) void UAS::setSystemType(int systemType)
{ {
type = systemType; if((systemType >= MAV_TYPE_GENERIC) && (systemType < MAV_TYPE_ENUM_END))
// If the airframe is still generic, change it to a close default type
if (airframe == 0)
{ {
switch (systemType) type = systemType;
{
case MAV_TYPE_FIXED_WING: // If the airframe is still generic, change it to a close default type
airframe = QGC_AIRFRAME_EASYSTAR; if (airframe == 0)
break; {
case MAV_TYPE_QUADROTOR: switch (systemType)
airframe = QGC_AIRFRAME_MIKROKOPTER; {
break; case MAV_TYPE_FIXED_WING:
} airframe = QGC_AIRFRAME_EASYSTAR;
} break;
emit systemSpecsChanged(uasId); case MAV_TYPE_QUADROTOR:
airframe = QGC_AIRFRAME_MIKROKOPTER;
break;
}
}
emit systemSpecsChanged(uasId);
}
} }
void UAS::setUASName(const QString& name) void UAS::setUASName(const QString& name)
......
...@@ -490,7 +490,7 @@ public slots: ...@@ -490,7 +490,7 @@ public slots:
/** @brief Set the specific airframe type */ /** @brief Set the specific airframe type */
void setAirframe(int airframe) void setAirframe(int airframe)
{ {
if((airframe >= 0) && (airframe < 12)) if((airframe >= QGC_AIRFRAME_GENERIC) && (airframe < QGC_AIRFRAME_END_OF_ENUM))
{ {
this->airframe = airframe; this->airframe = airframe;
emit systemSpecsChanged(uasId); emit systemSpecsChanged(uasId);
...@@ -643,7 +643,6 @@ public slots: ...@@ -643,7 +643,6 @@ public slots:
void stopDataRecording(); void stopDataRecording();
void deleteSettings(); void deleteSettings();
signals: signals:
/** @brief The main/battery voltage has changed/was updated */ /** @brief The main/battery voltage has changed/was updated */
//void voltageChanged(int uasId, double voltage); // Defined in UASInterface already //void voltageChanged(int uasId, double voltage); // Defined in UASInterface already
/** @brief An actuator value has changed */ /** @brief An actuator value has changed */
......
Test
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment