Skip to content

Commit

Permalink
Update tests to prevent memory leakage (#4164)
Browse files Browse the repository at this point in the history
Install C and C++ tools in Travis
  • Loading branch information
etherealjoy committed Oct 17, 2019
1 parent c32fa5d commit f901a84
Show file tree
Hide file tree
Showing 9 changed files with 122 additions and 147 deletions.
15 changes: 5 additions & 10 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,16 +94,11 @@ before_install:
# - Rely on `kerl` for [pre-compiled versions available](https://docs.travis-ci.com/user/languages/erlang#Choosing-OTP-releases-to-test-against). Rely on installation path chosen by [`travis-erlang-builder`](https://github.com/travis-ci/travis-erlang-builder/blob/e6d016b1a91ca7ecac5a5a46395bde917ea13d36/bin/compile#L18).
# - . ~/otp/18.2.1/activate && erl -version
#- curl -f -L -o ./rebar3 https://s3.amazonaws.com/rebar3/rebar3 && chmod +x ./rebar3 && ./rebar3 version && export PATH="${TRAVIS_BUILD_DIR}:$PATH"
# install valgrind for C++ memory test
- sudo apt-get install valgrind
# install Qt 5.10
# comment out the following due to failure in downloading http://ppa.launchpad.net/beineri/opt-qt-5.10.1-trusty/ubuntu/dists/xenial/main/binary-amd64/Packages
#- sudo add-apt-repository --yes ppa:beineri/opt-qt-5.10.1-trusty
#- sudo apt-get update -qq
#- sudo apt-get install qt510-meta-minimal
#- source /opt/qt510/bin/qt510-env.sh
#- qmake -v

# install C++ tools
- sudo apt install -y --no-install-recommends valgrind cmake build-essential
# install Qt5
- sudo apt install -y --no-install-recommends qt5-default
- cmake --version
# show host table to confirm petstore.swagger.io is mapped to localhost
- cat /etc/hosts
# show java version
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1037,7 +1037,7 @@
<module>samples/server/petstore/python-aiohttp</module>
<!-- clients -->
<module>samples/client/petstore/c</module>
<!-- <module>samples/client/petstore/cpp-qt5</module> -->
<module>samples/client/petstore/cpp-qt5</module>
<module>samples/client/petstore/elm-0.18</module>
<module>samples/client/petstore/rust</module>
<!--<module>samples/client/petstore/perl</module>-->
Expand Down
68 changes: 30 additions & 38 deletions samples/client/petstore/cpp-qt5/PetStore/PetApiTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@
#include <QTest>
#include <QTimer>

OAIPetApi* PetApiTests::getApi() {
auto api = new OAIPetApi();
api->setHost("http://petstore.swagger.io");
return api;
}

OAIPet PetApiTests::createRandomPet() {
OAIPet pet;
qint64 id = QDateTime::currentMSecsSinceEpoch();
Expand All @@ -19,31 +13,32 @@ OAIPet PetApiTests::createRandomPet() {
}

void PetApiTests::findPetsByStatusTest() {
OAIPetApi* api = getApi();
OAIPetApi api;
api.setHost(PetStoreHost);
QEventLoop loop;
bool petFound = false;

connect(api, &OAIPetApi::findPetsByStatusSignal, [&](QList<OAIPet> pets) {
connect(&api, &OAIPetApi::findPetsByStatusSignal, [&](QList<OAIPet> pets) {
petFound = true;
foreach(OAIPet pet, pets) {
QVERIFY(pet.getStatus().startsWith("available") || pet.getStatus().startsWith("sold"));
}
loop.quit();
});

api->findPetsByStatus({"available", "sold"});
api.findPetsByStatus({"available", "sold"});
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petFound, "didn't finish within timeout");
delete api;
}

void PetApiTests::createAndGetPetTest() {
OAIPetApi* api = getApi();
OAIPetApi api;
api.setHost(PetStoreHost);
QEventLoop loop;
bool petCreated = false;

connect(api, &OAIPetApi::addPetSignal, [&]() {
connect(&api, &OAIPetApi::addPetSignal, [&]() {
// pet created
petCreated = true;
loop.quit();
Expand All @@ -52,95 +47,94 @@ void PetApiTests::createAndGetPetTest() {
OAIPet pet = createRandomPet();
qint64 id = pet.getId();

api->addPet(pet);
api.addPet(pet);
QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petCreated, "didn't finish within timeout");

bool petFetched = false;

connect(api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
connect(&api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
QVERIFY(pet.getId() > 0);
QVERIFY(pet.getStatus().compare("freaky") == 0);
loop.quit();
petFetched = true;
});

api->getPetById(id);
api.getPetById(id);
QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petFetched, "didn't finish within timeout");

delete api;
}

void PetApiTests::updatePetTest() {
OAIPetApi* api = getApi();
OAIPetApi api;
api.setHost(PetStoreHost);

OAIPet pet = createRandomPet();
OAIPet petToCheck;
qint64 id = pet.getId();
QEventLoop loop;
bool petAdded = false;

connect(api, &OAIPetApi::addPetSignal, [&](){
connect(&api, &OAIPetApi::addPetSignal, [&](){
petAdded = true;
loop.quit();
});

// create pet
api->addPet(pet);
api.addPet(pet);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petAdded, "didn't finish within timeout");

// fetch it

bool petFetched = false;
connect(api, &OAIPetApi::getPetByIdSignal, this, [&](OAIPet pet) {
connect(&api, &OAIPetApi::getPetByIdSignal, this, [&](OAIPet pet) {
petFetched = true;
petToCheck = pet;
loop.quit();
});

// create pet
api->getPetById(id);
api.getPetById(id);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petFetched, "didn't finish within timeout");

// update it
bool petUpdated = false;
connect(api, &OAIPetApi::updatePetSignal, [&]() {
connect(&api, &OAIPetApi::updatePetSignal, [&]() {
petUpdated = true;
loop.quit();
});

// update pet
petToCheck.setStatus(QString("scary"));
api->updatePet(petToCheck);
api.updatePet(petToCheck);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petUpdated, "didn't finish within timeout");

// check it
bool petFetched2 = false;
connect(api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
connect(&api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
petFetched2 = true;
QVERIFY(pet.getId() == petToCheck.getId());
QVERIFY(pet.getStatus().compare(petToCheck.getStatus()) == 0);
loop.quit();
});
api->getPetById(id);
api.getPetById(id);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petFetched2, "didn't finish within timeout");

delete api;
}

void PetApiTests::updatePetWithFormTest() {
OAIPetApi* api = getApi();
OAIPetApi api;
api.setHost(PetStoreHost);

OAIPet pet = createRandomPet();
OAIPet petToCheck;
Expand All @@ -149,54 +143,52 @@ void PetApiTests::updatePetWithFormTest() {

// create pet
bool petAdded = false;
connect(api, &OAIPetApi::addPetSignal, [&](){
connect(&api, &OAIPetApi::addPetSignal, [&](){
petAdded = true;
loop.quit();
});

api->addPet(pet);
api.addPet(pet);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petAdded, "didn't finish within timeout");

// fetch it
bool petFetched = false;
connect(api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
connect(&api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
petFetched = true;
petToCheck = pet;
loop.quit();
});

api->getPetById(id);
api.getPetById(id);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petFetched, "didn't finish within timeout");

// update it
bool petUpdated = false;
connect(api, &OAIPetApi::updatePetWithFormSignal, [&](){
connect(&api, &OAIPetApi::updatePetWithFormSignal, [&](){
petUpdated = true;
loop.quit();
});

QString name("gorilla");
api->updatePetWithForm(id, name, nullptr);
api.updatePetWithForm(id, name, nullptr);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petUpdated, "didn't finish within timeout");

// fetch it
bool petUpdated2 = false;
connect(api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
connect(&api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
petUpdated2 = true;
QVERIFY(pet.getName().compare(QString("gorilla")) == 0);
loop.quit();
});

api->getPetById(id);
api.getPetById(id);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(petUpdated2, "didn't finish within timeout");

delete api;
}
3 changes: 2 additions & 1 deletion samples/client/petstore/cpp-qt5/PetStore/PetApiTests.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ using namespace OpenAPI;
class PetApiTests: public QObject {
Q_OBJECT

OAIPetApi* getApi();
OAIPet createRandomPet();

private slots:
void findPetsByStatusTest();
void createAndGetPetTest();
void updatePetTest();
void updatePetWithFormTest();
private:
const QString PetStoreHost = QStringLiteral("http://petstore.swagger.io");
};
32 changes: 13 additions & 19 deletions samples/client/petstore/cpp-qt5/PetStore/StoreApiTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,20 @@
#include <QTimer>
#include <QDebug>

OAIStoreApi* StoreApiTests::getApi() {
auto api = new OAIStoreApi();
api->setHost("http://petstore.swagger.io");
return api;
}

void StoreApiTests::placeOrderTest() {
auto api = getApi();
OAIStoreApi api;
api.setHost(PetStoreHost);
QEventLoop loop;
bool orderPlaced = false;

connect(api, &OAIStoreApi::placeOrderSignal, [&](OAIOrder order) {
connect(&api, &OAIStoreApi::placeOrderSignal, [&](OAIOrder order) {
orderPlaced = true;
QVERIFY(order.getPetId() == 10000);
QVERIFY((order.getId() == 500));
qDebug() << order.getShipDate();
loop.quit();
});
connect(api, &OAIStoreApi::placeOrderSignalE, [&](){
connect(&api, &OAIStoreApi::placeOrderSignalE, [&](){
QFAIL("shouldn't trigger error");
loop.quit();
});
Expand All @@ -34,52 +29,51 @@ void StoreApiTests::placeOrderTest() {
order.setComplete(false);
order.setStatus("shipping");
order.setShipDate(QDateTime::currentDateTime());
api->placeOrder(order);
api.placeOrder(order);
QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(orderPlaced, "didn't finish within timeout");

delete api;
}

void StoreApiTests::getOrderByIdTest() {
auto api = getApi();
OAIStoreApi api;
api.setHost(PetStoreHost);
QEventLoop loop;
bool orderFetched = false;

connect(api, &OAIStoreApi::getOrderByIdSignal, [&](OAIOrder order) {
connect(&api, &OAIStoreApi::getOrderByIdSignal, [&](OAIOrder order) {
orderFetched = true;
QVERIFY(order.getPetId() == 10000);
QVERIFY((order.getId() == 500));
qDebug() << order.getShipDate();
loop.quit();
});

api->getOrderById(500);
api.getOrderById(500);
QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(orderFetched, "didn't finish within timeout");

delete api;
}

void StoreApiTests::getInventoryTest() {
auto api = getApi();
OAIStoreApi api;
api.setHost(PetStoreHost);
QEventLoop loop;
bool inventoryFetched = false;

connect(api, &OAIStoreApi::getInventorySignal, [&](QMap<QString, qint32> status) {
connect(&api, &OAIStoreApi::getInventorySignal, [&](QMap<QString, qint32> status) {
inventoryFetched = true;
for(const auto& key : status.keys()) {
qDebug() << (key) << " Quantities " << status.value(key);
}
loop.quit();
});

api->getInventory();
api.getInventory();
QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec();
QVERIFY2(inventoryFetched, "didn't finish within timeout");

delete api;
}
4 changes: 2 additions & 2 deletions samples/client/petstore/cpp-qt5/PetStore/StoreApiTests.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ using namespace OpenAPI;
class StoreApiTests: public QObject {
Q_OBJECT

OAIStoreApi* getApi();

private slots:
void placeOrderTest();
void getOrderByIdTest();
void getInventoryTest();
private:
const QString PetStoreHost = QStringLiteral("http://petstore.swagger.io");
};
Loading

0 comments on commit f901a84

Please sign in to comment.