Update tests to prevent memory leakage (#4164)

Install C and C++ tools in Travis
This commit is contained in:
sunn 2019-10-17 11:48:35 +02:00 committed by GitHub
parent c32fa5d012
commit f901a84743
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 122 additions and 147 deletions

View File

@ -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). # - 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 # - . ~/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" #- 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 # install C++ tools
- sudo apt-get install valgrind - sudo apt install -y --no-install-recommends valgrind cmake build-essential
# install Qt 5.10 # install Qt5
# 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 apt install -y --no-install-recommends qt5-default
#- sudo add-apt-repository --yes ppa:beineri/opt-qt-5.10.1-trusty - cmake --version
#- sudo apt-get update -qq
#- sudo apt-get install qt510-meta-minimal
#- source /opt/qt510/bin/qt510-env.sh
#- qmake -v
# show host table to confirm petstore.swagger.io is mapped to localhost # show host table to confirm petstore.swagger.io is mapped to localhost
- cat /etc/hosts - cat /etc/hosts
# show java version # show java version

View File

@ -1037,7 +1037,7 @@
<module>samples/server/petstore/python-aiohttp</module> <module>samples/server/petstore/python-aiohttp</module>
<!-- clients --> <!-- clients -->
<module>samples/client/petstore/c</module> <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/elm-0.18</module>
<module>samples/client/petstore/rust</module> <module>samples/client/petstore/rust</module>
<!--<module>samples/client/petstore/perl</module>--> <!--<module>samples/client/petstore/perl</module>-->

View File

