-
Julien Wadel authored
Adapt suites declarations.
cdbc47a0
/*
* 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/>.
*/
#ifdef __APPLE__
#include "TargetConditionals.h"
#endif
#include "bctoolbox/crypto.h"
#include "bctoolbox/defs.h"
#include "liblinphone_tester.h"
#include "linphone/api/c-chat-room-params.h"
#include "linphone/api/c-types.h"
#include "linphone/core.h"
#include "linphone/wrapper_utils.h"
#include "tester_utils.h"
#if TARGET_OS_IPHONE
#include <pthread.h>
#endif
#define TEST_GROUP_ID "test group id"
struct get_msg_args {
LinphoneCoreManager *sender_mgr;
LinphoneCoreManager *receiver_mgr;
// msg
const char *text;
const char *call_id;
// chat room
LinphoneChatRoom *sender_cr;
const char *subject;
};
static void shared_main_core_prevent_executor_core_start(void) {
#if TARGET_OS_IPHONE
LinphoneCoreManager *main_mgr;
LinphoneCoreManager *executor_mgr;
main_mgr = linphone_core_manager_create_shared("marie_rc", TEST_GROUP_ID, TRUE, NULL);
executor_mgr = linphone_core_manager_create_shared("", TEST_GROUP_ID, FALSE, main_mgr);
linphone_core_manager_start(main_mgr, TRUE);
BC_ASSERT_TRUE(wait_for_until(main_mgr->lc, NULL, &main_mgr->stat.number_of_LinphoneGlobalOn, 1, 2000));
BC_ASSERT_EQUAL(linphone_core_start(executor_mgr->lc), -1, int, "%d");
linphone_core_manager_destroy(main_mgr);
linphone_core_manager_destroy(executor_mgr);
#endif
}
void *thread_shared_main_core_stops_executor_core(BCTBX_UNUSED(void *arguments)) {
#if TARGET_OS_IPHONE
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
LinphoneCoreManager *executor_mgr = (LinphoneCoreManager *)arguments;
LinphoneCoreManager *main_mgr = linphone_core_manager_create_shared("", TEST_GROUP_ID, TRUE, executor_mgr);
ms_sleep(5); // for synchro with main thread
linphone_core_manager_start(main_mgr, TRUE);
BC_ASSERT_TRUE(wait_for_until(main_mgr->lc, NULL, &main_mgr->stat.number_of_LinphoneGlobalOn, 1, 2000));
linphone_core_manager_destroy(main_mgr);
pthread_exit(NULL);
#endif
return NULL;
}
static void shared_main_core_stops_executor_core(void) {
#if TARGET_OS_IPHONE
LinphoneCoreManager *executor_mgr;
executor_mgr = linphone_core_manager_create_shared("marie_rc", TEST_GROUP_ID, FALSE, NULL);
linphone_core_manager_start(executor_mgr, TRUE);
BC_ASSERT_TRUE(wait_for_until(executor_mgr->lc, NULL, &executor_mgr->stat.number_of_LinphoneGlobalOn, 1, 2000));
pthread_t main_core_thread;
if (pthread_create(&main_core_thread, NULL, &thread_shared_main_core_stops_executor_core, (void *)executor_mgr)) {
ms_fatal("Error creating main_core_thread thread");
}
// linphone_core_stop() will be called by this when main core try to start
linphone_core_get_new_message_from_callid(executor_mgr->lc, "dummy_call_id");
BC_ASSERT_TRUE(
wait_for_until(executor_mgr->lc, NULL, &executor_mgr->stat.number_of_LinphoneGlobalShutdown, 1, 2000));
if (pthread_join(main_core_thread, NULL)) {
ms_fatal("Error joining thread main_core_thread");
}
BC_ASSERT_TRUE(linphone_core_get_global_state(executor_mgr->lc) == LinphoneGlobalOff);
linphone_core_manager_destroy(executor_mgr);
#endif
}
const char *
shared_core_send_msg_and_get_call_id(LinphoneCoreManager *sender, LinphoneCoreManager *receiver, const char *text) {
stats initial_sender_stat = sender->stat;
const char *content_type = "text/plain";
LinphoneChatRoom *room = linphone_core_get_chat_room(sender->lc, receiver->identity);
LinphoneChatMessage *msg = linphone_chat_room_create_message_from_utf8(room, text);
linphone_chat_message_set_content_type(msg, content_type);
LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(msg);
linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed);
linphone_chat_message_send(msg);
BC_ASSERT_TRUE(wait_for_until(sender->lc, NULL, &sender->stat.number_of_LinphoneMessageDelivered,
initial_sender_stat.number_of_LinphoneMessageDelivered + 1, 30000));
const char *call_id = linphone_chat_message_get_message_id(msg);
linphone_chat_message_unref(msg);
BC_ASSERT_FALSE(strcmp(call_id, "") == 0);
return ms_strdup(call_id);
}
// receiver needs to be a shared core
void shared_core_get_message_from_call_id(LinphoneCoreManager *sender_mgr,
LinphoneCore *receiver,
const char *text,
const char *call_id) {
BC_ASSERT_PTR_NOT_NULL(call_id);
if (call_id != NULL) {
LinphonePushNotificationMessage *received_msg = linphone_core_get_new_message_from_callid(receiver, call_id);
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
BC_ASSERT_PTR_NOT_NULL(received_msg);
if (received_msg != NULL) {
LinphoneProxyConfig *receiver_cfg = linphone_core_get_proxy_config_list(receiver)->data;
const LinphoneAddress *receiver_addr = linphone_proxy_config_get_identity_address(receiver_cfg);
const LinphoneAddress *local_addr = linphone_push_notification_message_get_local_addr(received_msg);
BC_ASSERT_STRING_EQUAL(linphone_address_get_username(receiver_addr),
linphone_address_get_username(local_addr));
linphone_address_unref((LinphoneAddress *)local_addr);
LinphoneProxyConfig *sender_cfg = linphone_core_get_proxy_config_list(sender_mgr->lc)->data;
const LinphoneAddress *sender_addr = linphone_proxy_config_get_identity_address(sender_cfg);
const LinphoneAddress *from_addr = linphone_push_notification_message_get_from_addr(received_msg);
BC_ASSERT_STRING_EQUAL(linphone_address_get_username(sender_addr),
linphone_address_get_username(from_addr));
linphone_address_unref((LinphoneAddress *)from_addr);
BC_ASSERT_STRING_EQUAL(linphone_push_notification_message_get_text_content(received_msg), text);
linphone_push_notification_message_unref(received_msg);
}
}
}
void *thread_shared_core_get_message_from_call_id(BCTBX_UNUSED(void *arguments)) {
#if TARGET_OS_IPHONE
struct get_msg_args *args = (struct get_msg_args *)arguments;
LinphoneCoreManager *receiver_mgr =
linphone_core_manager_create_shared("", TEST_GROUP_ID, FALSE, args->receiver_mgr);
shared_core_get_message_from_call_id(args->sender_mgr, receiver_mgr->lc, args->text, args->call_id);
linphone_core_manager_destroy(receiver_mgr);
pthread_exit(NULL);
#endif
return NULL;
}
static void shared_executor_core_get_message_by_starting_a_core(void) {
#if TARGET_OS_IPHONE
const char *text = "Bli bli bli \n blu";
LinphoneCoreManager *sender_mgr = linphone_core_manager_new("marie_rc");
LinphoneCoreManager *receiver_mgr = linphone_core_manager_create_shared("pauline_rc", TEST_GROUP_ID, FALSE, NULL);
linphone_core_manager_start(receiver_mgr, TRUE);
const char *call_id = shared_core_send_msg_and_get_call_id(sender_mgr, receiver_mgr, text);
if (call_id) {
// This is an executor core. No other executor core is started so it can get the msg.
shared_core_get_message_from_call_id(sender_mgr, receiver_mgr->lc, text, call_id);
ms_free((void *)call_id);
}
linphone_core_manager_destroy(sender_mgr);
linphone_core_manager_destroy(receiver_mgr);
#endif
}
static void shared_executor_core_get_message_with_user_defaults_mono_thread(void) {
#if TARGET_OS_IPHONE
/* mono thread means that the msg in already in the user defaults when the executor core start */
const char *text = "Bli bli bli \n blu";
LinphoneCoreManager *sender_mgr = linphone_core_manager_new("marie_rc");
LinphoneCoreManager *main_mgr = linphone_core_manager_create_shared("pauline_rc", TEST_GROUP_ID, TRUE, NULL);
linphone_core_manager_start(main_mgr, TRUE);
const char *call_id = shared_core_send_msg_and_get_call_id(sender_mgr, main_mgr, text);
BC_ASSERT_TRUE(
wait_for_until(main_mgr->lc, sender_mgr->lc, &main_mgr->stat.number_of_LinphoneMessageReceived, 1, 30000));
if (call_id) {
LinphoneCoreManager *executor_mgr =
linphone_core_manager_create_shared("pauline_rc", TEST_GROUP_ID, FALSE, NULL);
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
shared_core_get_message_from_call_id(sender_mgr, executor_mgr->lc, text, call_id);
ms_free((void *)call_id);
linphone_core_manager_destroy(executor_mgr);
}
linphone_core_manager_destroy(sender_mgr);
linphone_core_manager_destroy(main_mgr);
#endif
}
static void shared_executor_core_get_message_with_user_defaults_multi_thread(void) {
#if TARGET_OS_IPHONE
/* multi thread means that the executor core waits for the msg to be written by the main core into the user defaults
*/
const char *text = "Bli bli bli \n blu";
const char *secondText = "Blu blu blu \n bli";
LinphoneCoreManager *sender_mgr = linphone_core_manager_new("marie_rc");
LinphoneCoreManager *main_mgr = linphone_core_manager_create_shared("pauline_rc", TEST_GROUP_ID, TRUE, NULL);
linphone_core_manager_start(main_mgr, TRUE);
const char *callid = shared_core_send_msg_and_get_call_id(sender_mgr, main_mgr, text);
BC_ASSERT_TRUE(
wait_for_until(main_mgr->lc, sender_mgr->lc, &main_mgr->stat.number_of_LinphoneMessageReceived, 1, 50000));
pthread_t executor;
struct get_msg_args *args = ms_malloc(sizeof(struct get_msg_args));
args->sender_mgr = sender_mgr;
args->receiver_mgr = main_mgr;
args->text = text;
args->call_id = callid;
if (pthread_create(&executor, NULL, &thread_shared_core_get_message_from_call_id, (void *)args)) {
ms_fatal("Error creating executor thread");
}
// make sure that executor core is waiting for the msg before we send it
ms_sleep(1);
shared_core_send_msg_and_get_call_id(sender_mgr, main_mgr, secondText);
BC_ASSERT_TRUE(
wait_for_until(main_mgr->lc, sender_mgr->lc, &main_mgr->stat.number_of_LinphoneMessageReceived, 2, 50000));
if (pthread_join(executor, NULL)) {
ms_fatal("Error joining thread executor");
}
ms_free(args);
linphone_core_manager_destroy(sender_mgr);
linphone_core_manager_destroy(main_mgr);
#endif
}
static void two_shared_executor_cores_get_messages(void) {
#if TARGET_OS_IPHONE
LinphoneCoreManager *sender_mgr = linphone_core_manager_new("marie_rc");
LinphoneCoreManager *receiver_mgr = linphone_core_manager_create_shared("pauline_rc", TEST_GROUP_ID, FALSE, NULL);
linphone_core_manager_start(receiver_mgr, TRUE);
const char *call_id1 = shared_core_send_msg_and_get_call_id(sender_mgr, receiver_mgr, "message1");
if (strcmp(call_id1, "") == 0) return;
const char *call_id2 = shared_core_send_msg_and_get_call_id(sender_mgr, receiver_mgr, "message2");
if (strcmp(call_id2, "") == 0) return;
linphone_core_stop(receiver_mgr->lc);
pthread_t executor1;
struct get_msg_args *args1 = ms_malloc(sizeof(struct get_msg_args));
args1->sender_mgr = sender_mgr;
args1->receiver_mgr = receiver_mgr;
args1->text = "message1";
args1->call_id = call_id1;
if (pthread_create(&executor1, NULL, &thread_shared_core_get_message_from_call_id, (void *)args1)) {
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
ms_fatal("Error creating executor1 thread");
}
ms_sleep(5);
pthread_t executor2;
struct get_msg_args *args2 = ms_malloc(sizeof(struct get_msg_args));
args2->sender_mgr = sender_mgr;
args2->receiver_mgr = receiver_mgr;
args2->text = "message2";
args2->call_id = call_id2;
if (pthread_create(&executor2, NULL, &thread_shared_core_get_message_from_call_id, (void *)args2)) {
ms_fatal("Error creating executor2 thread");
}
if (pthread_join(executor1, NULL)) {
ms_fatal("Error joining thread executor1");
}
if (pthread_join(executor2, NULL)) {
ms_fatal("Error joining thread executor2");
}
ms_free(args1);
ms_free(args2);
if (call_id1) {
ms_free((void *)call_id1);
}
if (call_id2) {
ms_free((void *)call_id2);
}
linphone_core_manager_destroy(receiver_mgr);
linphone_core_manager_destroy(sender_mgr);
#endif
}
LinphoneChatRoom *
shared_core_create_chat_room(LinphoneCoreManager *sender, LinphoneCoreManager *receiver, const char *subject) {
LinphoneAddress *receiverAddr = linphone_address_new(linphone_core_get_identity(receiver->lc));
bctbx_list_t *participantsAddresses = bctbx_list_append(NULL, (void *)receiverAddr);
LinphoneChatRoomParams *params = linphone_core_create_default_chat_room_params(sender->lc);
// Should create a one-to-one flexisip chat
linphone_chat_room_params_set_backend(params, LinphoneChatRoomBackendFlexisipChat);
linphone_chat_room_params_enable_group(params, TRUE);
LinphoneChatRoom *senderCr = linphone_core_create_chat_room_2(sender->lc, params, subject, participantsAddresses);
linphone_chat_room_params_unref(params);
BC_ASSERT_PTR_NOT_NULL(senderCr);
BC_ASSERT_TRUE(wait_for_until(sender->lc, NULL, &sender->stat.number_of_LinphoneConferenceStateCreated, 1, 10000));
LinphoneAddress *senderAddr =
linphone_address_new(linphone_proxy_config_get_identity(linphone_core_get_default_proxy_config(sender->lc)));
BC_ASSERT_TRUE(linphone_address_weak_equal(linphone_chat_room_get_local_address(senderCr), senderAddr));
linphone_address_unref(senderAddr);
bctbx_list_free_with_data(participantsAddresses, (bctbx_list_free_func)linphone_address_unref);
BC_ASSERT_PTR_NOT_NULL(senderCr);
linphone_chat_room_unref(senderCr);
return senderCr;
}
// receiver needs to be a shared core
void shared_core_get_new_chat_room_from_addr(LinphoneCoreManager *sender,
LinphoneCoreManager *receiver,
LinphoneChatRoom *senderCr,
const char *subject) {
const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(senderCr);
BC_ASSERT_PTR_NOT_NULL(confAddr);
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
if (confAddr) {
LinphoneChatRoom *receiverCr =
linphone_core_get_new_chat_room_from_conf_addr(receiver->lc, linphone_address_get_username(confAddr));
BC_ASSERT_PTR_NOT_NULL(receiverCr);
if (receiverCr != NULL) {
ms_message("chat room [%p] chat room params [%p]", receiverCr,
linphone_chat_room_get_current_params(receiverCr));
LinphoneAddress *receiverAddr = linphone_address_new(linphone_core_get_identity(receiver->lc));
BC_ASSERT_TRUE(strcmp(linphone_chat_room_get_subject(receiverCr), subject) == 0);
BC_ASSERT_TRUE(linphone_address_weak_equal(linphone_chat_room_get_local_address(receiverCr), receiverAddr));
linphone_address_unref(receiverAddr);
stats mgrStats = receiver->stat;
linphone_core_delete_chat_room(receiver->lc, receiverCr);
BC_ASSERT_TRUE(wait_for_until(receiver->lc, sender->lc,
&receiver->stat.number_of_LinphoneConferenceStateDeleted,
mgrStats.number_of_LinphoneConferenceStateDeleted + 1, 10000));
}
}
}
void *thread_shared_core_get_new_chat_room_from_addr(BCTBX_UNUSED(void *arguments)) {
#if TARGET_OS_IPHONE
struct get_msg_args *args = (struct get_msg_args *)arguments;
LinphoneCoreManager *receiver_mgr =
linphone_core_manager_create_shared("", TEST_GROUP_ID, FALSE, args->receiver_mgr);
bctbx_list_t *coresManagerList = NULL;
coresManagerList = bctbx_list_append(coresManagerList, receiver_mgr);
init_core_for_conference(coresManagerList);
shared_core_get_new_chat_room_from_addr(args->sender_mgr, receiver_mgr, args->sender_cr, args->subject);
linphone_core_manager_destroy(receiver_mgr);
pthread_exit(NULL);
#endif
return NULL;
}
static void shared_executor_core_get_chat_room(void) {
#if TARGET_OS_IPHONE
const char *subject = "new chat room";
LinphoneCoreManager *sender = linphone_core_manager_create("marie_rc");
LinphoneCoreManager *receiver = linphone_core_manager_create_shared("pauline_rc", TEST_GROUP_ID, FALSE, NULL);
bctbx_list_t *coresManagerList = NULL;
coresManagerList = bctbx_list_append(coresManagerList, sender);
coresManagerList = bctbx_list_append(coresManagerList, receiver);
bctbx_list_t *coresList = init_core_for_conference(coresManagerList);
start_core_for_conference(coresManagerList);
LinphoneChatRoom *senderCr = shared_core_create_chat_room(sender, receiver, subject);
if (senderCr) {
shared_core_get_new_chat_room_from_addr(sender, receiver, senderCr, subject);
linphone_core_manager_delete_chat_room(sender, senderCr, coresList);
}
bctbx_list_free(coresList);
bctbx_list_free(coresManagerList);
linphone_core_manager_destroy(sender);
linphone_core_manager_destroy(receiver);
#endif
}
static void two_shared_executor_cores_get_message_and_chat_room(void) {
#if TARGET_OS_IPHONE
const char *subject = "new chat room";
const char *text = "message";
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
LinphoneCoreManager *sender = linphone_core_manager_create("marie_rc");
LinphoneCoreManager *receiver = linphone_core_manager_create_shared("pauline_rc", TEST_GROUP_ID, FALSE, NULL);
bctbx_list_t *coresManagerList = NULL;
coresManagerList = bctbx_list_append(coresManagerList, sender);
coresManagerList = bctbx_list_append(coresManagerList, receiver);
init_core_for_conference(coresManagerList);
start_core_for_conference(coresManagerList);
LinphoneChatRoom *senderCr = shared_core_create_chat_room(sender, receiver, subject);
if (senderCr == NULL) return;
const char *call_id = shared_core_send_msg_and_get_call_id(sender, receiver, text);
if (strcmp(call_id, "") == 0) return;
linphone_core_set_network_reachable(receiver->lc, FALSE);
linphone_core_stop(receiver->lc);
pthread_t executor1;
struct get_msg_args *args1 = ms_malloc(sizeof(struct get_msg_args));
args1->sender_mgr = sender;
args1->receiver_mgr = receiver;
args1->subject = subject;
args1->sender_cr = senderCr;
if (pthread_create(&executor1, NULL, &thread_shared_core_get_new_chat_room_from_addr, (void *)args1)) {
ms_fatal("Error creating executor2 thread");
}
ms_sleep(5);
pthread_t executor2;
struct get_msg_args *args2 = ms_malloc(sizeof(struct get_msg_args));
args2->sender_mgr = sender;
args2->receiver_mgr = receiver;
args2->text = text;
args2->call_id = call_id;
if (pthread_create(&executor2, NULL, &thread_shared_core_get_message_from_call_id, (void *)args2)) {
ms_fatal("Error creating executor1 thread");
}
if (pthread_join(executor1, NULL)) {
ms_fatal("Error joining thread executor1");
}
if (pthread_join(executor2, NULL)) {
ms_fatal("Error joining thread executor2");
}
ms_free(args1);
ms_free(args2);
if (call_id) {
ms_free((void *)call_id);
}
linphone_core_delete_chat_room(sender->lc, senderCr);
BC_ASSERT_TRUE(wait_for_until(sender->lc, NULL, &sender->stat.number_of_LinphoneConferenceStateDeleted, 1, 10000));
linphone_core_manager_destroy(receiver);
linphone_core_manager_destroy(sender);
#endif
}
static void stop_async_core_when_belle_sip_task_failed(void) {
#if TARGET_OS_IPHONE
if (!linphone_factory_is_database_storage_available(linphone_factory_get())) {
ms_warning("Test skipped, database storage is not available");
return;
}
491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
LinphoneCoreManager *pauline = linphone_core_manager_create2("pauline_tcp_rc", NULL);
// simulate bad net work to trash the message without generating error
linphone_config_set_bool(linphone_core_get_config(pauline->lc), "net", "bad_net", 1);
linphone_core_manager_start(pauline, TRUE);
linphone_im_notif_policy_enable_all(linphone_core_get_im_notif_policy(marie->lc));
linphone_im_notif_policy_enable_all(linphone_core_get_im_notif_policy(pauline->lc));
LinphoneChatRoom *chat_room = linphone_core_get_chat_room(marie->lc, pauline->identity);
LinphoneChatMessage *msg = linphone_chat_room_create_message_from_utf8(chat_room, "Bli bli bli \n blu");
LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(msg);
BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageSent, 0, int, "%d");
linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed);
linphone_chat_message_send(msg);
char *message_id = ms_strdup(linphone_chat_message_get_message_id(msg));
BC_ASSERT_STRING_NOT_EQUAL(message_id, "");
BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneMessageReceived, 1));
linphone_core_stop_async(pauline->lc);
BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneMessageDelivered, 0));
BC_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneGlobalOff,
pauline->stat.number_of_LinphoneGlobalOff + 1, 30000));
ms_free(message_id);
linphone_chat_message_unref(msg);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
#endif
}
static void shared_executor_core_doesnt_modify_rc_file_when_main_shared_core_is_started(void) {
#if TARGET_OS_IPHONE
LinphoneCoreManager *main_mgr = linphone_core_manager_create_shared("marie_rc", TEST_GROUP_ID, TRUE, NULL);
LinphoneCoreManager *executor_mgr = linphone_core_manager_create_shared("", TEST_GROUP_ID, FALSE, main_mgr);
linphone_core_manager_start(main_mgr, TRUE);
BC_ASSERT_TRUE(wait_for_until(main_mgr->lc, NULL, &main_mgr->stat.number_of_LinphoneGlobalOn, 1, 2000));
LinphoneConfig *config = linphone_core_get_config(main_mgr->lc);
struct stat fileStat;
stat(linphone_config_get_filename(config), &fileStat);
time_t last_modified_time = fileStat.st_mtimespec.tv_sec;
BC_ASSERT_EQUAL(linphone_core_start(executor_mgr->lc), -1, int, "%d");
config = linphone_core_get_config(executor_mgr->lc);
stat(linphone_config_get_filename(config), &fileStat);
BC_ASSERT_EQUAL(last_modified_time, fileStat.st_mtimespec.tv_sec, time_t, "%ld");
linphone_core_manager_destroy(main_mgr);
linphone_core_manager_destroy(executor_mgr);
#endif
}
test_t shared_core_tests[] = {
TEST_NO_TAG("Executor Shared Core can't start because Main Shared Core runs",
shared_main_core_prevent_executor_core_start),
TEST_NO_TAG("Executor Shared Core stopped by Main Shared Core", shared_main_core_stops_executor_core),
TEST_NO_TAG("Executor Shared Core get message from callId by starting a core",
shared_executor_core_get_message_by_starting_a_core),
TEST_NO_TAG("Executor Shared Core get message from callId with user defaults on one thread",
shared_executor_core_get_message_with_user_defaults_mono_thread),
TEST_NO_TAG("Executor Shared Core get message from callId with user defaults on two threads",
shared_executor_core_get_message_with_user_defaults_multi_thread),
561562563564565566567568569570571572573574575576577578579580581582583584
TEST_NO_TAG("Two Executor Shared Cores get messages", two_shared_executor_cores_get_messages),
TEST_NO_TAG("Executor Shared Core get new chat room from invite", shared_executor_core_get_chat_room),
TEST_NO_TAG("Two Executor Shared Cores get one msg and one chat room",
two_shared_executor_cores_get_message_and_chat_room),
TEST_NO_TAG("stop async core when belle sip task failed", stop_async_core_when_belle_sip_task_failed),
TEST_NO_TAG("Executor Shared Core does not modify rc file when Main Shared Core is started",
shared_executor_core_doesnt_modify_rc_file_when_main_shared_core_is_started)};
void shared_core_tester_before_each(void) {
liblinphone_tester_before_each();
LinphoneCoreManager *mgr = linphone_core_manager_create_shared("marie_rc", TEST_GROUP_ID, TRUE, NULL);
linphone_core_reset_shared_core_state(mgr->lc);
linphone_core_manager_destroy(mgr);
}
test_suite_t shared_core_test_suite = {"Shared Core",
NULL,
NULL,
shared_core_tester_before_each,
liblinphone_tester_after_each,
sizeof(shared_core_tests) / sizeof(shared_core_tests[0]),
shared_core_tests,
0};