2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <gmock/gmock.h>
18 #include <gtest/gtest.h>
28 #include <core_object.h>
32 #include <user_request.h>
34 #include <communicator.h>
38 using ::testing::EmptyTestEventListener;
39 using ::testing::InitGoogleTest;
40 using ::testing::Test;
41 using ::testing::TestCase;
42 using ::testing::TestEventListeners;
43 using ::testing::TestInfo;
44 using ::testing::TestPartResult;
45 using ::testing::UnitTest;
47 void tcore_log(enum tcore_log_type type, enum tcore_log_priority priority, const char *tag, const char *fmt, ...)
52 /* Plug-in descriptor */
53 struct tcore_plugin_define_desc test_plugin_define_desc = {
54 .name = "TEST_PLUGIN",
55 .priority = TCORE_PLUGIN_PRIORITY_MID,
62 static enum tcore_hook_return __on_request_hook_callback(Server *s, UserRequest *ur, void *user_data)
64 std::cout <<" __on_request_hook_callback()" << std::endl;
66 return TCORE_HOOK_RETURN_CONTINUE;
69 static enum tcore_hook_return __on_notification_hook_callback(Server *s, CoreObject *source,
70 enum tcore_notification_command command,
71 unsigned int data_len, void *data, void *user_data)
73 std::cout <<" __on_notification_hook_callback()" << std::endl;
75 return TCORE_HOOK_RETURN_CONTINUE;
78 static TReturn __on_test_comm_send_response(Communicator *comm, UserRequest *ur,
79 enum tcore_response_command command, unsigned int data_len, const void *data)
81 std::cout <<" __on_test_comm_send_response()" << std::endl;
82 return TCORE_RETURN_SUCCESS;
85 static TReturn __on_test_comm_send_notification(Communicator *comm, CoreObject *source,
86 enum tcore_notification_command command, unsigned int data_len, const void *data)
88 std::cout <<" __on_test_comm_send_notification()" << std::endl;
89 return TCORE_RETURN_SUCCESS;
93 * communicator operations
95 struct tcore_communicator_operations test_communicator_ops = {
96 .send_response = __on_test_comm_send_response,
97 .send_notification = __on_test_comm_send_notification,
100 TEST(LIBTCORE_SERVER, test_server)
104 TcorePlugin *p, *modem_plugin;
110 /* create sever handle */
111 s = tcore_server_new();
115 p = tcore_plugin_new(s, &test_plugin_define_desc, "test_plugin", NULL);
117 ret = tcore_server_add_plugin(s, p);
118 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
119 EXPECT_TRUE(tcore_server_ref_plugins(s));
120 EXPECT_EQ(tcore_plugin_ref_server(p), s);
122 TcorePlugin *ref_plugin = tcore_server_search_plugin_list(s, "TEST_PLUGIN");
123 EXPECT_EQ(ref_plugin, p);
126 m = tcore_manager_new(p);
128 ret = tcore_server_set_manager(s, m);
129 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
130 EXPECT_TRUE(tcore_server_ref_manager(s));
132 /* add communicator */
133 c = tcore_communicator_new(p, "test_communicator", &test_communicator_ops);
136 EXPECT_EQ(tcore_communicator_ref_plugin(c), p);
137 std::cout << " [communicator] name: " << tcore_communicator_ref_name(c) << std::endl;
139 char comm_data[] = "comm_data";
140 ret = tcore_communicator_link_user_data(c, comm_data);
141 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
142 std::cout << " [communicator] user_data: " << (char *)tcore_communicator_ref_user_data(c)<< std::endl;
144 ret = tcore_server_add_communicator(s, c);
145 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
146 EXPECT_TRUE(tcore_server_ref_communicators(s));
147 EXPECT_EQ(tcore_server_find_communicator(s, "test_communicator"), c);
149 ret = tcore_communicator_send_response(c, NULL, TRESP_CUSTOM, 0, NULL);
150 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
152 ret = tcore_communicator_send_notification(c, NULL, TNOTI_CUSTOM, 0, NULL);
153 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
155 UserRequest *ur_comm;
157 ur_comm = tcore_user_request_new(c, "test_modem_plugin");
158 ASSERT_TRUE(ur_comm);
160 ret = tcore_user_request_set_command(ur_comm, TREQ_CUSTOM);
161 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
163 tcore_communicator_dispatch_request(c, ur_comm);
165 ret = tcore_server_remove_communicator(s, c);
166 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
167 tcore_communicator_free(c);
170 strg = tcore_storage_new(NULL, "test_storage", NULL);
172 ret = tcore_server_add_storage(s, strg);
173 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
174 EXPECT_TRUE(tcore_server_ref_storages(s));
177 Storage *ref_strg = tcore_server_find_storage(s, "test_storage");
178 EXPECT_EQ(ref_strg, strg);
181 h = tcore_hal_new(NULL, "test_hal", NULL, TCORE_HAL_MODE_CUSTOM);
183 ret = tcore_server_add_hal(s, h);
184 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
185 EXPECT_TRUE(tcore_server_ref_hals(s));
188 TcoreHal *ref_hal = tcore_server_find_hal(s, "test_hal");
189 EXPECT_EQ(ref_hal, h);
192 ret = tcore_server_remove_hal(s, h);
193 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
197 /* register modem plugin*/
198 modem_plugin = tcore_plugin_new(s, NULL, "test_modem_plugin", NULL);
199 ASSERT_TRUE(modem_plugin);
200 TcoreModem *modem = tcore_server_register_modem(s, modem_plugin);
203 /* Get modem count */
204 gint modem_count = tcore_server_get_modems_count(s);
205 std::cout << " [server] modem count: " << modem_count << std::endl;
207 EXPECT_TRUE(tcore_server_get_cp_name_list(s));
208 tcore_server_print_modems(s);
210 /* Add hook function */
211 ret = tcore_server_add_request_hook(s, TREQ_CUSTOM, __on_request_hook_callback, NULL);
212 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
213 ret = tcore_server_add_notification_hook(s, TNOTI_CUSTOM, __on_notification_hook_callback, NULL);
214 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
216 /* dispatch user request */
218 ur = tcore_user_request_new(NULL, "test_modem_plugin");
220 ret = tcore_user_request_set_command(ur, TREQ_CUSTOM);
221 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
222 tcore_server_dispatch_request(s, ur);
224 /* send notification */
225 tcore_server_send_notification(s, NULL, TNOTI_CUSTOM, 0, NULL);
227 /* Remove hook function */
228 ret = tcore_server_remove_request_hook(s, __on_request_hook_callback);
229 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
230 ret = tcore_server_remove_notification_hook(s, __on_notification_hook_callback);
231 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
233 /* unregister modem plugin */
234 tcore_server_unload_modem_plugin(s, modem);
237 tcore_server_free(s);
241 TEST(LIBTCORE_OBJECT, test_object_new)
245 TcorePlugin *test_plugin = tcore_plugin_new(NULL, NULL, NULL, NULL) ;
246 EXPECT_TRUE(test_plugin);
248 co = tcore_object_new(test_plugin, "test1", NULL);
249 ASSERT_TRUE(co) << "tcore_object_new() failed" << std::endl;
251 ret = tcore_object_set_free_hook(co, NULL);
252 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_set_free_hook() is failed" << std::endl;
254 EXPECT_EQ(tcore_object_ref_subscription_type(co) , TELEPHONY_SUBSCRIPTION_TYPE_DEFAULT) << "subscription type is not matched" << std::endl;
255 EXPECT_TRUE(tcore_object_ref_plugin(co));
257 EXPECT_EQ(tcore_plugin_ref_core_object(test_plugin, CORE_OBJECT_TYPE_DEFAULT), co);
258 EXPECT_TRUE(tcore_plugin_get_core_objects(test_plugin));
259 EXPECT_TRUE(tcore_plugin_get_core_objects_bytype(test_plugin, CORE_OBJECT_TYPE_DEFAULT));
261 char po[] = "test_object";
264 ret = tcore_object_link_object(co, po);
265 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_link_object() is failed" << std::endl;
266 ref_po = (char *)tcore_object_ref_object(co);
267 std::cout << " ref_object: " << ref_po << std::endl;
268 EXPECT_EQ(strcmp(po, ref_po), 0) << "object is not matched" << std::endl;
270 ret = tcore_object_set_hal(co, NULL);
271 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_set_hal() is failed" << std::endl;
272 tcore_object_get_hal(co);
274 char userdata[] = "test_userdata";
275 char *ref_userdata = NULL;
276 ret = tcore_object_link_user_data(co, userdata);
277 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_link_user_data() is failed" << std::endl;
278 ref_userdata = (char *)tcore_object_ref_user_data(co);
279 std::cout << " ref_userdata: " << ref_userdata<< std::endl;
280 EXPECT_EQ(strcmp(userdata, ref_userdata), 0) << "userdata is not matched" << std::endl;
282 ret = tcore_object_set_name(co, "test2");
283 EXPECT_EQ(TCORE_RETURN_SUCCESS, ret) << "tcore_object_set_name() is failed" << std::endl;
285 std::cout << " Name: " << tcore_object_ref_name(co) << std::endl;
286 EXPECT_EQ(strcmp(tcore_object_ref_name(co), "test2"), 0) << "object name is not matched" << std::endl;
288 tcore_object_set_type(co, CORE_OBJECT_TYPE_CUSTOM);
289 EXPECT_EQ(tcore_object_get_type(co) , CORE_OBJECT_TYPE_CUSTOM) << "object type is not matched" << std::endl;
291 tcore_object_free(co);
294 static int _event1_count = 0;
295 static int _event2_count = 0;
297 static gboolean __on_event1(CoreObject *o, const void *event_info, void *user_data)
302 EXPECT_TRUE(event_info);
303 EXPECT_EQ((char *)event_info, "ok");
307 static gboolean __on_event2(CoreObject *o, const void *event_info, void *user_data)
312 EXPECT_TRUE(event_info);
313 EXPECT_EQ((char *)event_info, "ok");
318 static gboolean __on_event3(CoreObject *o, const void *event_info, void *user_data)
323 EXPECT_TRUE(event_info);
324 EXPECT_EQ((char *)event_info, "ok");
330 TEST(LIBTCORE_OBJECT, test_object_callback)
335 co = tcore_object_new(NULL, "test", NULL);
336 ASSERT_TRUE(co) << "tcore_object_new() failed" << std::endl;
338 /* lifetime: unlimit */
340 ret = tcore_object_add_callback(co, "event1", __on_event1, NULL);
341 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_add_callback() is failed" << std::endl;
343 ret = tcore_object_emit_callback(co, "event1", "ok");
344 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_emit_callback() is failed" << std::endl;
346 ret = tcore_object_emit_callback(co, "event1", "ok");
347 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_emit_callback() is failed" << std::endl;
349 EXPECT_EQ(_event1_count, 2) << "_event1_count is not matched" << std::endl;
352 ret = tcore_object_add_callback(co, "event2", __on_event2, NULL);
353 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_add_callback() is failed" << std::endl;
355 ret = tcore_object_emit_callback(co, "event2", "ok");
356 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_emit_callback() is failed" << std::endl;
358 ret = tcore_object_del_callback(co, "event1", __on_event1);
359 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_del_callback() is failed" << std::endl;
361 ret = tcore_object_override_callback(co, "event1", __on_event3, NULL);
362 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_object_override_callback() is failed" << std::endl;
364 tcore_object_free(co);
368 static gboolean on_prop_changed(CoreObject *co, const void *event_info, void *user_data)
370 int *mode = (int *)user_data;
371 GSList *key = (GSList *)event_info;
376 g_assert(g_slist_length(key) == 1);
377 g_assert_cmpstr((char *)key->data, ==, "qqq");
378 data = tcore_object_ref_property(co, "qqq");
379 g_assert_cmpstr(data, ==, "1234");
383 g_assert(g_slist_length(key) == 1);
384 g_assert_cmpstr((char *)key->data, ==, "qqq");
385 data = tcore_object_ref_property(co, "qqq");
386 g_assert(data == NULL);
390 g_assert(g_slist_length(key) == 1);
391 g_assert_cmpstr((char *)key->data, ==, "www");
392 data = tcore_object_ref_property(co, "www");
393 g_assert_cmpstr(data, ==, "heap");
397 g_assert(g_slist_length(key) == 1);
398 g_assert_cmpstr((char *)key->data, ==, "www");
399 data = tcore_object_ref_property(co, "www");
400 g_assert(data == NULL);
404 g_assert(g_slist_length(key) == 1);
405 g_assert_cmpstr((char *)key->data, ==, "key");
406 data = tcore_object_ref_property(co, "key");
407 g_assert_cmpstr(data, ==, "1");
411 g_assert(g_slist_length(key) == 1);
412 g_assert_cmpstr((char *)key->data, ==, "key");
413 data = tcore_object_ref_property(co, "key");
414 g_assert_cmpstr(data, ==, "2");
422 g_assert(g_slist_length(key) == 1);
423 g_assert_cmpstr((char *)key->data, ==, "key");
424 data = tcore_object_ref_property(co, "key");
425 g_assert_cmpstr(data, ==, "2");
429 g_assert(g_slist_length(key) == 2);
430 g_assert_cmpstr((char *)key->data, ==, "foo");
431 g_assert_cmpstr((char *)key->next->data, ==, "bar");
432 data = tcore_object_ref_property(co, "foo");
433 g_assert_cmpstr(data, ==, "1");
434 data = tcore_object_ref_property(co, "bar");
435 g_assert_cmpstr(data, ==, "2");
439 g_assert(g_slist_length(key) == 1);
440 g_assert_cmpstr((char *)key->data, ==, "foo");
441 data = tcore_object_ref_property(co, "foo");
442 g_assert(data == NULL);
446 g_assert(g_slist_length(key) == 2);
447 g_assert(g_slist_find_custom(key, "foo", (GCompareFunc)g_strcmp0) != NULL);
448 g_assert(CORE_OBJECT_KEY_FIND(key, "bar") != NULL);
449 data = tcore_object_ref_property(co, "foo");
450 g_assert_cmpstr(data, ==, "1");
451 data = tcore_object_ref_property(co, "bar");
452 g_assert(data == NULL);
460 /* Set flag to callback invocation success */
466 TEST(LIBTCORE_OBJECT, test_object_property)
475 co = tcore_object_new(NULL, "test", NULL);
478 tcore_object_add_callback(co, CORE_OBJECT_EVENT_PROPERTY_CHANGED, on_prop_changed, &mode);
480 raw = tcore_object_ref_property_hash(co);
483 /* Case: Basic property set */
485 tcore_object_set_property(co, "qqq", "1234");
486 EXPECT_EQ(g_hash_table_size(raw), 1);
489 data = tcore_object_ref_property(co, "qqq");
490 g_assert_cmpstr(data, ==, "1234");
492 /* Case: Basic property remove */
494 tcore_object_set_property(co, "qqq", NULL);
495 EXPECT_EQ(g_hash_table_size(raw), 0);
498 data = tcore_object_ref_property(co, "qqq");
501 /* Case: Malloc property set */
503 test = strdup("heap");
504 tcore_object_set_property(co, "www", test);
505 EXPECT_EQ(g_hash_table_size(raw), 1);
509 data = tcore_object_ref_property(co, "www");
510 g_assert_cmpstr(data, ==, "heap");
512 /* Case: Malloc property remove */
514 tcore_object_set_property(co, "www", NULL);
515 EXPECT_EQ(g_hash_table_size(raw), 0);
518 data = tcore_object_ref_property(co, "www");
521 /* Case: Same key & Different value set */
523 tcore_object_set_property(co, "key", "1");
524 EXPECT_EQ(g_hash_table_size(raw), 1);
528 tcore_object_set_property(co, "key", "2");
529 EXPECT_EQ(g_hash_table_size(raw), 1);
532 /* Case: Same key & Same value set => No callback invocation */
534 tcore_object_set_property(co, "key", "2");
535 EXPECT_EQ(g_hash_table_size(raw), 1);
538 /* Case: Same key & Same value set & force event invocation */
540 tcore_object_set_property(co, "key", "2");
541 EXPECT_EQ(g_hash_table_size(raw), 1);
543 tmp_list = g_slist_append(NULL, (char *)"key");
544 tcore_object_emit_callback(co, CORE_OBJECT_EVENT_PROPERTY_CHANGED, tmp_list);
546 g_slist_free(tmp_list);
548 /* Case: Multiple property set */
550 tcore_object_set_property(co, "foo", "1", "bar", "2");
551 EXPECT_EQ(g_hash_table_size(raw), 3);
554 /* Case: Set key without value => same as key with NULL: remove key */
556 tcore_object_set_property(co, "foo");
557 EXPECT_EQ(g_hash_table_size(raw), 2);
560 /* Case: Multiple property set with unset (foo set, bar unset) */
562 tcore_object_set_property(co, "foo", "1", "bar");
563 EXPECT_EQ(g_hash_table_size(raw), 2);
566 tcore_object_free(co);
569 TEST(LIBTCORE_UTIL, test_util_marshal)
574 list = tcore_util_marshal_create();
575 ASSERT_TRUE(list) << "tcore_util_marshal_create() failed" << std::endl;
578 tcore_util_marshal_add_data(list, "key1", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
579 ASSERT_TRUE(tcore_util_marshal_get_int(list, "key1") == value_int);
582 tcore_util_marshal_add_data(list, "key2", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
583 ASSERT_TRUE(tcore_util_marshal_get_int(list, "key2") == value_int);
585 tcore_util_marshal_destory(list);
588 TEST(LIBTCORE_UTIL, test_util_marshal_serialize)
598 list = tcore_util_marshal_create();
602 tcore_util_marshal_add_data(list, "key1", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
603 ASSERT_TRUE(tcore_util_marshal_get_int(list, "key1") == value_int);
606 tcore_util_marshal_add_data(list, "key2", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
607 ASSERT_TRUE(tcore_util_marshal_get_int(list, "key2") == value_int);
609 const char str[] = "key_string";
610 tcore_util_marshal_add_data(list, "key3", str, TCORE_UTIL_MARSHAL_DATA_STRING_TYPE);
611 ASSERT_TRUE(strcmp(tcore_util_marshal_get_string(list, "key3"), str) == 0);
613 item = tcore_util_marshal_create();
615 tcore_util_marshal_add_data(list, "key_object", item, TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE);
617 for (i = 0; i < 3; i++) {
618 item = tcore_util_marshal_create();
622 snprintf(buf, 255, "sub-%d", i);
623 tcore_util_marshal_add_data(item, buf, &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
624 ASSERT_TRUE(tcore_util_marshal_get_int(item, buf) == value_int);
626 tcore_util_marshal_add_data(list, buf, item, TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE);
629 serialized = tcore_util_marshal_serialize(list);
630 ASSERT_TRUE(serialized);
631 tcore_util_marshal_destory(list);
633 tmp = tcore_util_marshal_deserialize_string(serialized);
638 ASSERT_TRUE(tcore_util_marshal_get_int(tmp, "key1") == 1);
639 ASSERT_TRUE(tcore_util_marshal_get_int(tmp, "key2") == 2);
641 tcore_util_marshal_destory(tmp);
644 TEST(LIBTCORE_UTIL, test_util_decode_hex)
646 char *hex = (char *)"1A2B3C4D5E6F";
647 unsigned char expected[] = { 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F };
650 dest = tcore_util_decode_hex(hex, strlen(hex));
651 ASSERT_TRUE(memcmp(dest, expected, strlen((char *)dest)) == 0);
655 TEST(LIBTCORE_UTIL, test_util_hex_dump)
657 /* AT+CRSM=command>[, <fileid>[, <P1>, <P2>, <P3>[, <data>[, <pathid>]]]] */
658 char *cmd_str = g_strdup_printf("AT+CRSM=192, 28482");
660 tcore_util_hex_dump(" ", strlen(cmd_str), (void *)cmd_str);
667 TEST(LIBTCORE_UTIL, test_util_gsm7bit)
670 unsigned char packed[] = { 0xE8, 0x32, 0x9B, 0xFD, 0x06, 0x00 };
672 std::cout << std::endl;
673 /* unpack packed-data('hello') */
674 dest = tcore_util_unpack_gsm7bit(packed, 0x05);
675 g_assert_cmpstr((char *)dest, ==, "hello");
679 dest = tcore_util_pack_gsm7bit((unsigned char *)"hello", strlen("hello"));
682 g_assert(memcmp(packed, dest, strlen((char *)dest)) == 0);
687 TEST(LIBTCORE_UTIL, test_util_get_version)
691 version = tcore_util_get_version();
692 ASSERT_TRUE(version) << "tcore_util_get_version() failed" << std::endl;
695 std::cout << " libtcore version: " << version << std::endl;
700 TEST(LIBTCORE_UTIL, test_util_set_log)
702 tcore_util_set_log(FALSE);
703 tcore_util_set_log(TRUE);
706 TEST(LIBTCORE_UTIL, test_util_is_country_NA)
708 char plmn1[] = "31033";
709 ASSERT_TRUE(tcore_util_is_country_NA(plmn1) == TRUE);
711 char plmn2[] = "45001";
712 ASSERT_TRUE(tcore_util_is_country_NA(plmn2) == FALSE);
715 TEST(LIBTCORE_AT, test_at_buf_write)
717 #define BUF_SIZE 1024
720 char *msg_1 = (char *)"ATOZ";
721 char msg_2[BUF_SIZE + 1];
723 at = tcore_at_new(NULL);
726 ret = tcore_at_buf_write(at, strlen(msg_1), msg_1);
727 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_at_buf_write() is failed" << std::endl;
729 memset(msg_2, '1', BUF_SIZE);
730 msg_2[BUF_SIZE] = '\0';
731 ret = tcore_at_buf_write(at, strlen(msg_2), msg_2);
732 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_at_buf_write() is failed" << std::endl;
737 TEST(LIBTCORE_AT, test_at_tok)
742 /* test unsolicited message */
743 tokens = tcore_at_tok_new("CSQ: 31, 99");
746 g_assert_cmpstr((char *)g_slist_nth_data(tokens, 0), ==, "31");
747 g_assert_cmpstr(tcore_at_tok_nth(tokens, 1), ==, "99");;
748 EXPECT_TRUE(!g_slist_nth_data(tokens, 2));
750 tcore_at_tok_free(tokens);
752 /* test sub token (list type) */
753 tokens = tcore_at_tok_new("(2, \"T-Meego\", \"TTAU\", \"23401\", 2)");
756 g_assert_cmpstr((char *)g_slist_nth_data(tokens, 0), ==, "2");
757 g_assert_cmpstr(tcore_at_tok_nth(tokens, 1), ==, "\"T-Meego\"");
758 g_assert_cmpstr(tcore_at_tok_nth(tokens, 2), ==, "\"TTAU\"");
759 g_assert_cmpstr(tcore_at_tok_nth(tokens, 3), ==, "\"23401\"");
760 g_assert_cmpstr(tcore_at_tok_nth(tokens, 4), ==, "2");
763 buf = tcore_at_tok_extract(tcore_at_tok_nth(tokens, 2));
765 g_assert_cmpstr(buf, ==, "TTAU");
768 tcore_at_tok_free(tokens);
771 buf = tcore_at_tok_extract("(haha)");
773 g_assert_cmpstr(buf, ==, "haha");
777 buf = tcore_at_tok_extract("(a)");
779 g_assert_cmpstr(buf, ==, "a");
783 buf = tcore_at_tok_extract("()");
785 g_assert_cmpstr(buf, ==, "");
789 buf = tcore_at_tok_extract("(");
791 g_assert_cmpstr(buf, ==, "(");
795 buf = tcore_at_tok_extract(")");
797 g_assert_cmpstr(buf, ==, ")");
801 buf = tcore_at_tok_extract("");
803 g_assert_cmpstr(buf, ==, "");
807 TEST(LIBTCORE_AT, test_at_reqeust)
815 at = tcore_at_new(NULL);
818 req = tcore_at_request_new("AT+CMGR=1", "+CMGR", TCORE_AT_PDU);
821 ret = tcore_at_set_request(at, req, FALSE);
822 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
824 TcoreATRequest *getReq = tcore_at_get_request(at);
825 if (getReq && getReq->cmd)
826 std::cout << " ATRequest->cmd : " << getReq->cmd << std::endl;
828 std::cout << " ATRequest is none" << std::endl;
830 msg = (char *)"+CMGR: 1,,105\r\n12345678901234567890\r\nOK\r\n";
831 bSuccess = tcore_at_process(at, strlen(msg), msg);
832 EXPECT_EQ(bSuccess, TRUE);
834 TcoreATResponse *getResp = tcore_at_get_response(at);
835 if (getResp && getResp->final_response)
836 std::cout << " ATResponse->final_response : " << getResp->final_response<< std::endl;
838 std::cout << " ATResponse is none" << std::endl;
843 static gboolean __on_atcmd_cmti(TcoreAT *at, const GSList *lines, void *user_data)
845 int *checked = (int *)user_data;
849 std::cout <<" data = " << (char *)lines->data << std::endl;
854 static gboolean __on_atcmd_cmt(TcoreAT *at, const GSList *lines, void *user_data)
856 int *checked = (int *)user_data;
858 if (g_slist_length((GSList *)lines) != 2) {
859 printf("invalid message\n");
865 std::cout <<" data1 = " << (char *)lines->data << std::endl;
866 std::cout <<" data2 = " << (char *)lines->next->data << std::endl;
871 static gboolean __on_atcmd_test(TcoreAT *at, const GSList *lines, void *user_data)
873 std::cout <<" __on_atcmd_test() data = " << (char *)lines->data << std::endl;
879 TEST(LIBTCORE_AT, test_at_notificatoin)
887 at = tcore_at_new(NULL);
890 ret = tcore_at_add_notification(at, "+CMTI:", FALSE, __on_atcmd_cmti, &checked);
891 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
893 ret = tcore_at_add_notification(at, "+CMT:", TRUE, __on_atcmd_cmt, &checked);
894 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
896 /* Non type PDU message */
897 msg = (char *)"+CMTI: \"SM\", 1\r\n";
898 bRet = tcore_at_process(at, strlen(msg), msg);
899 EXPECT_EQ(bRet, FALSE);
902 EXPECT_EQ(checked, 1);
904 /* Completed PDU message */
905 msg = (char *)"+CMT: 19\r\n038121F3100481214301112170137192410404F17B590E\r\n";
906 bRet = tcore_at_process(at, strlen(msg), msg);
907 EXPECT_EQ(bRet, FALSE);
910 EXPECT_EQ(checked, 2);
913 /* Split PDU message */
915 msg = (char *)"+CMT: 19\r\n";
916 bRet = tcore_at_process(at, strlen(msg), msg);
917 EXPECT_EQ(bRet, FALSE);
920 EXPECT_EQ(checked, 0);
922 msg = (char *)"038121F310";
923 bRet = tcore_at_process(at, strlen(msg), msg);
924 EXPECT_EQ(bRet, FALSE);
927 EXPECT_EQ(checked, 0);
929 msg = (char *)"0481214301112170137192410404F17B590E\r\n";
930 bRet = tcore_at_process(at, strlen(msg), msg);
931 EXPECT_EQ(bRet, FALSE);
933 ret = tcore_at_add_notification(at, "+test:", FALSE, __on_atcmd_test, NULL);
934 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
936 /* Non type PDU message */
937 msg = (char *)"+test: \"TEST\", 1\r\n";
938 bRet = tcore_at_process(at, strlen(msg), msg);
939 EXPECT_EQ(bRet, FALSE);
941 ret = tcore_at_remove_notification(at, "+test:", __on_atcmd_test);
943 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
946 EXPECT_EQ(checked, 2);
950 static enum tcore_hook_return __on_send_hook(TcoreHal *hal, guint data_len, void *data, void *user_data)
952 std::cout << " __on__send_hook()" << std::endl;
953 return TCORE_HOOK_RETURN_CONTINUE;
957 static void __on_recv_callback(TcoreHal *h, unsigned int data_len, const void *data, void *user_data)
959 g_assert(data_len == 3);
960 g_assert_cmpstr((char *)data, ==, "123");
961 std::cout << " hal_recv_callback()" << std::endl;
967 TEST(LIBTCORE_HAL, test_hal_callback)
971 h = tcore_hal_new(NULL, "test_hal", NULL, TCORE_HAL_MODE_CUSTOM);
975 ret = tcore_hal_set_name(h, "test_device1");
976 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
978 char *hal_name = tcore_hal_get_name(h);
980 std::cout << " HAL name : " << hal_name << std::endl;
985 ret = tcore_hal_set_name(h, "test_device2");
986 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
988 hal_name = tcore_hal_ref_name(h);
990 std::cout << " HAL name : " << hal_name << std::endl;
993 TcoreAT *hal_at = tcore_hal_get_at(h);
994 EXPECT_TRUE(!hal_at);
996 ret = tcore_hal_set_mode(h, TCORE_HAL_MODE_AT);
997 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
999 int hal_mode = tcore_hal_get_mode(h);
1000 EXPECT_EQ(hal_mode, TCORE_HAL_MODE_AT);
1001 std::cout << " HAL mode : TCORE_HAL_MODE_AT" << std::endl;
1003 ret = tcore_hal_set_mode(h, TCORE_HAL_MODE_CUSTOM);
1004 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1005 std::cout << " HAL mode : TCORE_HAL_MODE_CUSTOM" << std::endl;
1007 hal_mode = tcore_hal_get_mode(h);
1008 EXPECT_EQ(hal_mode, TCORE_HAL_MODE_CUSTOM);
1010 char userdata[] = "haltest_userdata";
1011 char *ref_userdata = NULL;
1012 ret = tcore_hal_link_user_data(h, userdata);
1013 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS) << "tcore_hal_link_user_data() is failed" << std::endl;
1015 ref_userdata = (char *)tcore_hal_ref_user_data(h);
1016 std::cout << " ref_userdata: " << ref_userdata<< std::endl;
1017 EXPECT_EQ(strcmp(userdata, ref_userdata), 0) << "userdata is not matched" << std::endl;
1019 ret = tcore_hal_set_power_state(h, TRUE);
1020 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1022 gboolean power_state = tcore_hal_get_power_state(h);
1023 EXPECT_EQ(power_state, TRUE);
1024 std::cout << " HAL power state : " <<power_state << std::endl;
1026 tcore_hal_add_recv_callback(h, __on_recv_callback, NULL);
1029 tcore_hal_emit_recv_callback(h, 3, "123");
1030 EXPECT_EQ(g_flag, 1);
1032 tcore_hal_remove_recv_callback(h, __on_recv_callback);
1035 tcore_hal_emit_recv_callback(h, 3, "123");
1036 EXPECT_EQ(g_flag, 0);
1041 static TReturn __hal_power(TcoreHal *hal, gboolean enable)
1043 std::cout << " __hal_power(): enable = " << enable << std::endl;
1044 return TCORE_RETURN_SUCCESS;
1047 static TReturn __hal_send(TcoreHal *hal, unsigned int data_len, void *data)
1049 std::cout << " __hal_send()" << std::endl;
1050 return TCORE_RETURN_SUCCESS;
1053 static TReturn __hal_setup_netif(CoreObject *co, TcoreHalSetupNetifCallback func, void *user_data,
1054 guint cid, gboolean enable)
1056 std::cout << " __hal_setup_netif()" << std::endl;
1057 return TCORE_RETURN_SUCCESS;
1060 static TReturn __hal_control_nvdata(TcoreHal *hal, int option)
1062 std::cout << " __hal_control_nvdata() : option = " << option << std::endl;
1063 return TCORE_RETURN_SUCCESS;
1066 static TReturn __hal_reset(TcoreHal *hal, int option)
1068 std::cout << " __hal_reset(): option = " << option << std::endl;
1069 return TCORE_RETURN_SUCCESS;
1072 static struct tcore_hal_operations test_hal_ops = {
1073 .power = __hal_power,
1075 .setup_netif = __hal_setup_netif,
1076 .control_nvdata = __hal_control_nvdata,
1077 .reset = __hal_reset,
1081 TEST(LIBTCORE_HAL, test_hal_pending)
1084 TcorePending *pending1;
1085 TcorePending *pending2;
1086 TcorePending *pending3;
1087 TcorePending *pending = NULL;
1090 h = tcore_hal_new(NULL, "test_hal_queue", &test_hal_ops, TCORE_HAL_MODE_CUSTOM);
1093 ret = tcore_hal_set_power_state(h, TRUE);
1094 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1097 pending1 = tcore_pending_new(NULL, 1);
1098 ASSERT_TRUE(pending1);
1101 tcore_pending_set_priority(pending1, TCORE_PENDING_PRIORITY_IMMEDIATELY);
1104 enum tcore_pending_priority result_priority;
1105 ret = tcore_pending_get_priority(pending1, &result_priority);
1106 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1107 EXPECT_EQ(result_priority, TCORE_PENDING_PRIORITY_IMMEDIATELY);
1109 /* get pending id */
1110 unsigned int id = tcore_pending_get_id(pending1);
1111 std::cout << " pending1 id = " << id << std::endl;
1113 /* get pending send status */
1114 gboolean send_status;
1115 ret = tcore_pending_get_send_status(pending1, &send_status);
1116 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1117 std::cout << " pending1 send_status = " << send_status << std::endl;
1120 pending2 = tcore_pending_new(NULL, 1);
1121 ASSERT_TRUE(pending2);
1122 tcore_pending_set_auto_free_status_after_sent(pending2, TRUE);
1124 gboolean auto_free_status = tcore_pending_get_auto_free_status_after_sent(pending2);
1125 std::cout << " pending2 audo_free_status = " << auto_free_status << std::endl;
1126 EXPECT_EQ(auto_free_status, TRUE);
1128 /* set pending data */
1129 char pending_data1[] = "pending_data1";
1130 ret = tcore_pending_set_request_data(pending2, strlen(pending_data1), pending_data1);
1131 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1133 /* get pending data */
1134 unsigned int data_len;
1135 char *ref_data = (char *)tcore_pending_ref_request_data(pending2, &data_len);
1136 EXPECT_EQ(strcmp(pending_data1, ref_data), 0);
1137 std::cout << " pending2 data = " << ref_data << std::endl;
1139 /* set pending data */
1140 char pending_data2[] = "pending_data2";
1141 ret = tcore_pending_set_request_data(pending2, strlen(pending_data2), pending_data2);
1142 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1144 /* get pending data */
1145 ref_data = (char *)tcore_pending_ref_request_data(pending2, &data_len);
1146 EXPECT_EQ(strcmp(pending_data2, ref_data), 0);
1147 std::cout << " pending2 data = " << ref_data << std::endl;
1150 pending3 = tcore_pending_new(NULL, 1);
1151 ASSERT_TRUE(pending3);
1152 tcore_pending_set_priority(pending3, TCORE_PENDING_PRIORITY_IMMEDIATELY);
1154 ret = tcore_pending_set_timeout(pending3, 5000);
1155 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1157 unsigned int timeout = tcore_pending_get_timeout(pending3);
1158 EXPECT_EQ(timeout, 5000);
1159 std::cout << " pending3 timeout = " << timeout << std::endl;
1162 ret = tcore_hal_send_request(h, pending1);
1163 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1165 /* send pending2 -> queue */
1166 ret = tcore_hal_send_request(h, pending2);
1167 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1169 ret = tcore_hal_add_send_hook(h, __on_send_hook, NULL);
1170 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1172 EXPECT_EQ(tcore_hal_send_data(h, 0, NULL), TCORE_RETURN_SUCCESS);
1174 ret = tcore_hal_remove_send_hook(h, __on_send_hook);
1175 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1177 /* remove pending1 */
1178 ret = tcore_hal_dispatch_response_data(h, 1, 0, NULL);
1179 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1181 /* check next pending */
1182 pending = tcore_queue_ref_pending_by_id(tcore_hal_ref_queue(h), 1);
1183 EXPECT_EQ(pending, pending2);
1186 tcore_hal_send_force(h);
1188 /* check next pending (pending2 is auto free) */
1189 pending = tcore_queue_ref_pending_by_id(tcore_hal_ref_queue(h), 1);
1190 EXPECT_TRUE(!pending);
1193 ret = tcore_hal_send_request(h, pending3);
1194 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1196 pending = tcore_queue_ref_pending_by_id(tcore_hal_ref_queue(h), 1);
1197 EXPECT_EQ(pending, pending3);
1199 /* remove pending3 */
1200 ret = tcore_hal_dispatch_response_data(h, 1, 0, NULL);
1201 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1203 /* check next pending (no more pending) */
1204 pending = tcore_queue_ref_pending_by_id(tcore_hal_ref_queue(h), 1);
1205 EXPECT_TRUE(!pending);
1207 ret = tcore_hal_setup_netif(h, NULL, NULL, NULL, 0, FALSE);
1208 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1210 ret = tcore_hal_set_power(h, TRUE);
1211 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1213 ret = tcore_hal_control_nvdata(h, 2);
1214 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1216 ret = tcore_hal_reset(h, 1);
1217 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1219 TcorePlugin *ref_plugin = tcore_hal_ref_plugin(h);
1220 EXPECT_TRUE(!ref_plugin);
1225 TEST(LIBTCORE_QUEUE, test_queue_push)
1229 TcorePending *pending1;
1230 TcorePending *pending2;
1231 TcorePending *pending3;
1232 TcorePending *pending4;
1233 TcorePending *pending5;
1234 TcorePending *pending = NULL;
1237 h = tcore_hal_new(NULL, "test_hal_for_queue", NULL, TCORE_HAL_MODE_CUSTOM);
1240 q = tcore_queue_new(h);
1243 TcoreHal *ref_hal = tcore_queue_ref_hal(q);
1244 EXPECT_EQ(ref_hal, h);
1245 std::cout << " q's reference hal is matched with h " << std::endl;
1248 pending1 = tcore_pending_new(NULL, 1);
1249 ASSERT_TRUE(pending1);
1250 tcore_pending_set_priority(pending1, TCORE_PENDING_PRIORITY_IMMEDIATELY);
1252 ret = tcore_queue_push(q, pending1);
1253 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1254 std::cout << " pending1 is pushed into queue successufully " << std::endl;
1257 pending2 = tcore_pending_new(NULL, 1);
1258 ASSERT_TRUE(pending2);
1260 ret = tcore_queue_push(q, pending2);
1261 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1262 std::cout << " pending2 is pushed into queue successufully " << std::endl;
1264 /* third item, but push to second item position */
1265 pending3 = tcore_pending_new(NULL, 1);
1266 ASSERT_TRUE(pending3);
1267 tcore_pending_set_priority(pending3, TCORE_PENDING_PRIORITY_IMMEDIATELY);
1269 ret = tcore_queue_push(q, pending3);
1270 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1271 std::cout << " pending3 is pushed into queue successufully " << std::endl;
1273 pending = tcore_queue_ref_next_pending(q);
1274 EXPECT_EQ(pending, pending1);
1275 std::cout << " tcore_queue_ref_next_pending is pending1" << std::endl;
1277 TcorePending *head = tcore_queue_ref_head(q);
1278 EXPECT_EQ(head, pending1);
1279 std::cout << " head is pending1" << std::endl;
1281 TcorePending *tail = tcore_queue_ref_tail(q);
1282 EXPECT_EQ(tail, pending2);
1283 std::cout << " tail is pending2" << std::endl;
1285 unsigned int q_len = tcore_queue_get_length(q);
1286 std::cout << " queue length is " << q_len << std::endl;
1288 unsigned int q_normal_len = tcore_queue_get_normal_length(q);
1289 std::cout << " queue normal length is " << q_normal_len << std::endl;
1291 /* pop test (order by priority) */
1292 pending = tcore_queue_pop_by_id(q, 1);
1293 EXPECT_EQ(pending, pending1);
1294 std::cout << " pending1 is poped from queue successufully " << std::endl;
1295 tcore_pending_free(pending);
1297 pending = tcore_queue_pop_by_id(q, 1);
1298 EXPECT_EQ(pending, pending3);
1299 std::cout << " pending3 is poped from queue successufully " << std::endl;
1300 tcore_pending_free(pending);
1302 pending = tcore_queue_pop_by_id(q, 1);
1303 EXPECT_EQ(pending, pending2);
1304 std::cout << " pending2 is poped from queue successufully " << std::endl;
1305 tcore_pending_free(pending);
1308 pending4 = tcore_pending_new(NULL, 1);
1309 ASSERT_TRUE(pending4);
1311 ret = tcore_queue_push(q, pending4);
1312 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1313 std::cout << " pending4 is pushed into queue successufully " << std::endl;
1314 TcorePlugin *ref_plugin = tcore_pending_ref_plugin(pending4);
1315 EXPECT_TRUE(!ref_plugin);
1316 CoreObject *ref_co = tcore_pending_ref_core_object(pending4);
1317 EXPECT_TRUE(!ref_co);
1320 pending5 = tcore_pending_new(NULL, 1);
1321 ASSERT_TRUE(pending5);
1323 ret = tcore_queue_push(q, pending5);
1324 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1325 std::cout << " pending5 is pushed into queue successufully " << std::endl;
1327 /* pop by pending */
1328 pending = tcore_queue_pop_by_pending(q, pending4);
1329 EXPECT_EQ(pending, pending4);
1330 std::cout << " pending4 is poped from queue successufully " << std::endl;
1331 tcore_pending_free(pending);
1333 /* pop head pending */
1334 pending = tcore_queue_pop(q);
1335 EXPECT_EQ(pending, pending5);
1336 std::cout << " pending5 is poped from queue successufully " << std::endl;
1337 tcore_pending_free(pending);
1339 tcore_queue_free(q);
1343 TEST(LIBTCORE_QUEUE, test_user_request_new)
1348 ur = tcore_user_request_new(NULL, "test_user_request");
1351 /* ref user request */
1352 tcore_user_request_ref(ur);
1354 /* unref user request */
1355 tcore_user_request_unref(ur);
1357 /* get modem name of user request */
1358 char *modem_name = tcore_user_request_get_modem_name(ur);
1359 std::cout << " ur modem name = " << modem_name << std::endl;
1361 /* set userinfo of user request */
1362 char user_info[] = "test_userinfo";
1363 ret = tcore_user_request_set_user_info(ur, user_info);
1364 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1367 char *ref_user_info = (char *)tcore_user_request_ref_user_info(ur);
1368 std::cout << " ur user_info = " << ref_user_info << std::endl;
1370 /* set data of user request */
1371 char data[] = "test_data";
1372 ret = tcore_user_request_set_data(ur, strlen(data), data);
1373 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1376 unsigned int data_len;
1377 char *ref_data = (char *)tcore_user_request_ref_data(ur, &data_len);
1378 std::cout << " ur data_length = " << data_len << " data = " << ref_data << std::endl;
1380 /* set metainfo of user request */
1381 char metainfo[] = "test_metainfo";
1382 ret = tcore_user_request_set_metainfo(ur, strlen(metainfo), metainfo);
1383 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1386 unsigned int metainfo_len;
1387 char *ref_metainfo = (char *)tcore_user_request_ref_metainfo(ur, &metainfo_len);
1388 std::cout<< " ur metainfo_len = " << metainfo_len << " metainfo = " << ref_metainfo << std::endl;
1390 tcore_user_request_free(ur);
1394 static void __on_pending_send_callback(TcorePending *pending, gboolean result, void *user_data)
1396 std::cout << " __on_pending_send_callback() result =" << result << std::endl;
1399 int g_response_flag = 0;
1400 static void __on_pending_response_callback(TcorePending *pending, int data_len, const void *data, void *user_data)
1402 std::cout << " __on_pending_response_callback()" << std::endl;
1405 if (data_len > 0 && data) {
1406 char *resp_data = (char *)data;
1407 std::cout << " response data = " << resp_data << std::endl;
1411 static void __on_pending_timeout_callback(TcorePending *p, void *user_data)
1413 std::cout << " __on_pending_timeout_callback()" << std::endl;
1416 static void __on_ur_free_hook(UserRequest *ur)
1418 struct dbus_request_info *user_info;
1420 std::cout << " _on_ur_free_hook()" << std::endl;
1422 user_info = (struct dbus_request_info *)tcore_user_request_ref_user_info(ur);
1427 static void __on_ur_response_hook(UserRequest *ur, enum tcore_response_command command,
1428 unsigned int data_len, const void *data, void *user_data)
1430 std::cout << " __on_ur_response_hook()" << std::endl;
1432 if (data_len > 0 && data) {
1433 char *resp_data = (char *)data;
1434 std::cout << " response data = " << resp_data << std::endl;
1438 TEST(LIBTCORE_QUEUE, test_hal_queue_callback)
1441 TcorePending *pending1;
1442 TcorePending *pending2;
1443 TcorePending *pending3;
1449 h = tcore_hal_new(NULL, "test_hal_queue_callback", &test_hal_ops, TCORE_HAL_MODE_CUSTOM);
1452 ret = tcore_hal_set_power_state(h, TRUE);
1453 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1456 ur1 = tcore_user_request_new(NULL, NULL);
1459 ret = tcore_user_request_set_command(ur1, TREQ_NETWORK_SEARCH);
1460 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1462 pending1 = tcore_pending_new(NULL, 1);
1463 ASSERT_TRUE(pending1);
1465 tcore_pending_set_response_callback(pending1, __on_pending_response_callback, NULL);
1466 tcore_pending_link_user_request(pending1, ur1);
1468 ret = tcore_hal_send_request(h, pending1);
1469 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1471 /* set send callback */
1472 ret = tcore_pending_set_send_callback(pending1, __on_pending_send_callback, NULL);
1473 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1475 /* force update send state */
1476 ret = tcore_pending_emit_send_callback(pending1, TRUE);
1477 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1479 /* set timeout callback */
1480 ret = tcore_pending_set_timeout_callback(pending1, __on_pending_timeout_callback, NULL);
1481 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1483 /* emit timeout callback */
1484 ret = tcore_pending_emit_timeout_callback(pending1);
1485 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1488 ur2 = tcore_user_request_new(NULL, NULL);
1491 /* set command on user_request */
1492 ret = tcore_user_request_set_command(ur2, TREQ_NETWORK_SEARCH);
1493 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1496 EXPECT_EQ(tcore_user_request_get_command(ur2), TREQ_NETWORK_SEARCH);
1497 std::cout << " ur2 command = TREQ_NETWORK_SEARCH" << std::endl;
1499 pending2 = tcore_pending_new(NULL, 1);
1500 ASSERT_TRUE(pending2);
1502 ret = tcore_pending_set_response_callback(pending2, __on_pending_response_callback, NULL);
1503 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1505 char test_emit_resp[] = "test_emit_response";
1506 ret = tcore_pending_emit_response_callback(pending2, strlen(test_emit_resp), test_emit_resp);
1507 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1509 ret = tcore_pending_link_user_request(pending2, ur2);
1510 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1512 UserRequest *ref_ur = tcore_pending_ref_user_request(pending2);
1513 EXPECT_EQ(ref_ur, ur2);
1515 /* set free hook callback */
1516 ret = tcore_user_request_set_free_hook(ur2, __on_ur_free_hook);
1517 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1519 /* set response hook callback */
1520 ret = tcore_user_request_set_response_hook(ur2, __on_ur_response_hook, NULL);
1521 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1523 /* ref communicator */
1524 EXPECT_TRUE(!tcore_user_request_ref_communicator(ur2));
1526 ret = tcore_hal_send_request(h, pending2);
1527 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1530 pending3 = tcore_pending_new(NULL, 1);
1531 ASSERT_TRUE(pending3);
1533 ret = tcore_hal_send_request(h, pending3);
1534 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1538 p = tcore_queue_search_by_command(tcore_hal_ref_queue(h), TREQ_NETWORK_SEARCH, TRUE);
1539 EXPECT_EQ(p, pending1);
1541 p = tcore_queue_search_by_command(tcore_hal_ref_queue(h), TREQ_NETWORK_SEARCH, FALSE);
1542 EXPECT_EQ(p, pending2);
1544 char resp_custom[] = "test_resp";
1545 ret = tcore_user_request_send_response(ur2, TRESP_CUSTOM, strlen(resp_custom), resp_custom);
1546 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1549 g_response_flag = 0;
1550 ret = tcore_queue_cancel_pending_by_command(tcore_hal_ref_queue(h), TREQ_NETWORK_SEARCH);
1551 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1553 EXPECT_EQ(g_response_flag, 2);
1559 static enum tcore_manager_return __on_manager_request_handler(Manager *manager, UserRequest *ur)
1561 struct dbus_request_info *user_info;
1563 std::cout << " __on_manager_request_handler()" << std::endl;
1565 user_info = (struct dbus_request_info *)tcore_user_request_ref_user_info(ur);
1569 return TCORE_MANAGER_RETURN_CONTINUE;
1573 static enum tcore_manager_return __on_manager_notification_handler(Manager *manager,
1575 enum tcore_notification_command command,
1576 unsigned int data_len, void *data)
1578 std::cout << " __on_manager_notification_handler()" << std::endl;
1579 if (command == TNOTI_CUSTOM)
1580 std::cout << " command = TNOTI_CUSTOM" << std::endl;
1582 if (data_len > 0 && data) {
1583 char *noti_data = (char *)data;
1584 std::cout << " noti data = " << noti_data << std::endl;
1587 return TCORE_MANAGER_RETURN_CONTINUE;
1590 TEST(LIBTCORE_MANAGER, test_manager)
1596 p = tcore_plugin_new(NULL, &test_plugin_define_desc, "test_plugin", NULL);
1599 EXPECT_TRUE(tcore_plugin_get_description(p));
1600 std::cout << " tcore_plugin_get_filename() = " << tcore_plugin_get_filename(p) << std::endl;
1601 std::cout << " tcore_plugin_ref_plugin_name() = " << tcore_plugin_ref_plugin_name(p) << std::endl;
1603 char plugin_data[] = "plugin_data";
1604 ret = tcore_plugin_link_user_data(p, plugin_data);
1605 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1606 std::cout << " tcore_plugin_ref_user_data() = " << (char *)tcore_plugin_ref_user_data(p) << std::endl;
1608 int *smsp_record_len = NULL;
1609 /* Storing smsp record length */
1610 smsp_record_len = (int *)g_try_malloc0(sizeof(int));
1611 ASSERT_TRUE(smsp_record_len);
1612 *smsp_record_len = 100;
1613 tcore_plugin_link_property(p, "SMSPRECORDLEN", smsp_record_len);
1614 int *ref_property = (int *)tcore_plugin_ref_property(p, "SMSPRECORDLEN");
1615 EXPECT_TRUE(ref_property);
1616 std::cout << " SMSPRECORDLEN = " << *ref_property << std::endl;
1618 m = tcore_manager_new(p);
1621 TcorePlugin *ref_plugin = tcore_manager_get_plugin(m);
1622 EXPECT_EQ(ref_plugin, p);
1624 ret = tcore_manager_set_request_dispatcher(m, __on_manager_request_handler);
1625 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1627 ret = tcore_manager_set_notification_handler(m, __on_manager_notification_handler);
1628 EXPECT_EQ(ret, TCORE_RETURN_SUCCESS);
1630 enum tcore_manager_return mgr_ret;
1631 mgr_ret = tcore_manager_dispatch_request(m, NULL);
1632 std::cout << " tcore_manager_dispatch_request() return = " << mgr_ret << std::endl;
1634 char noti_data[] = "manager_noti_data";
1635 mgr_ret = tcore_manager_send_notification(m, NULL, TNOTI_CUSTOM, strlen(noti_data), noti_data);
1636 std::cout << " tcore_manager_send_notification() return = " << mgr_ret << std::endl;
1639 tcore_manager_free(p, m);
1640 tcore_plugin_free(p);
1643 static void *__create_handle(Storage *strg, const char *path)
1645 std::cout << " __create_handle()" << std::endl;
1651 tmp = malloc(sizeof(char));
1654 static gboolean __remove_handle(Storage *strg, void *handle)
1656 std::cout << " __remove_handle()" << std::endl;
1658 if (!strg || !handle)
1664 static gboolean __set_int(Storage *strg, enum tcore_storage_key key, int value)
1666 std::cout << " __set_int() :" << value << std::endl;
1669 static gboolean __set_bool(Storage *strg, enum tcore_storage_key key, gboolean value)
1671 std::cout << " __set_bool() : " << value << std::endl;
1674 static gboolean __set_string(Storage *strg, enum tcore_storage_key key, const char *value)
1676 std::cout << " __set_string() : " << value << std::endl;
1679 static int __get_int(Storage *strg, enum tcore_storage_key key)
1681 std::cout << " __get_int()" << std::endl;
1684 static gboolean __get_bool(Storage *strg, enum tcore_storage_key key)
1686 std::cout << " __get_bool()" << std::endl;
1689 static char * __get_string(Storage *strg, enum tcore_storage_key key)
1691 std::cout << " __get_string()" << std::endl;
1694 static gboolean __set_key_callback(Storage *strg,
1695 enum tcore_storage_key key, TcoreStorageDispatchCallback cb)
1697 std::cout << " __set_key_callback()" << std::endl;
1700 static gboolean __remove_key_callback(Storage *strg,
1701 enum tcore_storage_key key)
1703 std::cout << " __remove_key_callback()" << std::endl;
1706 static gboolean __update_query_database(Storage *strg, void *handle, const char *query, GHashTable *in_param)
1708 std::cout << " __update_query_database()" << std::endl;
1711 static gboolean __read_query_database(Storage *strg, void *handle, const char *query, GHashTable *in_param,
1712 GHashTable **out_param, int out_param_cnt)
1714 std::cout << " __read_query_database()" << std::endl;
1717 static gboolean __read_query_database_in_order(Storage *strg, void *handle, const char *query, GHashTable *in_param,
1718 GSList **out_param, int out_param_cnt)
1720 std::cout << " __read_query_database_in_order()" << std::endl;
1723 static gboolean __insert_query_database(Storage *strg, void *handle, const char *query, GHashTable *in_param)
1725 std::cout << " __insert_query_database()" << std::endl;
1728 static gboolean __remove_query_database(Storage *strg, void *handle, const char *query, GHashTable *in_param)
1730 std::cout << " __remove_query_database()" << std::endl;
1734 static struct storage_operations test_strg_ops = {
1735 .create_handle = __create_handle,
1736 .remove_handle = __remove_handle,
1737 .set_int = __set_int,
1738 .set_string = __set_string,
1739 .set_bool = __set_bool,
1740 .get_int = __get_int,
1741 .get_string = __get_string,
1742 .get_bool = __get_bool,
1743 .set_key_callback = __set_key_callback,
1744 .remove_key_callback = __remove_key_callback,
1745 .update_query_database = __update_query_database,
1746 .read_query_database = __read_query_database,
1747 .read_query_database_in_order = __read_query_database_in_order,
1748 .insert_query_database = __insert_query_database,
1749 .remove_query_database = __remove_query_database,
1752 void __storage_key_callback(enum tcore_storage_key key, void *value, void *user_data)
1754 std::cout << " __storage_key_callback()" << std::endl;
1757 TEST(LIBTCORE_STORAGE, test_storage)
1762 strg = tcore_storage_new(NULL, "test_storage", &test_strg_ops);
1764 std::cout << " storage name = " << tcore_storage_ref_name(strg) << std::endl;
1766 handle = tcore_storage_create_handle(strg, "test_storage.db");
1767 tcore_storage_set_key_callback(strg, STORAGE_KEY_TELEPHONY_INT, __storage_key_callback, NULL);
1769 tcore_storage_set_int(strg, STORAGE_KEY_TELEPHONY_INT, 100);
1770 tcore_storage_get_int(strg, STORAGE_KEY_TELEPHONY_INT);
1771 tcore_storage_set_bool(strg, STORAGE_KEY_TELEPHONY_BOOL, 1);
1772 tcore_storage_get_bool(strg, STORAGE_KEY_TELEPHONY_BOOL);
1773 tcore_storage_set_string(strg, STORAGE_KEY_TELEPHONY_STRING, "test_strg_string");
1774 tcore_storage_get_string(strg, STORAGE_KEY_TELEPHONY_STRING);
1776 tcore_storage_update_query_database(strg, handle, "update", NULL);
1777 tcore_storage_read_query_database(strg, handle, "read", NULL, NULL, 1);
1778 tcore_storage_read_query_database_in_order(strg, handle, "read_in_order", NULL, NULL, 1);
1779 tcore_storage_insert_query_database(strg, handle, "insert", NULL);
1780 tcore_storage_remove_query_database(strg, handle, "remove", NULL);
1782 tcore_storage_remove_key_callback(strg, STORAGE_KEY_TELEPHONY_INT, __storage_key_callback);
1783 tcore_storage_remove_handle(strg, handle);
1784 tcore_storage_free(strg);
1788 int main(int argc, char **argv)
1793 testing::InitGoogleTest(&argc, argv);
1795 std::cout << "Exception occurred." << std::endl;
1798 ret = RUN_ALL_TESTS();
1799 } catch (const ::testing::internal::GoogleTestFailureException& e) {
1801 std::cout << "GoogleTestFailureException was thrown:" << e.what() << std::endl;