mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-07 22:02:12 +08:00
unittest: add test to check broken participant
Change-Id: I2e8e7c6ff7da0cb71db135184522e92f25aca0f3 GitLab: #779
This commit is contained in:

committed by
Adrien Béraud

parent
483b2b97ae
commit
b680c1cb86
@ -32,6 +32,8 @@
|
||||
#include "common.h"
|
||||
#include "media_const.h"
|
||||
#include "video/sinkclient.h"
|
||||
#include "sip/sipcall.h"
|
||||
#include "sip/siptransport.h"
|
||||
|
||||
using namespace DRing::Account;
|
||||
using namespace std::literals::chrono_literals;
|
||||
@ -99,6 +101,8 @@ private:
|
||||
void testHostAddRmSecondVideo();
|
||||
void testParticipantAddRmSecondVideo();
|
||||
void testPropagateRecording();
|
||||
void testBrokenParticipantAudioAndVideo();
|
||||
void testBrokenParticipantAudioOnly();
|
||||
|
||||
CPPUNIT_TEST_SUITE(ConferenceTest);
|
||||
CPPUNIT_TEST(testGetConference);
|
||||
@ -119,6 +123,8 @@ private:
|
||||
CPPUNIT_TEST(testHostAddRmSecondVideo);
|
||||
CPPUNIT_TEST(testParticipantAddRmSecondVideo);
|
||||
CPPUNIT_TEST(testPropagateRecording);
|
||||
CPPUNIT_TEST(testBrokenParticipantAudioAndVideo);
|
||||
CPPUNIT_TEST(testBrokenParticipantAudioOnly);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
// Common parts
|
||||
@ -140,7 +146,7 @@ private:
|
||||
std::condition_variable cv;
|
||||
|
||||
void registerSignalHandlers();
|
||||
void startConference(bool audioOnly = false);
|
||||
void startConference(bool audioOnly = false, bool addDavi = false);
|
||||
void hangupConference();
|
||||
};
|
||||
|
||||
@ -272,13 +278,15 @@ ConferenceTest::registerSignalHandlers()
|
||||
}
|
||||
|
||||
void
|
||||
ConferenceTest::startConference(bool audioOnly)
|
||||
ConferenceTest::startConference(bool audioOnly, bool addDavi)
|
||||
{
|
||||
auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
|
||||
auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
|
||||
auto carlaAccount = Manager::instance().getAccount<JamiAccount>(carlaId);
|
||||
auto daviAccount = Manager::instance().getAccount<JamiAccount>(daviId);
|
||||
auto bobUri = bobAccount->getUsername();
|
||||
auto carlaUri = carlaAccount->getUsername();
|
||||
auto daviUri = daviAccount->getUsername();
|
||||
|
||||
std::vector<std::map<std::string, std::string>> mediaList;
|
||||
if (audioOnly) {
|
||||
@ -313,6 +321,16 @@ ConferenceTest::startConference(bool audioOnly)
|
||||
return !confId.empty() && confChanged && !carlaCall.device.empty()
|
||||
&& !bobCall.device.empty();
|
||||
}));
|
||||
|
||||
if (addDavi) {
|
||||
JAMI_INFO("Start call between Alice and Davi");
|
||||
auto call1 = DRing::placeCallWithMedia(aliceId, daviUri, mediaList);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.callId.empty(); }));
|
||||
Manager::instance().answerCall(daviId, daviCall.callId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return daviCall.hostState == "CURRENT"; }));
|
||||
Manager::instance().addParticipant(aliceId, call1, aliceId, confId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.device.empty(); }));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -323,6 +341,9 @@ ConferenceTest::hangupConference()
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] {
|
||||
return bobCall.state == "OVER" && carlaCall.state == "OVER" && confId.empty();
|
||||
}));
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] {
|
||||
return daviCall.callId.empty() ? true : daviCall.state == "OVER";
|
||||
}));
|
||||
}
|
||||
|
||||
void
|
||||
@ -474,15 +495,7 @@ ConferenceTest::testMuteStatusAfterRemove()
|
||||
auto daviAccount = Manager::instance().getAccount<JamiAccount>(daviId);
|
||||
auto daviUri = daviAccount->getUsername();
|
||||
|
||||
startConference();
|
||||
|
||||
JAMI_INFO("Start call between Alice and Davi");
|
||||
auto call1 = DRing::placeCallWithMedia(aliceId, daviUri, {});
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.callId.empty(); }));
|
||||
Manager::instance().answerCall(daviId, daviCall.callId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return daviCall.hostState == "CURRENT"; }));
|
||||
Manager::instance().addParticipant(aliceId, call1, aliceId, confId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.device.empty(); }));
|
||||
startConference(false, true);
|
||||
|
||||
DRing::muteStream(aliceId, confId, daviUri, daviCall.device, daviCall.streamId, true);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 5s, [&] { return daviCall.moderatorMuted.load(); }));
|
||||
@ -518,24 +531,12 @@ ConferenceTest::testActiveStatusAfterRemove()
|
||||
auto daviAccount = Manager::instance().getAccount<JamiAccount>(daviId);
|
||||
auto daviUri = daviAccount->getUsername();
|
||||
|
||||
startConference();
|
||||
startConference(false, true);
|
||||
|
||||
MediaAttribute defaultAudio(MediaType::MEDIA_AUDIO);
|
||||
defaultAudio.label_ = "audio_0";
|
||||
defaultAudio.enabled_ = true;
|
||||
|
||||
JAMI_INFO("Start call between Alice and Davi");
|
||||
auto call1 = DRing::placeCallWithMedia(aliceId,
|
||||
daviUri,
|
||||
MediaAttribute::mediaAttributesToMediaMaps(
|
||||
{defaultAudio}));
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.callId.empty(); }));
|
||||
Manager::instance().answerCall(daviId, daviCall.callId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return daviCall.hostState == "CURRENT"; }));
|
||||
Manager::instance().addParticipant(aliceId, call1, aliceId, confId);
|
||||
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.device.empty(); }));
|
||||
|
||||
DRing::setActiveStream(aliceId, confId, daviUri, daviCall.device, daviCall.streamId, true);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 5s, [&] { return daviCall.active.load(); }));
|
||||
|
||||
@ -575,7 +576,7 @@ ConferenceTest::testHandsUp()
|
||||
auto daviAccount = Manager::instance().getAccount<JamiAccount>(daviId);
|
||||
auto daviUri = daviAccount->getUsername();
|
||||
|
||||
startConference();
|
||||
startConference(false, true);
|
||||
|
||||
JAMI_INFO("Play with raise hand");
|
||||
DRing::raiseHand(bobId, bobCall.callId, bobUri, bobCall.device, true);
|
||||
@ -584,13 +585,6 @@ ConferenceTest::testHandsUp()
|
||||
DRing::raiseHand(bobId, bobCall.callId, bobUri, bobCall.device, false);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 5s, [&] { return !bobCall.raisedHand.load(); }));
|
||||
|
||||
JAMI_INFO("Start call between Alice and Davi");
|
||||
auto call1 = DRing::placeCallWithMedia(aliceId, daviUri, {});
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.callId.empty(); }));
|
||||
Manager::instance().answerCall(daviId, daviCall.callId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return daviCall.hostState == "CURRENT"; }));
|
||||
Manager::instance().addParticipant(aliceId, call1, aliceId, confId);
|
||||
|
||||
// Remove davi from moderators
|
||||
DRing::setModerator(aliceId, confId, daviUri, false);
|
||||
|
||||
@ -732,15 +726,7 @@ ConferenceTest::testHangup()
|
||||
auto daviAccount = Manager::instance().getAccount<JamiAccount>(daviId);
|
||||
auto daviUri = daviAccount->getUsername();
|
||||
|
||||
startConference();
|
||||
|
||||
JAMI_INFO("Start call between Alice and Davi");
|
||||
auto call1 = DRing::placeCallWithMedia(aliceId, daviUri, {});
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.callId.empty(); }));
|
||||
Manager::instance().answerCall(daviId, daviCall.callId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return daviCall.hostState == "CURRENT"; }));
|
||||
Manager::instance().addParticipant(aliceId, call1, aliceId, confId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 20s, [&] { return !daviCall.device.empty(); }));
|
||||
startConference(false, true);
|
||||
|
||||
DRing::hangupParticipant(carlaId, confId, daviUri, daviCall.device); // Unauthorized
|
||||
CPPUNIT_ASSERT(!cv.wait_for(lk, 10s, [&] { return daviCall.state == "OVER"; }));
|
||||
@ -919,6 +905,58 @@ ConferenceTest::testPropagateRecording()
|
||||
DRing::unregisterSignalHandlers();
|
||||
}
|
||||
|
||||
void
|
||||
ConferenceTest::testBrokenParticipantAudioAndVideo()
|
||||
{
|
||||
registerSignalHandlers();
|
||||
|
||||
// Start conference with four participants
|
||||
startConference(false, true);
|
||||
auto expectedNumberOfParticipants = 4;
|
||||
|
||||
// Check participants number
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]{ return pInfos_.size() == expectedNumberOfParticipants; }));
|
||||
|
||||
// Crash participant
|
||||
auto daviAccount = Manager::instance().getAccount<JamiAccount>(daviId);
|
||||
auto call2Crash = std::dynamic_pointer_cast<SIPCall>(daviAccount->getCall(daviCall.callId));
|
||||
pjsip_transport_shutdown(call2Crash->getTransport()->get());
|
||||
|
||||
// Check participants number
|
||||
// It should have one less participant than in the conference start
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]{ return expectedNumberOfParticipants - 1 == pInfos_.size(); }));
|
||||
|
||||
hangupConference();
|
||||
|
||||
DRing::unregisterSignalHandlers();
|
||||
}
|
||||
|
||||
void
|
||||
ConferenceTest::testBrokenParticipantAudioOnly()
|
||||
{
|
||||
registerSignalHandlers();
|
||||
|
||||
// Start conference with four participants
|
||||
startConference(true, true);
|
||||
auto expectedNumberOfParticipants = 4;
|
||||
|
||||
// Check participants number
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]{ return pInfos_.size() == expectedNumberOfParticipants; }));
|
||||
|
||||
// Crash participant
|
||||
auto daviAccount = Manager::instance().getAccount<JamiAccount>(daviId);
|
||||
auto call2Crash = std::dynamic_pointer_cast<SIPCall>(daviAccount->getCall(daviCall.callId));
|
||||
pjsip_transport_shutdown(call2Crash->getTransport()->get());
|
||||
|
||||
// Check participants number
|
||||
// It should have one less participant than in the conference start
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]{ return expectedNumberOfParticipants - 1 == pInfos_.size(); }));
|
||||
|
||||
hangupConference();
|
||||
|
||||
DRing::unregisterSignalHandlers();
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
} // namespace jami
|
||||
|
||||
|
Reference in New Issue
Block a user