Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
liblinphone
Commits
b56095f5
Commit
b56095f5
authored
May 28, 2014
by
Guillaume BIENKOWSKI
Browse files
Add API to debug sqlite timings, and a test to profile the message migration
parent
1a89e8a1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
135 additions
and
29 deletions
+135
-29
coreapi/message_storage.c
coreapi/message_storage.c
+26
-13
coreapi/private.h
coreapi/private.h
+2
-0
tester/Makefile.am
tester/Makefile.am
+1
-1
tester/message_tester.c
tester/message_tester.c
+106
-15
tester/messages.db
tester/messages.db
+0
-0
No files found.
coreapi/message_storage.c
View file @
b56095f5
...
...
@@ -20,17 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "private.h"
#include "linphonecore.h"
#ifdef WIN32
static
inline
char
*
my_ctime_r
(
const
time_t
*
t
,
char
*
buf
){
strcpy
(
buf
,
ctime
(
t
));
return
buf
;
}
#else
#define my_ctime_r ctime_r
#endif
#ifdef MSG_STORAGE_ENABLED
#include "sqlite3.h"
...
...
@@ -157,8 +146,8 @@ void linphone_chat_message_store_state(LinphoneChatMessage *msg){
LinphoneCore
*
lc
=
msg
->
chat_room
->
lc
;
if
(
lc
->
db
){
char
*
buf
=
sqlite3_mprintf
(
"UPDATE history SET status=%i WHERE (message = %Q OR url = %Q) AND utc = %i;"
,
msg
->
state
,
msg
->
message
,
msg
->
external_body_url
,
msg
->
time
);
linphone_sql_request
(
lc
->
db
,
buf
);
msg
->
state
,
msg
->
message
,
msg
->
external_body_url
,
msg
->
time
);
linphone_sql_request
(
lc
->
db
,
buf
);
sqlite3_free
(
buf
);
}
...
...
@@ -381,6 +370,27 @@ void linphone_message_storage_init_chat_rooms(LinphoneCore *lc) {
sqlite3_free
(
buf
);
}
static
void
_linphone_message_storage_profile
(
void
*
data
,
const
char
*
statement
,
sqlite3_uint64
duration
){
ms_warning
(
"SQL statement '%s' took %"
PRId64
" microseconds"
,
statement
,
duration
/
1000
);
}
static
void
linphone_message_storage_activate_debug
(
sqlite3
*
db
,
bool_t
debug
){
if
(
debug
){
sqlite3_profile
(
db
,
_linphone_message_storage_profile
,
NULL
);
}
else
{
sqlite3_profile
(
db
,
NULL
,
NULL
);
}
}
void
linphone_core_message_storage_set_debug
(
LinphoneCore
*
lc
,
bool_t
debug
){
lc
->
debug_storage
=
debug
;
if
(
lc
->
db
){
linphone_message_storage_activate_debug
(
lc
->
db
,
debug
);
}
}
void
linphone_core_message_storage_init
(
LinphoneCore
*
lc
){
int
ret
;
const
char
*
errmsg
;
...
...
@@ -394,6 +404,9 @@ void linphone_core_message_storage_init(LinphoneCore *lc){
ms_error
(
"Error in the opening: %s.
\n
"
,
errmsg
);
sqlite3_close
(
db
);
}
linphone_message_storage_activate_debug
(
db
,
lc
->
debug_storage
);
linphone_create_table
(
db
);
linphone_update_table
(
db
);
lc
->
db
=
db
;
...
...
coreapi/private.h
View file @
b56095f5
...
...
@@ -701,6 +701,7 @@ struct _LinphoneCore
char
*
chat_db_file
;
#ifdef MSG_STORAGE_ENABLED
sqlite3
*
db
;
bool_t
debug_storage
;
#endif
#ifdef BUILD_UPNP
UpnpContext
*
upnp
;
...
...
@@ -815,6 +816,7 @@ void linphone_message_storage_init_chat_rooms(LinphoneCore *lc);
void
linphone_chat_message_store_state
(
LinphoneChatMessage
*
msg
);
void
linphone_core_message_storage_init
(
LinphoneCore
*
lc
);
void
linphone_core_message_storage_close
(
LinphoneCore
*
lc
);
void
linphone_core_message_storage_set_debug
(
LinphoneCore
*
lc
,
bool_t
debug
);
void
linphone_core_play_named_tone
(
LinphoneCore
*
lc
,
LinphoneToneID
id
);
bool_t
linphone_core_tone_indications_enabled
(
LinphoneCore
*
lc
);
...
...
tester/Makefile.am
View file @
b56095f5
...
...
@@ -26,7 +26,7 @@ liblinphonetester_la_LDFLAGS= -no-undefined
liblinphonetester_la_LIBADD
=
../coreapi/liblinphone.la
$(CUNIT_LIBS)
AM_CPPFLAGS
=
-I
$(top_srcdir)
/include
-I
$(top_srcdir)
/coreapi
AM_CFLAGS
=
$(STRICT_OPTIONS)
-DIN_LINPHONE
$(ORTP_CFLAGS)
$(MEDIASTREAMER_CFLAGS)
$(CUNIT_CFLAGS)
$(BELLESIP_CFLAGS)
$(LIBXML2_CFLAGS)
AM_CFLAGS
=
$(STRICT_OPTIONS)
-DIN_LINPHONE
$(ORTP_CFLAGS)
$(MEDIASTREAMER_CFLAGS)
$(CUNIT_CFLAGS)
$(BELLESIP_CFLAGS)
$(LIBXML2_CFLAGS)
$(SQLITE3_CFLAGS)
if
!BUILD_IOS
...
...
tester/message_tester.c
View file @
b56095f5
/*
liblinphone_tester - liblinphone test suite
Copyright (C) 2013 Belledonne Communications SARL
liblinphone_tester - liblinphone test suite
Copyright (C) 2013 Belledonne Communications SARL
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 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 General Public License for more details.
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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
...
...
@@ -23,6 +23,11 @@
#include "private.h"
#include "liblinphone_tester.h"
#ifdef MSG_STORAGE_ENABLED
#include <sqlite3.h>
#endif
static
char
*
message_external_body_url
;
void
text_message_received
(
LinphoneCore
*
lc
,
LinphoneChatRoom
*
room
,
const
LinphoneAddress
*
from_address
,
const
char
*
message
)
{
...
...
@@ -97,7 +102,7 @@ static void text_message(void) {
static
void
text_message_within_dialog
(
void
)
{
LinphoneCoreManager
*
marie
=
linphone_core_manager_new
(
"marie_rc"
);
LinphoneCoreManager
*
pauline
=
linphone_core_manager_new
(
"pauline_rc"
);
lp_config_set_int
(
pauline
->
lc
->
config
,
"sip"
,
"chat_use_call_dialogs"
,
1
);
char
*
to
=
linphone_address_as_string
(
marie
->
identity
);
...
...
@@ -105,7 +110,7 @@ static void text_message_within_dialog(void) {
ms_free
(
to
);
CU_ASSERT_TRUE
(
call
(
marie
,
pauline
));
linphone_chat_room_send_message
(
chat_room
,
"Bla bla bla bla"
);
CU_ASSERT_TRUE
(
wait_for
(
pauline
->
lc
,
marie
->
lc
,
&
marie
->
stat
.
number_of_LinphoneMessageReceived
,
1
));
...
...
@@ -287,7 +292,7 @@ static void text_message_denied(void) {
/*pauline doesn't want to be disturbed*/
linphone_core_disable_chat
(
pauline
->
lc
,
LinphoneReasonDoNotDisturb
);
linphone_chat_room_send_message2
(
chat_room
,
message
,
liblinphone_tester_chat_message_state_change
,
marie
->
lc
);
CU_ASSERT_TRUE
(
wait_for
(
pauline
->
lc
,
marie
->
lc
,
&
marie
->
stat
.
number_of_LinphoneMessageNotDelivered
,
1
));
...
...
@@ -385,6 +390,89 @@ static void is_composing_notification(void) {
linphone_core_manager_destroy
(
pauline
);
}
#ifdef MSG_STORAGE_ENABLED
/*
* Copy file "from" to file "to".
* Destination file is truncated if existing.
* Return 1 on success, 0 on error (printing an error).
*/
static
int
message_tester_copy_file
(
const
char
*
from
,
const
char
*
to
)
{
char
message
[
256
];
FILE
*
in
,
*
out
;
char
buf
[
256
];
size_t
n
;
/* Open "from" file for reading */
in
=
fopen
(
from
,
"r"
);
if
(
in
==
NULL
)
{
snprintf
(
message
,
255
,
"Can't open %s for reading: %s
\n
"
,
from
,
strerror
(
errno
));
fprintf
(
stderr
,
"%s"
,
message
);
return
0
;
}
/* Open "to" file for writing (will truncate existing files) */
out
=
fopen
(
to
,
"w"
);
if
(
out
==
NULL
)
{
snprintf
(
message
,
255
,
"Can't open %s for writing: %s
\n
"
,
to
,
strerror
(
errno
));
fprintf
(
stderr
,
"%s"
,
message
);
fclose
(
in
);
return
0
;
}
/* Copy data from "in" to "out" */
while
(
(
n
=
fread
(
buf
,
1
,
sizeof
buf
,
in
))
>
0
)
{
if
(
!
fwrite
(
buf
,
1
,
n
,
out
)
)
{
fclose
(
in
);
fclose
(
out
);
return
0
;
}
}
fclose
(
in
);
fclose
(
out
);
return
1
;
}
static
int
check_no_strange_time
(
void
*
data
,
int
argc
,
char
**
argv
,
char
**
cNames
)
{
CU_ASSERT_EQUAL
(
argc
,
0
);
return
0
;
}
static
void
message_storage_migration
()
{
LinphoneCoreManager
*
marie
=
linphone_core_manager_new
(
"marie_rc"
);
char
src_db
[
256
];
char
tmp_db
[
256
];
snprintf
(
src_db
,
sizeof
(
src_db
),
"%s/messages.db"
,
liblinphone_tester_file_prefix
);
snprintf
(
tmp_db
,
sizeof
(
tmp_db
),
"%s/tmp.db"
,
liblinphone_tester_file_prefix
);
CU_ASSERT_EQUAL_FATAL
(
message_tester_copy_file
(
src_db
,
tmp_db
),
1
);
// enable to test the performances of the migration step
//linphone_core_message_storage_set_debug(marie->lc, TRUE);
// the messages.db has 10000 dummy messages with the very first DB scheme.
// This will test the migration procedure
linphone_core_set_chat_database_path
(
marie
->
lc
,
"tmp.db"
);
MSList
*
chatrooms
=
linphone_core_get_chat_rooms
(
marie
->
lc
);
CU_ASSERT
(
ms_list_size
(
chatrooms
)
>
0
);
// check that all messages have been migrated to the UTC time storage
CU_ASSERT
(
sqlite3_exec
(
marie
->
lc
->
db
,
"SELECT * FROM history WHERE time != '-1';"
,
check_no_strange_time
,
NULL
,
NULL
)
==
SQLITE_OK
);
}
#endif
test_t
message_tests
[]
=
{
{
"Text message"
,
text_message
},
{
"Text message within call's dialog"
,
text_message_within_dialog
},
...
...
@@ -398,6 +486,9 @@ test_t message_tests[] = {
{
"Info message"
,
info_message
},
{
"Info message with body"
,
info_message_with_body
},
{
"IsComposing notification"
,
is_composing_notification
}
#ifdef MSG_STORAGE_ENABLED
,{
"Database migration"
,
message_storage_migration
}
#endif
};
test_suite_t
message_test_suite
=
{
...
...
tester/messages.db
0 → 100644
View file @
b56095f5
File added
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment