Introduce initial unit test for db_sms_* API
Since OsmoMSC has built-in SMSC, it needs to store the messages
somewhere. Currently we use libdbi and SQLite3 back-end for that.
For a long time, the db_sms_* API remained uncovered by unit tests.
This change aims to fix that, and does cover the following calls:
- db_sms_store(),
- db_sms_get(),
- db_sms_get_next_unsent(),
- db_sms_mark_delivered(),
- db_sms_delete_sent_message_by_id(),
- db_sms_delete_by_msisdn(),
- db_sms_delete_oldest_expired_message().
Due to performance reasons, the test database is initialized in
RAM using the magic filename ':memory:'. This is a feature of
SQLite3 (and not libdbi), see:
https://www.sqlite.org/inmemorydb.html
Of course, this unit test helped to discover some problems:
1) Storing an SMS with empty TP-User-Data (TP-UDL=0) causes
buffer overruns in both db_sms_store() and db_sms_get().
2) TP-User-Data-Length is always being interpreted in octets,
regardless of DCS (Data Coding Scheme). This results in
storing garbage in the database if the default 7-bit
encoding is used. Fortunately, the 'user_data' buffer
in structure 'gsm_sms' is large emough, so we don't
experience buffer overruns.
3) db_sms_delete_oldest_expired_message() doesn't work
as expected. Instead of removing the *oldest* expired
message, it tries to remove the *newest* one.
The current test expectations do reflect these problems.
All of them will be fixed in the follow-up patches.
Change-Id: Id94ad35b6f78f839137db2e17010fbf9b40111a3
2019-04-09 09:55:44 +00:00
|
|
|
DDB DEBUG Init a new database
|
|
|
|
DDB DEBUG Init complete
|
|
|
|
DDB INFO Testing db_sms_store()...
|
|
|
|
DDB NOTICE test_db_sms_store('Regular MO SMS'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('Regular MT SMS'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('Complete TP-UD (160 septets, 7-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('Complete TP-UD (140 octets, 8-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('TP-UD buffer overflow (UDH-Length > UD-Length)'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('Truncated TP-UD (200 septets, 7-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('Truncated TP-UD (255 octets, 8-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('Same MSISDN #1'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('Same MSISDN #2'): success, as expected
|
|
|
|
DDB NOTICE test_db_sms_store('Expired SMS'): success, as expected
|
2019-04-14 06:32:33 +00:00
|
|
|
DDB NOTICE test_db_sms_store('Empty TP-UD'): success, as expected
|
Introduce initial unit test for db_sms_* API
Since OsmoMSC has built-in SMSC, it needs to store the messages
somewhere. Currently we use libdbi and SQLite3 back-end for that.
For a long time, the db_sms_* API remained uncovered by unit tests.
This change aims to fix that, and does cover the following calls:
- db_sms_store(),
- db_sms_get(),
- db_sms_get_next_unsent(),
- db_sms_mark_delivered(),
- db_sms_delete_sent_message_by_id(),
- db_sms_delete_by_msisdn(),
- db_sms_delete_oldest_expired_message().
Due to performance reasons, the test database is initialized in
RAM using the magic filename ':memory:'. This is a feature of
SQLite3 (and not libdbi), see:
https://www.sqlite.org/inmemorydb.html
Of course, this unit test helped to discover some problems:
1) Storing an SMS with empty TP-User-Data (TP-UDL=0) causes
buffer overruns in both db_sms_store() and db_sms_get().
2) TP-User-Data-Length is always being interpreted in octets,
regardless of DCS (Data Coding Scheme). This results in
storing garbage in the database if the default 7-bit
encoding is used. Fortunately, the 'user_data' buffer
in structure 'gsm_sms' is large emough, so we don't
experience buffer overruns.
3) db_sms_delete_oldest_expired_message() doesn't work
as expected. Instead of removing the *oldest* expired
message, it tries to remove the *newest* one.
The current test expectations do reflect these problems.
All of them will be fixed in the follow-up patches.
Change-Id: Id94ad35b6f78f839137db2e17010fbf9b40111a3
2019-04-09 09:55:44 +00:00
|
|
|
DDB INFO Testing db_sms_get()...
|
|
|
|
DDB NOTICE test_db_sms_get('Regular MO SMS'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Regular MO SMS'): match
|
|
|
|
DDB NOTICE test_db_sms_get('Regular MT SMS'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Regular MT SMS'): match
|
|
|
|
DDB NOTICE test_db_sms_get('Complete TP-UD (160 septets, 7-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Complete TP-UD (160 septets, 7-bit encoding)'): TP-User-Data mismatch (diff=-65/256)
|
|
|
|
DDB NOTICE test_db_sms_get('Complete TP-UD (140 octets, 8-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Complete TP-UD (140 octets, 8-bit encoding)'): TP-User-Data mismatch (diff=-66/256)
|
|
|
|
DDB NOTICE test_db_sms_get('TP-UD buffer overflow (UDH-Length > UD-Length)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('TP-UD buffer overflow (UDH-Length > UD-Length)'): match
|
|
|
|
DDB NOTICE test_db_sms_get('Truncated TP-UD (200 septets, 7-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Truncated TP-UD (200 septets, 7-bit encoding)'): TP-User-Data mismatch (diff=-65/256)
|
|
|
|
DDB NOTICE test_db_sms_get('Truncated TP-UD (255 octets, 8-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Truncated TP-UD (255 octets, 8-bit encoding)'): TP-User-Data mismatch (diff=-16896/256)
|
|
|
|
DDB NOTICE test_db_sms_get('Same MSISDN #1'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Same MSISDN #1'): match
|
|
|
|
DDB NOTICE test_db_sms_get('Same MSISDN #2'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Same MSISDN #2'): match
|
|
|
|
DDB NOTICE test_db_sms_get('Expired SMS'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Expired SMS'): match
|
2019-04-14 06:32:33 +00:00
|
|
|
DDB NOTICE test_db_sms_get('Empty TP-UD'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Empty TP-UD'): match
|
Introduce initial unit test for db_sms_* API
Since OsmoMSC has built-in SMSC, it needs to store the messages
somewhere. Currently we use libdbi and SQLite3 back-end for that.
For a long time, the db_sms_* API remained uncovered by unit tests.
This change aims to fix that, and does cover the following calls:
- db_sms_store(),
- db_sms_get(),
- db_sms_get_next_unsent(),
- db_sms_mark_delivered(),
- db_sms_delete_sent_message_by_id(),
- db_sms_delete_by_msisdn(),
- db_sms_delete_oldest_expired_message().
Due to performance reasons, the test database is initialized in
RAM using the magic filename ':memory:'. This is a feature of
SQLite3 (and not libdbi), see:
https://www.sqlite.org/inmemorydb.html
Of course, this unit test helped to discover some problems:
1) Storing an SMS with empty TP-User-Data (TP-UDL=0) causes
buffer overruns in both db_sms_store() and db_sms_get().
2) TP-User-Data-Length is always being interpreted in octets,
regardless of DCS (Data Coding Scheme). This results in
storing garbage in the database if the default 7-bit
encoding is used. Fortunately, the 'user_data' buffer
in structure 'gsm_sms' is large emough, so we don't
experience buffer overruns.
3) db_sms_delete_oldest_expired_message() doesn't work
as expected. Instead of removing the *oldest* expired
message, it tries to remove the *newest* one.
The current test expectations do reflect these problems.
All of them will be fixed in the follow-up patches.
Change-Id: Id94ad35b6f78f839137db2e17010fbf9b40111a3
2019-04-09 09:55:44 +00:00
|
|
|
DDB INFO Testing db_sms_get_next_unsent() and db_sms_mark_delivered()...
|
|
|
|
DDB NOTICE db_sms_get_next_unsent(#1): found
|
|
|
|
DDB NOTICE verify_sms('Regular MO SMS'): match
|
|
|
|
DDB NOTICE db_sms_get_next_unsent(#2): found
|
|
|
|
DDB NOTICE verify_sms('Regular MT SMS'): match
|
|
|
|
DDB DEBUG Marking #1 as delivered: rc=0
|
|
|
|
DDB DEBUG Marking #2 as delivered: rc=0
|
|
|
|
DDB NOTICE db_sms_get_next_unsent(starting from #1): found
|
|
|
|
DDB NOTICE verify_sms('Complete TP-UD (160 septets, 7-bit encoding)'): TP-User-Data mismatch (diff=-65/256)
|
|
|
|
DDB INFO Testing db_sms_delete_sent_message_by_id()...
|
|
|
|
DDB NOTICE db_sms_delete_sent_message_by_id(#1, sent): rc=0
|
|
|
|
DDB NOTICE db_sms_delete_sent_message_by_id(#3, not sent): rc=0
|
|
|
|
DDB INFO Testing db_sms_delete_by_msisdn()...
|
|
|
|
DDB NOTICE db_sms_delete_by_msisdn('72631'): rc=0
|
|
|
|
DDB INFO Testing db_sms_delete_oldest_expired_message()...
|
|
|
|
DDB NOTICE db_sms_delete_oldest_expired_message()
|
|
|
|
DDB INFO Expectations updated, retrieving all messages again
|
|
|
|
DDB INFO Testing db_sms_get()...
|
|
|
|
DDB NOTICE test_db_sms_get('Regular MO SMS'): failure, as expected
|
|
|
|
DDB NOTICE test_db_sms_get('Regular MT SMS'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Regular MT SMS'): match
|
|
|
|
DDB NOTICE test_db_sms_get('Complete TP-UD (160 septets, 7-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Complete TP-UD (160 septets, 7-bit encoding)'): TP-User-Data mismatch (diff=-65/256)
|
|
|
|
DDB NOTICE test_db_sms_get('Complete TP-UD (140 octets, 8-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Complete TP-UD (140 octets, 8-bit encoding)'): TP-User-Data mismatch (diff=-66/256)
|
|
|
|
DDB NOTICE test_db_sms_get('TP-UD buffer overflow (UDH-Length > UD-Length)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('TP-UD buffer overflow (UDH-Length > UD-Length)'): match
|
|
|
|
DDB NOTICE test_db_sms_get('Truncated TP-UD (200 septets, 7-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Truncated TP-UD (200 septets, 7-bit encoding)'): TP-User-Data mismatch (diff=-65/256)
|
|
|
|
DDB NOTICE test_db_sms_get('Truncated TP-UD (255 octets, 8-bit encoding)'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Truncated TP-UD (255 octets, 8-bit encoding)'): TP-User-Data mismatch (diff=-16896/256)
|
|
|
|
DDB NOTICE test_db_sms_get('Same MSISDN #1'): failure, as expected
|
|
|
|
DDB NOTICE test_db_sms_get('Same MSISDN #2'): failure, as expected
|
|
|
|
DDB NOTICE test_db_sms_get('Expired SMS'): unexpected result
|
|
|
|
DDB NOTICE verify_sms('Expired SMS'): match
|
2019-04-14 06:32:33 +00:00
|
|
|
DDB NOTICE test_db_sms_get('Empty TP-UD'): success, as expected
|
|
|
|
DDB NOTICE verify_sms('Empty TP-UD'): match
|
Introduce initial unit test for db_sms_* API
Since OsmoMSC has built-in SMSC, it needs to store the messages
somewhere. Currently we use libdbi and SQLite3 back-end for that.
For a long time, the db_sms_* API remained uncovered by unit tests.
This change aims to fix that, and does cover the following calls:
- db_sms_store(),
- db_sms_get(),
- db_sms_get_next_unsent(),
- db_sms_mark_delivered(),
- db_sms_delete_sent_message_by_id(),
- db_sms_delete_by_msisdn(),
- db_sms_delete_oldest_expired_message().
Due to performance reasons, the test database is initialized in
RAM using the magic filename ':memory:'. This is a feature of
SQLite3 (and not libdbi), see:
https://www.sqlite.org/inmemorydb.html
Of course, this unit test helped to discover some problems:
1) Storing an SMS with empty TP-User-Data (TP-UDL=0) causes
buffer overruns in both db_sms_store() and db_sms_get().
2) TP-User-Data-Length is always being interpreted in octets,
regardless of DCS (Data Coding Scheme). This results in
storing garbage in the database if the default 7-bit
encoding is used. Fortunately, the 'user_data' buffer
in structure 'gsm_sms' is large emough, so we don't
experience buffer overruns.
3) db_sms_delete_oldest_expired_message() doesn't work
as expected. Instead of removing the *oldest* expired
message, it tries to remove the *newest* one.
The current test expectations do reflect these problems.
All of them will be fixed in the follow-up patches.
Change-Id: Id94ad35b6f78f839137db2e17010fbf9b40111a3
2019-04-09 09:55:44 +00:00
|
|
|
full talloc report on 'null_context' (total 0 bytes in 1 blocks)
|