@ -3,12 +3,6 @@
#include <QTest> #include <QTest>
#include <QTimer> #include <QTimer>
OAIPetApi* PetApiTests::getApi() {
auto api = new OAIPetApi();
api->setHost("http://petstore.swagger.io");
return api;
}
OAIPet PetApiTests::createRandomPet() { OAIPet PetApiTests::createRandomPet() {
OAIPet pet; OAIPet pet;
qint64 id = QDateTime::currentMSecsSinceEpoch(); qint64 id = QDateTime::currentMSecsSinceEpoch();
@ -19,11 +13,12 @@ OAIPet PetApiTests::createRandomPet() {
} }
void PetApiTests::findPetsByStatusTest() { void PetApiTests::findPetsByStatusTest() {
OAIPetApi* api = getApi(); OAIPetApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool petFound = false; bool petFound = false;
connect(api, &OAIPetApi::findPetsByStatusSignal, [&](QList<OAIPet> pets) { connect(&api, &OAIPetApi::findPetsByStatusSignal, [&](QList<OAIPet> pets) {
petFound = true; petFound = true;
foreach(OAIPet pet, pets) { foreach(OAIPet pet, pets) {
QVERIFY(pet.getStatus().startsWith("available") || pet.getStatus().startsWith("sold")); QVERIFY(pet.getStatus().startsWith("available") || pet.getStatus().startsWith("sold"));
@ -31,19 +26,19 @@ void PetApiTests::findPetsByStatusTest() {
loop.quit(); loop.quit();
}); });
api->findPetsByStatus({"available", "sold"}); api.findPetsByStatus({"available", "sold"});
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petFound, "didn't finish within timeout"); QVERIFY2(petFound, "didn't finish within timeout");
delete api;
} }
void PetApiTests::createAndGetPetTest() { void PetApiTests::createAndGetPetTest() {
OAIPetApi* api = getApi(); OAIPetApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool petCreated = false; bool petCreated = false;
connect(api, &OAIPetApi::addPetSignal, [&]() { connect(&api, &OAIPetApi::addPetSignal, [&]() {
// pet created // pet created
petCreated = true; petCreated = true;
loop.quit(); loop.quit();
@ -52,30 +47,30 @@ void PetApiTests::createAndGetPetTest() {
OAIPet pet = createRandomPet(); OAIPet pet = createRandomPet();
qint64 id = pet.getId(); qint64 id = pet.getId();
api->addPet(pet); api.addPet(pet);
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petCreated, "didn't finish within timeout"); QVERIFY2(petCreated, "didn't finish within timeout");
bool petFetched = false; bool petFetched = false;
connect(api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) { connect(&api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
QVERIFY(pet.getId() > 0); QVERIFY(pet.getId() > 0);
QVERIFY(pet.getStatus().compare("freaky") == 0); QVERIFY(pet.getStatus().compare("freaky") == 0);
loop.quit(); loop.quit();
petFetched = true; petFetched = true;
}); });
api->getPetById(id); api.getPetById(id);
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petFetched, "didn't finish within timeout"); QVERIFY2(petFetched, "didn't finish within timeout");
delete api;
} }
void PetApiTests::updatePetTest() { void PetApiTests::updatePetTest() {
OAIPetApi* api = getApi(); OAIPetApi api;
api.setHost(PetStoreHost);
OAIPet pet = createRandomPet(); OAIPet pet = createRandomPet();
OAIPet petToCheck; OAIPet petToCheck;
@ -83,13 +78,13 @@ void PetApiTests::updatePetTest() {
QEventLoop loop; QEventLoop loop;
bool petAdded = false; bool petAdded = false;
connect(api, &OAIPetApi::addPetSignal, [&](){ connect(&api, &OAIPetApi::addPetSignal, [&](){
petAdded = true; petAdded = true;
loop.quit(); loop.quit();
}); });
// create pet // create pet
api->addPet(pet); api.addPet(pet);
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petAdded, "didn't finish within timeout"); QVERIFY2(petAdded, "didn't finish within timeout");
@ -97,50 +92,49 @@ void PetApiTests::updatePetTest() {
// fetch it // fetch it
bool petFetched = false; bool petFetched = false;
connect(api, &OAIPetApi::getPetByIdSignal, this, [&](OAIPet pet) { connect(&api, &OAIPetApi::getPetByIdSignal, this, [&](OAIPet pet) {
petFetched = true; petFetched = true;
petToCheck = pet; petToCheck = pet;
loop.quit(); loop.quit();
}); });
// create pet // create pet
api->getPetById(id); api.getPetById(id);
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petFetched, "didn't finish within timeout"); QVERIFY2(petFetched, "didn't finish within timeout");
// update it // update it
bool petUpdated = false; bool petUpdated = false;
connect(api, &OAIPetApi::updatePetSignal, [&]() { connect(&api, &OAIPetApi::updatePetSignal, [&]() {
petUpdated = true; petUpdated = true;
loop.quit(); loop.quit();
}); });
// update pet // update pet
petToCheck.setStatus(QString("scary")); petToCheck.setStatus(QString("scary"));
api->updatePet(petToCheck); api.updatePet(petToCheck);
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petUpdated, "didn't finish within timeout"); QVERIFY2(petUpdated, "didn't finish within timeout");
// check it // check it
bool petFetched2 = false; bool petFetched2 = false;
connect(api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) { connect(&api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
petFetched2 = true; petFetched2 = true;
QVERIFY(pet.getId() == petToCheck.getId()); QVERIFY(pet.getId() == petToCheck.getId());
QVERIFY(pet.getStatus().compare(petToCheck.getStatus()) == 0); QVERIFY(pet.getStatus().compare(petToCheck.getStatus()) == 0);
loop.quit(); loop.quit();
}); });
api->getPetById(id); api.getPetById(id);
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petFetched2, "didn't finish within timeout"); QVERIFY2(petFetched2, "didn't finish within timeout");
delete api;
} }
void PetApiTests::updatePetWithFormTest() { void PetApiTests::updatePetWithFormTest() {
OAIPetApi* api = getApi(); OAIPetApi api;
api.setHost(PetStoreHost);
OAIPet pet = createRandomPet(); OAIPet pet = createRandomPet();
OAIPet petToCheck; OAIPet petToCheck;
@ -149,54 +143,52 @@ void PetApiTests::updatePetWithFormTest() {
// create pet // create pet
bool petAdded = false; bool petAdded = false;
connect(api, &OAIPetApi::addPetSignal, [&](){ connect(&api, &OAIPetApi::addPetSignal, [&](){
petAdded = true; petAdded = true;
loop.quit(); loop.quit();
}); });
api->addPet(pet); api.addPet(pet);
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petAdded, "didn't finish within timeout"); QVERIFY2(petAdded, "didn't finish within timeout");
// fetch it // fetch it
bool petFetched = false; bool petFetched = false;
connect(api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) { connect(&api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
petFetched = true; petFetched = true;
petToCheck = pet; petToCheck = pet;
loop.quit(); loop.quit();
}); });
api->getPetById(id); api.getPetById(id);
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petFetched, "didn't finish within timeout"); QVERIFY2(petFetched, "didn't finish within timeout");
// update it // update it
bool petUpdated = false; bool petUpdated = false;
connect(api, &OAIPetApi::updatePetWithFormSignal, [&](){ connect(&api, &OAIPetApi::updatePetWithFormSignal, [&](){
petUpdated = true; petUpdated = true;
loop.quit(); loop.quit();
}); });
QString name("gorilla"); QString name("gorilla");
api->updatePetWithForm(id, name, nullptr); api.updatePetWithForm(id, name, nullptr);
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petUpdated, "didn't finish within timeout"); QVERIFY2(petUpdated, "didn't finish within timeout");
// fetch it // fetch it
bool petUpdated2 = false; bool petUpdated2 = false;
connect(api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) { connect(&api, &OAIPetApi::getPetByIdSignal, [&](OAIPet pet) {
petUpdated2 = true; petUpdated2 = true;
QVERIFY(pet.getName().compare(QString("gorilla")) == 0); QVERIFY(pet.getName().compare(QString("gorilla")) == 0);
loop.quit(); loop.quit();
}); });
api->getPetById(id); api.getPetById(id);
QTimer::singleShot(5000, &loop, &QEventLoop::quit); QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(petUpdated2, "didn't finish within timeout"); QVERIFY2(petUpdated2, "didn't finish within timeout");
delete api;
} }

