From 1d0495f826a68bf7d7be56ec84d5febd7dd01796 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 10 Jan 2018 11:32:22 +0100 Subject: [PATCH] feat(tester): add random database file for each core --- tester/db/linphone.db | Bin 4382720 -> 4382720 bytes tester/liblinphone_tester.h | 1 + tester/main-db-tester.cpp | 32 +++++------ tester/tester.c | 103 ++++++++++++++++++++++++++++-------- 4 files changed, 95 insertions(+), 41 deletions(-) diff --git a/tester/db/linphone.db b/tester/db/linphone.db index 473c83f0a7464d3a9ca86e39b1093ffdf83d8056..5f4e2269e70aac7f503a505b8c4b731a16bb19a0 100644 GIT binary patch delta 1456 zcmZ`&T}&KR6rMA?%Wtr+G2+J;@ z_@GeIW1=r23D@{S_Zb1iAGY>RK2)Vkzg|4oqN9T z+&kYn_s-OX=j17Y=ZiO$OOm}>lBAC$N&Zp1x6D@6Z!VX1{t(I&k*qC?QTj}~r7fS? zgeNt%P#1B5_k{1P55N}^f!DSm*%s`~e#Cw?Z*$&)`m-b8{34&Zes}kHp71{9IqqH7 zZqALeEBrPC2RCZqO@5*p&heW&;aNT&hL_fHmf&V&>+ul$0r@li`Klg^0oCy75ESv# zJ3zJ4Vvw!U3a9|f9|RSw7t3K9Dm}uF)7~!G+w;Cwt~(!fG1sWa~@z zyf?Lr(lz0xjgQtsT9zd1XfvFY`2)LP(NY623)XjgzzNo|<`olycFLC70N26t*2597 zFai$(8RC)2u#sUWBaaM)43!KA8BQ|t$#9)D+$xqWN|NnEfe!>O3cN4yp1`{T?+CnY zRi1KR)f}?6C~3cFi=xM0X&#SiE4Cfaq|D*LEbyiC?n04pL(+cJZis|$G~Hz@hE-k7 zxB0=GFo(yo%FCzNydm2y`vthIm8gG8F6FZ1usI%f&O3i~2i=zYmgkb!rd(FfpBZJR zmA>hbGF1=3UFLka(~ z4t86YTA&G(V?~NS(zZhTc_0EU*8EBn8)BIcmlySBj0`9fj@^3}secADWY%-G?FyrZwp;U5`FYSVor?cYn#s865 zYj<}?EZW7ox_enyUq^?iDxEP!QqqiP%%qu`Fb6kEnusS8nL*YWJJ{CO*&BPPS1inN zadRy3$iJ;>Y+UKos+67F{y!bNue&GKcBqTB$Bwc}e!dA>`Mz@Sxz?1$N9&;QzjdzM zHt};<>;inRtsUp47!rC2y@VQ}k8l&=U4#XMg@l_4w-D-tTM7MyMTEtKcN3NnZX+xu zWQ1je0m5>^?Sw(X3c?+Pm4qR}dkDjXRfIbUs|jleYY8KSb%gbV4TOz^y9k>In+bOl Y?jgLFa4+FL!WP2)ga%>s6>OdQ3j?RY_5c6? delta 666 zcmW-eO-NKx6vyv*GroB<^WNMU#~Me|`7q6oQOB>+%<&~eRJ2JdLWr|5BB&htgch06 ze^D)z$hWjryH=97O&=~KA?Qn56%j>X1qFs6h}E6o{La1Sf8d<|<&HnQWsGYkt79o4 z{B1&r7eW}{^%b61u1K!yEGp!>icQjOX~gA3bS_F1ZIWw38UZ0)IUkvj z0cS0I!C44i3O5J#1Z&MyS<>g}_J&-$Ge5TEZKTPXT^KV+9q6VhQdisP8mY^z6d*O6 zqk2;5X6iIlwvqmjnyIJjhIb`PH@(Lhdg9I0(W9L9VU^4{*06|(q6mGoM$G+|;U6{0 z7a=xgBa7s-r$x~|q<0?lig_CI?%Gb)9H}xBXZLx3TPW#03_1n%pg_Z99;-AHr}viR z8ZSRUQSWDgEU#cW8Fh4kj*u$$(^pa_`zUCb;bmckm(`a%-7wVq9tx3Pn>nR7od^uo zn2E#f#&nJn-aFfAP``tYe#~*p=_R;247fhHez;|DO}GKL7Th4*5Zv&bYX>;mk~Dg8^vwBl zri!JVUxO;0c0T>j9Z|3Yj({at-(%o%a2#9#-UQwZPJk=HNpKao8oUKu1Fi+9z-e#> zoCVi`w}R`z4d89yMsO3j8QcQSfm^|C;C65x+yU+ccY(XXJ>c!&9pGMYA9yFYAG`}Z Q04{(B!7h0BeI6SB2me^Vb^rhX diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index f2b8009e4..27a5e52a5 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -300,6 +300,7 @@ typedef struct _LinphoneCoreManager { int number_of_bcunit_error_at_creation; char* phone_alias; char *rc_path; + char *database_path; } LinphoneCoreManager; typedef struct _LinphoneConferenceServer { diff --git a/tester/main-db-tester.cpp b/tester/main-db-tester.cpp index c8bc44881..4eb6d2a55 100644 --- a/tester/main-db-tester.cpp +++ b/tester/main-db-tester.cpp @@ -17,14 +17,16 @@ */ #include "address/address.h" -#include "core/core.h" +#include "core/core-p.h" #include "db/main-db.h" #include "event-log/events.h" +// TODO: Remove me later. #include "private.h" #include "liblinphone_tester.h" #include "tester_utils.h" +#include "tools/tester.h" // ============================================================================= @@ -34,33 +36,23 @@ using namespace LinphonePrivate; // ----------------------------------------------------------------------------- -static const string getDatabasePath () { - static const string path = string(bc_tester_get_resource_dir_prefix()) + "db/linphone.db"; - return path; -} - -// ----------------------------------------------------------------------------- - class MainDbProvider { public: MainDbProvider () { - mCoreManager = linphone_core_manager_new("marie_rc"); - mMainDb = new MainDb(mCoreManager->lc->cppPtr->getSharedFromThis()); - mMainDb->connect(MainDb::Sqlite3, getDatabasePath()); + mCoreManager = linphone_core_manager_create("marie_rc"); + linphone_core_manager_start(mCoreManager, false); } ~MainDbProvider () { - delete mMainDb; linphone_core_manager_destroy(mCoreManager); } const MainDb &getMainDb () { - return *mMainDb; + return *L_GET_PRIVATE(mCoreManager->lc->cppPtr)->mainDb; } private: LinphoneCoreManager *mCoreManager; - MainDb *mMainDb; }; // ----------------------------------------------------------------------------- @@ -130,7 +122,7 @@ static void get_history () { ChatRoomId(IdentityAddress("sip:test-1@sip.linphone.org"), IdentityAddress("sip:test-1@sip.linphone.org")), 0, -1, MainDb::Filter::ConferenceChatMessageFilter ).size(), - 862, + 804, int, "%d" ); @@ -149,11 +141,11 @@ static void get_conference_notified_events () { MainDbProvider provider; const MainDb &mainDb = provider.getMainDb(); list> events = mainDb.getConferenceNotifiedEvents( - ChatRoomId(IdentityAddress("sip:fake-group-2@sip.linphone.org"), IdentityAddress("sip:fake-group-2@sip.linphone.org")), - 1 + ChatRoomId(IdentityAddress("sip:test-44@sip.linphone.org"), IdentityAddress("sip:test-1@sip.linphone.org")), + -1 ); - BC_ASSERT_EQUAL(events.size(), 3, int, "%d"); - if (events.size() != 3) + BC_ASSERT_EQUAL(events.size(), 5, int, "%d"); + if (events.size() != 5) return; shared_ptr event; @@ -199,7 +191,7 @@ test_t main_db_tests[] = { TEST_NO_TAG("Get messages count", get_messages_count), TEST_NO_TAG("Get unread messages count", get_unread_messages_count), TEST_NO_TAG("Get history", get_history), - TEST_NO_TAG("Get conference events", get_conference_notified_events) + TEST_NO_TAG("Get conference notified events", get_conference_notified_events) }; test_suite_t main_db_test_suite = { diff --git a/tester/tester.c b/tester/tester.c index 04e0456bb..7d392232c 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -94,27 +94,25 @@ LinphoneAddress * create_linphone_address(const char * domain) { } LinphoneAddress * create_linphone_address_for_algo(const char * domain, const char* username) { - LinphoneAddress *addr = linphone_address_new(NULL); - if (!BC_ASSERT_PTR_NOT_NULL(addr)) return NULL; - /* For clients who support different algorithms, their usernames must be differnet for having diffrent forms of password */ - if(username) linphone_address_set_username(addr,username); - else linphone_address_set_username(addr,test_username); - if(username) BC_ASSERT_STRING_EQUAL(username,linphone_address_get_username(addr)); - else BC_ASSERT_STRING_EQUAL(test_username,linphone_address_get_username(addr)); - if (!domain) domain= test_route; - linphone_address_set_domain(addr,domain); - BC_ASSERT_STRING_EQUAL(domain,linphone_address_get_domain(addr)); - linphone_address_set_display_name(addr, NULL); - linphone_address_set_display_name(addr, "Mr Tester"); - BC_ASSERT_STRING_EQUAL("Mr Tester",linphone_address_get_display_name(addr)); - return addr; + LinphoneAddress *addr = linphone_address_new(NULL); + if (!BC_ASSERT_PTR_NOT_NULL(addr)) return NULL; + /* For clients who support different algorithms, their usernames must be differnet for having diffrent forms of password */ + if(username) linphone_address_set_username(addr,username); + else linphone_address_set_username(addr,test_username); + if(username) BC_ASSERT_STRING_EQUAL(username,linphone_address_get_username(addr)); + else BC_ASSERT_STRING_EQUAL(test_username,linphone_address_get_username(addr)); + if (!domain) domain= test_route; + linphone_address_set_domain(addr,domain); + BC_ASSERT_STRING_EQUAL(domain,linphone_address_get_domain(addr)); + linphone_address_set_display_name(addr, NULL); + linphone_address_set_display_name(addr, "Mr Tester"); + BC_ASSERT_STRING_EQUAL("Mr Tester",linphone_address_get_display_name(addr)); + return addr; } static void auth_info_requested(LinphoneCore *lc, const char *realm, const char *username, const char *domain) { stats* counters; - ms_message("Auth info requested for user id [%s] at realm [%s]\n" - ,username - ,realm); + ms_message("Auth info requested for user id [%s] at realm [%s]\n", username, realm); counters = get_stats(lc); counters->number_of_auth_info_requested++; } @@ -290,11 +288,11 @@ bool_t transport_supported(LinphoneTransportType transport) { } } -void linphone_core_manager_configure (LinphoneCoreManager *mgr) { +static void linphone_core_manager_configure (LinphoneCoreManager *mgr) { LinphoneImNotifPolicy *im_notif_policy; char *hellopath = bc_tester_res("sounds/hello8000.wav"); - mgr->lc=configure_lc_from(&mgr->v_table, bc_tester_get_resource_dir_prefix(), mgr->rc_path, mgr); + mgr->lc=configure_lc_from(&mgr->v_table, NULL, mgr->rc_path, mgr); linphone_core_manager_check_accounts(mgr); im_notif_policy = linphone_core_get_im_notif_policy(mgr->lc); if (im_notif_policy != NULL) { @@ -344,6 +342,57 @@ void linphone_core_manager_configure (LinphoneCoreManager *mgr) { linphone_core_enable_send_call_stats_periodical_updates(mgr->lc, TRUE); } +// TODO: Remove me later. When C++ will be available in this (bullshit) file... :'( +static int copy_file (const char *from, const char *to) { + FILE *in, *out; + char buf[255]; + size_t n; + + in = fopen(from, "rb"); + if (!in) { + bctbx_error("Can't open %s for reading: %s\n", from, strerror(errno)); + return 1; + } + + out = fopen(to, "wb"); + if (!out) { + bctbx_error("Can't open %s for writing: %s\n", to, strerror(errno)); + fclose(in); + return 1; + } + + while ((n = fread(buf, sizeof buf[0], sizeof buf, in)) > 0) + if (!fwrite(buf, 1, n, out)) { + bctbx_error("Could not write in %s: %s\n", to, strerror(errno)); + fclose(in); + fclose(out); + return 1; + } + + fclose(in); + fclose(out); + + return 0; +} + +static void configure_random_database_path (LinphoneCoreManager *mgr) { + LinphoneConfig *config = linphone_config_new(mgr->rc_path); + if (!config) + bctbx_fatal("Unable to open linphone config from: %s", mgr->rc_path); + + char random_id[32]; + belle_sip_random_token(random_id, sizeof random_id); + char *database_path_format = bctbx_strdup_printf("linphone_%s.db", random_id); + mgr->database_path = bc_tester_file(database_path_format); + + linphone_config_set_string(config, "storage", "backend", "sqlite3"); + linphone_config_set_string(config, "storage", "uri", mgr->database_path); + linphone_config_sync(config); + linphone_config_unref(config); + + bctbx_free(database_path_format); +} + #if __clang__ || ((__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || __GNUC__ > 4) #pragma GCC diagnostic push #endif @@ -377,7 +426,13 @@ void linphone_core_manager_init(LinphoneCoreManager *mgr, const char* rc_file, c mgr->phone_alias = phone_alias ? ms_strdup(phone_alias) : NULL; reset_counters(&mgr->stat); - if (rc_file) mgr->rc_path = ms_strdup_printf("rcfiles/%s", rc_file); + if (rc_file) { + char *src = bctbx_strdup_printf("%s/rcfiles/%s", bc_tester_get_resource_dir_prefix(), rc_file); + mgr->rc_path = bc_tester_file("rc_file"); + copy_file(src, mgr->rc_path); + bctbx_free(src); + configure_random_database_path(mgr); + } manager_count++; @@ -489,8 +544,14 @@ void linphone_core_manager_uninit(LinphoneCoreManager *mgr) { if (mgr->identity) { linphone_address_unref(mgr->identity); } - if (mgr->rc_path) + if (mgr->rc_path) { + unlink(mgr->rc_path); bctbx_free(mgr->rc_path); + } + if (mgr->database_path) { + unlink(mgr->database_path); + bctbx_free(mgr->database_path); + } manager_count--; linphone_core_set_log_level(old_log_level);