conference-info-tester.cpp 7.90 KiB
/*
 * Copyright (c) 2010-2022 Belledonne Communications SARL.
 * This file is part of Liblinphone
 * (see https://gitlab.linphone.org/BC/public/liblinphone).
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * This program 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 Affero General Public License for more details.
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "c-wrapper/c-wrapper.h"
#include "c-wrapper/internal/c-tools.h"
#include "call/call-log.h"
#include "conference/conference-info.h"
#include "core/core-p.h"
#include "core/core.h"
#include "liblinphone_tester.h"
#include "tester_utils.h"
// =============================================================================
using namespace std;
using namespace LinphonePrivate;
static void get_conference_info_from_call_log() {
	LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
	const shared_ptr<Address> from = Address::toCpp(marie->identity)->getSharedFromThis();
	const shared_ptr<Address> to =
	    Address::create("sip:video-conf-test@sip.linphone.org;conf-id=K4lHv;gr=60610d90-d695-0009-b3a1-331c5842bae0");
	// Create a fake call log
	auto callLog =
	    CallLog::create(L_GET_CPP_PTR_FROM_C_OBJECT(marie->lc)->getSharedFromThis(), LinphoneCallIncoming, from, to);
	callLog->setDuration(120);
	callLog->setStatus(LinphoneCallSuccess);
	callLog->setQuality(1.0);
	callLog->setCallId("FTD9-zVeBW");
	// Create a conference info
	auto conferenceInfo = ConferenceInfo::create();
	conferenceInfo->setOrganizer(Address::toCpp(marie->identity)->getSharedFromThis());
	conferenceInfo->setUri(
	    Address::create("sip:video-conf-test@sip.linphone.org;gr=60610d90-d695-0009-b3a1-331c5842bae0;conf-id=K4lHv"));
	conferenceInfo->setDateTime(std::time(nullptr));
	conferenceInfo->setDuration(30);
	conferenceInfo->setSubject("Test de vidéo conférence");
	conferenceInfo->setDescription("Réunion pour parler de la vidéo conférence.");
	conferenceInfo->addParticipant(Address::create("sip:laure@sip.linphone.org"));
	L_GET_CPP_PTR_FROM_C_OBJECT(marie->lc)->reportConferenceCallEvent(EventLog::Type::ConferenceCallStarted, callLog,
	                                                                  conferenceInfo);
	BC_ASSERT_TRUE(callLog->wasConference());
	BC_ASSERT_PTR_NOT_NULL(callLog->getConferenceInfo());
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
linphone_core_manager_destroy(marie); } static void get_existing_conference_info_from_call_log() { LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); const shared_ptr<Address> from = Address::toCpp(marie->identity)->getSharedFromThis(); const shared_ptr<Address> to = Address::create("sip:video-conf-test@sip.linphone.org;conf-id=K4lHv;gr=60610d90-d695-0009-b3a1-331c5842bae0"); // Create a fake call log auto callLog = CallLog::create(L_GET_CPP_PTR_FROM_C_OBJECT(marie->lc)->getSharedFromThis(), LinphoneCallIncoming, from, to); callLog->setDuration(120); callLog->setStatus(LinphoneCallSuccess); callLog->setQuality(1.0); callLog->setCallId("FTD9-zVeBW"); // Create a conference info auto conferenceInfo = ConferenceInfo::create(); conferenceInfo->setOrganizer(Address::toCpp(marie->identity)->getSharedFromThis()); conferenceInfo->setUri( Address::create("sip:video-conf-test@sip.linphone.org;conf-id=K4lHv;gr=60610d90-d695-0009-b3a1-331c5842bae0")); conferenceInfo->setDateTime(std::time(nullptr)); conferenceInfo->setDuration(30); conferenceInfo->setSubject("Test de vidéo conférence"); conferenceInfo->setDescription("Réunion pour parler de la vidéo conférence."); conferenceInfo->addParticipant(Address::create("sip:laure@sip.linphone.org")); // First insert the conference info into DB L_GET_PRIVATE_FROM_C_OBJECT(marie->lc)->mainDb->insertConferenceInfo(conferenceInfo); // Report the call event without specifying the conference info L_GET_CPP_PTR_FROM_C_OBJECT(marie->lc)->reportConferenceCallEvent(EventLog::Type::ConferenceCallStarted, callLog, nullptr); BC_ASSERT_TRUE(callLog->wasConference()); BC_ASSERT_PTR_NOT_NULL(callLog->getConferenceInfo()); linphone_core_manager_destroy(marie); } static void last_outgoing_call_without_conference() { LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); const shared_ptr<Address> from = Address::toCpp(marie->identity)->getSharedFromThis(); const shared_ptr<Address> to = Address::create("sip:pauline@sip.linphone.org"); to->setDisplayName("PauPau"); // Create a fake call log auto callLog = CallLog::create(L_GET_CPP_PTR_FROM_C_OBJECT(marie->lc)->getSharedFromThis(), LinphoneCallOutgoing, from, to); callLog->setDuration(60); callLog->setStatus(LinphoneCallSuccess); callLog->setQuality(0.69f); callLog->setCallId("cAlL-iDdD"); // Report the call L_GET_CPP_PTR_FROM_C_OBJECT(marie->lc)->reportConferenceCallEvent(EventLog::Type::ConferenceCallStarted, callLog, nullptr); LinphoneCallLog *log = linphone_core_get_last_outgoing_call_log(marie->lc); BC_ASSERT_STRING_EQUAL("PauPau", linphone_address_get_display_name(linphone_call_log_get_to_address(log))); linphone_call_log_unref(log); const shared_ptr<Address> to2 = Address::create("sip:video-conf-test@sip.linphone.org;conf-id=K4lHv;gr=60610d90-d695-0009-b3a1-331c5842bae0"); // Create a new fake call log to a conference callLog =
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
CallLog::create(L_GET_CPP_PTR_FROM_C_OBJECT(marie->lc)->getSharedFromThis(), LinphoneCallOutgoing, from, to2); callLog->setDuration(120); callLog->setStatus(LinphoneCallSuccess); callLog->setQuality(1.0); callLog->setCallId("FTD9-zVeBW"); // Create a conference info auto conferenceInfo = ConferenceInfo::create(); conferenceInfo->setOrganizer(Address::toCpp(marie->identity)->getSharedFromThis()); conferenceInfo->setUri( Address::create("sip:video-conf-test@sip.linphone.org;gr=60610d90-d695-0009-b3a1-331c5842bae0;conf-id=K4lHv")); conferenceInfo->setDateTime(std::time(nullptr)); conferenceInfo->setDuration(30); conferenceInfo->setSubject("Test de vidéo conférence"); conferenceInfo->setDescription("Réunion pour parler de la vidéo conférence."); conferenceInfo->addParticipant(Address::create("sip:laure@sip.linphone.org")); // Report the call event without specifying the conference info L_GET_CPP_PTR_FROM_C_OBJECT(marie->lc)->reportConferenceCallEvent(EventLog::Type::ConferenceCallEnded, callLog, conferenceInfo); auto lastCall = L_GET_PRIVATE_FROM_C_OBJECT(marie->lc)->mainDb->getLastOutgoingCall(); BC_ASSERT_PTR_NOT_NULL(lastCall); if (lastCall != nullptr) { BC_ASSERT_TRUE(*lastCall->getToAddress() == *to); } linphone_core_manager_destroy(marie); } test_t conference_tests[] = { TEST_NO_TAG("Get conference info from call log", get_conference_info_from_call_log), TEST_NO_TAG("Get existing conference info from call log", get_existing_conference_info_from_call_log), TEST_NO_TAG("Last outgoing call does not return calls with conference info", last_outgoing_call_without_conference), }; test_suite_t conference_info_tester = {"Conference Info", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each, sizeof(conference_tests) / sizeof(conference_tests[0]), conference_tests, 0};