View File

@ -7,7 +7,6 @@ using namespace OpenAPI;
class PetApiTests: public QObject { class PetApiTests: public QObject {
Q_OBJECT Q_OBJECT
OAIPetApi* getApi();
OAIPet createRandomPet(); OAIPet createRandomPet();
private slots: private slots:
@ -15,4 +14,6 @@ private slots:
void createAndGetPetTest(); void createAndGetPetTest();
void updatePetTest(); void updatePetTest();
void updatePetWithFormTest(); void updatePetWithFormTest();
private:
const QString PetStoreHost = QStringLiteral("http://petstore.swagger.io");
}; };

View File

@ -4,25 +4,20 @@
#include <QTimer> #include <QTimer>
#include <QDebug> #include <QDebug>
OAIStoreApi* StoreApiTests::getApi() {
auto api = new OAIStoreApi();
api->setHost("http://petstore.swagger.io");
return api;
}
void StoreApiTests::placeOrderTest() { void StoreApiTests::placeOrderTest() {
auto api = getApi(); OAIStoreApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool orderPlaced = false; bool orderPlaced = false;
connect(api, &OAIStoreApi::placeOrderSignal, [&](OAIOrder order) { connect(&api, &OAIStoreApi::placeOrderSignal, [&](OAIOrder order) {
orderPlaced = true; orderPlaced = true;
QVERIFY(order.getPetId() == 10000); QVERIFY(order.getPetId() == 10000);
QVERIFY((order.getId() == 500)); QVERIFY((order.getId() == 500));
qDebug() << order.getShipDate(); qDebug() << order.getShipDate();
loop.quit(); loop.quit();
}); });
connect(api, &OAIStoreApi::placeOrderSignalE, [&](){ connect(&api, &OAIStoreApi::placeOrderSignalE, [&](){
QFAIL("shouldn't trigger error"); QFAIL("shouldn't trigger error");
loop.quit(); loop.quit();
}); });
@ -34,20 +29,20 @@ void StoreApiTests::placeOrderTest() {
order.setComplete(false); order.setComplete(false);
order.setStatus("shipping"); order.setStatus("shipping");
order.setShipDate(QDateTime::currentDateTime()); order.setShipDate(QDateTime::currentDateTime());
api->placeOrder(order); api.placeOrder(order);
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(orderPlaced, "didn't finish within timeout"); QVERIFY2(orderPlaced, "didn't finish within timeout");
delete api;
} }
void StoreApiTests::getOrderByIdTest() { void StoreApiTests::getOrderByIdTest() {
auto api = getApi(); OAIStoreApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool orderFetched = false; bool orderFetched = false;
connect(api, &OAIStoreApi::getOrderByIdSignal, [&](OAIOrder order) { connect(&api, &OAIStoreApi::getOrderByIdSignal, [&](OAIOrder order) {
orderFetched = true; orderFetched = true;
QVERIFY(order.getPetId() == 10000); QVERIFY(order.getPetId() == 10000);
QVERIFY((order.getId() == 500)); QVERIFY((order.getId() == 500));
@ -55,20 +50,20 @@ void StoreApiTests::getOrderByIdTest() {
loop.quit(); loop.quit();
}); });
api->getOrderById(500); api.getOrderById(500);
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(orderFetched, "didn't finish within timeout"); QVERIFY2(orderFetched, "didn't finish within timeout");
delete api;
} }
void StoreApiTests::getInventoryTest() { void StoreApiTests::getInventoryTest() {
auto api = getApi(); OAIStoreApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool inventoryFetched = false; bool inventoryFetched = false;
connect(api, &OAIStoreApi::getInventorySignal, [&](QMap<QString, qint32> status) { connect(&api, &OAIStoreApi::getInventorySignal, [&](QMap<QString, qint32> status) {
inventoryFetched = true; inventoryFetched = true;
for(const auto& key : status.keys()) { for(const auto& key : status.keys()) {
qDebug() << (key) << " Quantities " << status.value(key); qDebug() << (key) << " Quantities " << status.value(key);
@ -76,10 +71,9 @@ void StoreApiTests::getInventoryTest() {
loop.quit(); loop.quit();
}); });
api->getInventory(); api.getInventory();
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(inventoryFetched, "didn't finish within timeout"); QVERIFY2(inventoryFetched, "didn't finish within timeout");
delete api;
} }

View File

@ -7,10 +7,10 @@ using namespace OpenAPI;
class StoreApiTests: public QObject { class StoreApiTests: public QObject {
Q_OBJECT Q_OBJECT
OAIStoreApi* getApi();
private slots: private slots:
void placeOrderTest(); void placeOrderTest();
void getOrderByIdTest(); void getOrderByIdTest();
void getInventoryTest(); void getInventoryTest();
private:
const QString PetStoreHost = QStringLiteral("http://petstore.swagger.io");
}; };

View File

@ -4,12 +4,6 @@
#include <QTimer> #include <QTimer>
#include <QDebug> #include <QDebug>
OAIUserApi* UserApiTests::getApi() {
auto api = new OAIUserApi();
api->setHost("http://petstore.swagger.io");
return api;
}
OAIUser UserApiTests::createRandomUser() { OAIUser UserApiTests::createRandomUser() {
OAIUser user; OAIUser user;
user.setId(QDateTime::currentMSecsSinceEpoch()); user.setId(QDateTime::currentMSecsSinceEpoch());
@ -24,29 +18,29 @@ OAIUser UserApiTests::createRandomUser() {
} }
void UserApiTests::createUserTest(){ void UserApiTests::createUserTest(){
auto api = getApi(); OAIUserApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool userCreated = false; bool userCreated = false;
connect(api, &OAIUserApi::createUserSignal, [&](){ connect(&api, &OAIUserApi::createUserSignal, [&](){
userCreated = true; userCreated = true;
loop.quit(); loop.quit();
}); });
api->createUser(createRandomUser()); api.createUser(createRandomUser());
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(userCreated, "didn't finish within timeout"); QVERIFY2(userCreated, "didn't finish within timeout");
delete api;
} }
void UserApiTests::createUsersWithArrayInputTest(){ void UserApiTests::createUsersWithArrayInputTest(){
auto api = getApi(); OAIUserApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool usersCreated = false; bool usersCreated = false;
connect(api, &OAIUserApi::createUsersWithArrayInputSignal, [&](){ connect(&api, &OAIUserApi::createUsersWithArrayInputSignal, [&](){
usersCreated = true; usersCreated = true;
loop.quit(); loop.quit();
}); });
@ -55,20 +49,19 @@ void UserApiTests::createUsersWithArrayInputTest(){
users.append(createRandomUser()); users.append(createRandomUser());
users.append(createRandomUser()); users.append(createRandomUser());
users.append(createRandomUser()); users.append(createRandomUser());
api->createUsersWithArrayInput(users); api.createUsersWithArrayInput(users);
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(usersCreated, "didn't finish within timeout"); QVERIFY2(usersCreated, "didn't finish within timeout");
delete api;
} }
void UserApiTests::createUsersWithListInputTest(){ void UserApiTests::createUsersWithListInputTest(){
auto api = getApi(); OAIUserApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool usersCreated = false; bool usersCreated = false;
connect(api, &OAIUserApi::createUsersWithListInputSignal, [&](){ connect(&api, &OAIUserApi::createUsersWithListInputSignal, [&](){
usersCreated = true; usersCreated = true;
loop.quit(); loop.quit();
}); });
@ -81,105 +74,98 @@ void UserApiTests::createUsersWithListInputTest(){
users.append(johndoe); users.append(johndoe);
users.append(rambo); users.append(rambo);
users.append(createRandomUser()); users.append(createRandomUser());
api->createUsersWithListInput(users); api.createUsersWithListInput(users);
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(usersCreated, "didn't finish within timeout"); QVERIFY2(usersCreated, "didn't finish within timeout");
delete api;
} }
void UserApiTests::deleteUserTest(){ void UserApiTests::deleteUserTest(){
auto api = getApi(); OAIUserApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool userDeleted = false; bool userDeleted = false;
connect(api, &OAIUserApi::deleteUserSignal, [&](){ connect(&api, &OAIUserApi::deleteUserSignal, [&](){
userDeleted = true; userDeleted = true;
loop.quit(); loop.quit();
}); });
api->deleteUser("rambo"); api.deleteUser("rambo");
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(userDeleted, "didn't finish within timeout"); QVERIFY2(userDeleted, "didn't finish within timeout");
delete api;
} }
void UserApiTests::getUserByNameTest(){ void UserApiTests::getUserByNameTest(){
auto api = getApi(); OAIUserApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool userFetched = false; bool userFetched = false;
connect(api, &OAIUserApi::getUserByNameSignal, [&](OAIUser summary) { connect(&api, &OAIUserApi::getUserByNameSignal, [&](OAIUser summary) {
userFetched = true; userFetched = true;
qDebug() << summary.getUsername(); qDebug() << summary.getUsername();
QVERIFY(summary.getUsername() == "johndoe"); QVERIFY(summary.getUsername() == "johndoe");
loop.quit(); loop.quit();
}); });
api->getUserByName("johndoe"); api.getUserByName("johndoe");
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(userFetched, "didn't finish within timeout"); QVERIFY2(userFetched, "didn't finish within timeout");
delete api;
} }
void UserApiTests::loginUserTest(){ void UserApiTests::loginUserTest(){
auto api = getApi(); OAIUserApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool userLogged = false; bool userLogged = false;
connect(api, &OAIUserApi::loginUserSignal, [&](QString summary) { connect(&api, &OAIUserApi::loginUserSignal, [&](QString summary) {
userLogged = true; userLogged = true;
qDebug() << summary; qDebug() << summary;
loop.quit(); loop.quit();
}); });
api->loginUser("johndoe", "123456789"); api.loginUser("johndoe", "123456789");
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(userLogged, "didn't finish within timeout"); QVERIFY2(userLogged, "didn't finish within timeout");
delete api;
} }
void UserApiTests::logoutUserTest(){ void UserApiTests::logoutUserTest(){
auto api = getApi(); OAIUserApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool userLoggedOut = false; bool userLoggedOut = false;
connect(api, &OAIUserApi::logoutUserSignal, [&](){ connect(&api, &OAIUserApi::logoutUserSignal, [&](){
userLoggedOut = true; userLoggedOut = true;
loop.quit(); loop.quit();
}); });
api->logoutUser(); api.logoutUser();
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(userLoggedOut, "didn't finish within timeout"); QVERIFY2(userLoggedOut, "didn't finish within timeout");
delete api;
} }
void UserApiTests::updateUserTest(){ void UserApiTests::updateUserTest(){
auto api = getApi(); OAIUserApi api;
api.setHost(PetStoreHost);
QEventLoop loop; QEventLoop loop;
bool userUpdated = false; bool userUpdated = false;
connect(api, &OAIUserApi::updateUserSignal, [&]() { connect(&api, &OAIUserApi::updateUserSignal, [&]() {
userUpdated = true; userUpdated = true;
loop.quit(); loop.quit();
}); });
auto johndoe = createRandomUser(); auto johndoe = createRandomUser();
johndoe.setUsername("johndoe"); johndoe.setUsername("johndoe");
api->updateUser("johndoe", johndoe); api.updateUser("johndoe", johndoe);
QTimer::singleShot(14000, &loop, &QEventLoop::quit); QTimer::singleShot(14000, &loop, &QEventLoop::quit);
loop.exec(); loop.exec();
QVERIFY2(userUpdated, "didn't finish within timeout"); QVERIFY2(userUpdated, "didn't finish within timeout");
delete api;
} }

View File

@ -7,7 +7,6 @@ using namespace OpenAPI;
class UserApiTests: public QObject { class UserApiTests: public QObject {
Q_OBJECT Q_OBJECT
OAIUserApi* getApi();
OAIUser createRandomUser(); OAIUser createRandomUser();
private slots: private slots:
@ -19,4 +18,6 @@ private slots:
void loginUserTest(); void loginUserTest();
void logoutUserTest(); void logoutUserTest();
void updateUserTest(); void updateUserTest();
private:
const QString PetStoreHost = QStringLiteral("http://petstore.swagger.io");
}; };

View File

@ -1,17 +1,21 @@
#!/bin/bash #!/bin/bash
set -e set -e
# export RUN_VALGRIND_TESTS=TRUE
mkdir -p build mkdir -p build
cd build cd build
qmake ../PetStore/PetStore.pro CONFIG+=debug cmake ..
make make
valgrind --leak-check=full ./PetStore |& tee result.log || exit 1 if [[ -z "${RUN_VALGRIND_TESTS}" ]]; then
echo "Running Qt5 Petstore Tests"
echo "Make sure the tests are launched:" ./cpp-qt5-petstore
else
echo "Running Qt5 Petstore Tests with Valgrind"
valgrind --leak-check=full ./cpp-qt5-petstore |& tee result.log || exit 1
testCount=$(cat result.log | grep 'Finished testing of' | wc -l) testCount=$(cat result.log | grep 'Finished testing of' | wc -l)
if [ $testCount == 3 ] if [ $testCount == 3 ]
then then
@ -40,3 +44,5 @@ else
echo "There was memory leaks!!!" echo "There was memory leaks!!!"
exit 1 exit 1
fi fi
fi