[UTC][intelligent-network-monitoring][ACR-1320][Add new CAPIs to get network interfac... 36/197636/1
authorYu <jiung.yu@samsung.com>
Tue, 15 Jan 2019 00:30:00 +0000 (09:30 +0900)
committerYu <jiung.yu@samsung.com>
Tue, 15 Jan 2019 00:30:06 +0000 (09:30 +0900)
Change-Id: I6e7eeabfd229757417df323615ba7b3c9753a7d2
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
src/utc/intelligent-network-monitoring/CMakeLists.txt
src/utc/intelligent-network-monitoring/tct-intelligent-network-monitoring-core_mobile.h
src/utc/intelligent-network-monitoring/tct-intelligent-network-monitoring-core_tizeniot.h
src/utc/intelligent-network-monitoring/tct-intelligent-network-monitoring-core_wearable.h
src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-common.c
src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-common.h
src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link-address.c [new file with mode: 0644]
src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link-route.c [new file with mode: 0644]
src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link.c [new file with mode: 0644]
src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring.c

index d6a8e35791d53ae0a380261674ef1c8d264912c0..9982d95414b1febd3b1d64838119a282765fbc50 100755 (executable)
@@ -8,6 +8,9 @@ SET(CAPI_LIB "capi-network-inm")
 SET(TC_SOURCES
     utc-intelligent-network-monitoring-common.c
     utc-intelligent-network-monitoring.c
+    utc-intelligent-network-monitoring-link.c
+    utc-intelligent-network-monitoring-link-address.c
+    utc-intelligent-network-monitoring-link-route.c
 )
 
 PKG_CHECK_MODULES(${CAPI_LIB} REQUIRED
index 7f67e3526395fa8e9162bed6f626fa06ffb8729c..62a3579ca32581aef73fd8c7981e47c47e27ba28 100755 (executable)
@@ -154,6 +154,63 @@ extern int utc_inm_wifi_ap_get_assoc_status_code_n(void);
 extern int utc_inm_wifi_ap_foreach_vsie_p(void);
 extern int utc_inm_wifi_ap_foreach_vsie_n(void);
 
+extern int utc_inm_inm_foreach_link_p(void);
+extern int utc_inm_inm_foreach_link_n(void);
+extern int utc_inm_connection_get_link_p(void);
+extern int utc_inm_connection_get_link_n(void);
+
+extern void utc_inm_link_startup(void);
+extern void utc_inm_link_cleanup(void);
+extern int utc_inm_link_destroy_p(void);
+extern int utc_inm_link_destroy_n(void);
+extern int utc_inm_link_clone_p(void);
+extern int utc_inm_link_clone_n(void);
+extern int utc_inm_link_get_interface_name_p(void);
+extern int utc_inm_link_get_interface_name_n(void);
+extern int utc_inm_link_get_flags_p(void);
+extern int utc_inm_link_get_flags_n(void);
+extern int utc_inm_link_get_operation_state_p(void);
+extern int utc_inm_link_get_operation_state_n(void);
+extern int utc_inm_link_get_received_bytes_p(void);
+extern int utc_inm_link_get_received_bytes_n(void);
+extern int utc_inm_link_get_sent_bytes_p(void);
+extern int utc_inm_link_get_sent_bytes_n(void);
+extern int utc_inm_link_foreach_address_p(void);
+extern int utc_inm_link_foreach_address_n(void);
+extern int utc_inm_link_foreach_route_p(void);
+extern int utc_inm_link_foreach_route_n(void);
+
+extern void utc_inm_link_address_startup(void);
+extern void utc_inm_link_address_cleanup(void);
+extern int utc_inm_link_address_destroy_p(void);
+extern int utc_inm_link_address_destroy_n(void);
+extern int utc_inm_link_address_clone_p(void);
+extern int utc_inm_link_address_clone_n(void);
+extern int utc_inm_link_address_get_family_p(void);
+extern int utc_inm_link_address_get_family_n(void);
+extern int utc_inm_link_address_get_prefix_length_p(void);
+extern int utc_inm_link_address_get_family_n(void);
+extern int utc_inm_link_address_get_scope_p(void);
+extern int utc_inm_link_address_get_scope_n(void);
+extern int utc_inm_link_address_get_string_p(void);
+extern int utc_inm_link_address_get_string_n(void);
+
+extern void utc_inm_link_route_startup(void);
+extern void utc_inm_link_route_cleanup(void);
+extern int utc_inm_link_route_destroy_p(void);
+extern int utc_inm_link_route_destroy_n(void);
+extern int utc_inm_link_route_clone_p(void);
+extern int utc_inm_link_route_clone_n(void);
+extern int utc_inm_link_route_get_destination_p(void);
+extern int utc_inm_link_route_get_destination_n(void);
+extern int utc_inm_link_route_get_gateway_p(void);
+extern int utc_inm_link_route_get_gateway_n(void);
+extern int utc_inm_link_route_get_interface_p(void);
+extern int utc_inm_link_route_get_interface_n(void);
+extern int utc_inm_link_route_is_default_p(void);
+extern int utc_inm_link_route_is_default_n(void);
+extern int utc_inm_link_route_get_type_p(void);
+extern int utc_inm_link_route_get_type_n(void);
 
 testcase tc_array[] = {
     {"utc_inm_set_ethernet_cable_state_changed_cb_n", utc_inm_set_ethernet_cable_state_changed_cb_n, utc_inm_startup, utc_inm_cleanup},
@@ -286,6 +343,58 @@ testcase tc_array[] = {
     {"utc_inm_wifi_ap_get_assoc_status_code_n", utc_inm_wifi_ap_get_assoc_status_code_n, utc_inm_startup, utc_inm_cleanup},
     {"utc_inm_wifi_ap_foreach_vsie_p", utc_inm_wifi_ap_foreach_vsie_p, utc_inm_startup, utc_inm_cleanup},
     {"utc_inm_wifi_ap_foreach_vsie_n", utc_inm_wifi_ap_foreach_vsie_n, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_inm_foreach_link_p", utc_inm_inm_foreach_link_p, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_inm_foreach_link_n", utc_inm_inm_foreach_link_n, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_connection_get_link_p", utc_inm_connection_get_link_p, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_connection_get_link_n", utc_inm_connection_get_link_n, utc_inm_startup, utc_inm_cleanup},
+
+    {"utc_inm_link_destroy_p", utc_inm_link_destroy_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_destroy_n", utc_inm_link_destroy_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_clone_p", utc_inm_link_clone_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_clone_n", utc_inm_link_clone_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_interface_name_p", utc_inm_link_get_interface_name_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_interface_name_n", utc_inm_link_get_interface_name_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_flags_p", utc_inm_link_get_flags_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_flags_n", utc_inm_link_get_flags_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_operation_state_p", utc_inm_link_get_operation_state_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_operation_state_n", utc_inm_link_get_operation_state_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_received_bytes_p", utc_inm_link_get_received_bytes_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_received_bytes_n", utc_inm_link_get_received_bytes_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_sent_bytes_p", utc_inm_link_get_sent_bytes_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_sent_bytes_n", utc_inm_link_get_sent_bytes_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_address_p", utc_inm_link_foreach_address_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_address_n", utc_inm_link_foreach_address_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_route_p", utc_inm_link_foreach_route_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_route_n", utc_inm_link_foreach_route_n, utc_inm_link_startup, utc_inm_link_cleanup},
+
+    {"utc_inm_link_address_destroy_p", utc_inm_link_address_destroy_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_destroy_n", utc_inm_link_address_destroy_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_clone_p", utc_inm_link_address_clone_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_clone_n", utc_inm_link_address_clone_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_p", utc_inm_link_address_get_family_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_n", utc_inm_link_address_get_family_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_prefix_length_p", utc_inm_link_address_get_prefix_length_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_n", utc_inm_link_address_get_family_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_scope_p", utc_inm_link_address_get_scope_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_scope_n", utc_inm_link_address_get_scope_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_string_p", utc_inm_link_address_get_string_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_string_n", utc_inm_link_address_get_string_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+
+    {"utc_inm_link_route_destroy_p", utc_inm_link_route_destroy_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_destroy_n", utc_inm_link_route_destroy_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_clone_p", utc_inm_link_route_clone_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_clone_n", utc_inm_link_route_clone_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_destination_p", utc_inm_link_route_get_destination_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_destination_n", utc_inm_link_route_get_destination_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_gateway_p", utc_inm_link_route_get_gateway_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_gateway_n", utc_inm_link_route_get_gateway_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_interface_p", utc_inm_link_route_get_interface_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_interface_n", utc_inm_link_route_get_interface_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_is_default_p", utc_inm_link_route_is_default_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_is_default_n", utc_inm_link_route_is_default_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_type_p", utc_inm_link_route_get_type_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_type_n", utc_inm_link_route_get_type_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+
     {NULL, NULL}
 };
 
index 7f67e3526395fa8e9162bed6f626fa06ffb8729c..50622c6f0cba818178f71a2db18fd8302b1b1ef8 100755 (executable)
@@ -154,6 +154,63 @@ extern int utc_inm_wifi_ap_get_assoc_status_code_n(void);
 extern int utc_inm_wifi_ap_foreach_vsie_p(void);
 extern int utc_inm_wifi_ap_foreach_vsie_n(void);
 
+extern int utc_inm_inm_foreach_link_p(void);
+extern int utc_inm_inm_foreach_link_n(void);
+extern int utc_inm_connection_get_link_p(void);
+extern int utc_inm_connection_get_link_n(void);
+
+extern void utc_inm_link_startup(void);
+extern void utc_inm_link_cleanup(void);
+extern int utc_inm_link_destroy_p(void);
+extern int utc_inm_link_destroy_n(void);
+extern int utc_inm_link_clone_p(void);
+extern int utc_inm_link_clone_n(void);
+extern int utc_inm_link_get_interface_name_p(void);
+extern int utc_inm_link_get_interface_name_n(void);
+extern int utc_inm_link_get_flags_p(void);
+extern int utc_inm_link_get_flags_n(void);
+extern int utc_inm_link_get_operation_state_p(void);
+extern int utc_inm_link_get_operation_state_n(void);
+extern int utc_inm_link_get_received_bytes_p(void);
+extern int utc_inm_link_get_received_bytes_n(void);
+extern int utc_inm_link_get_sent_bytes_p(void);
+extern int utc_inm_link_get_sent_bytes_n(void);
+extern int utc_inm_link_foreach_address_p(void);
+extern int utc_inm_link_foreach_address_n(void);
+extern int utc_inm_link_foreach_route_p(void);
+extern int utc_inm_link_foreach_route_n(void);
+
+extern void utc_inm_link_address_startup(void);
+extern void utc_inm_link_address_cleanup(void);
+extern int utc_inm_link_address_destroy_p(void);
+extern int utc_inm_link_address_destroy_n(void);
+extern int utc_inm_link_address_clone_p(void);
+extern int utc_inm_link_address_clone_n(void);
+extern int utc_inm_link_address_get_family_p(void);
+extern int utc_inm_link_address_get_family_n(void);
+extern int utc_inm_link_address_get_prefix_length_p(void);
+extern int utc_inm_link_address_get_family_n(void);
+extern int utc_inm_link_address_get_scope_p(void);
+extern int utc_inm_link_address_get_scope_n(void);
+extern int utc_inm_link_address_get_string_p(void);
+extern int utc_inm_link_address_get_string_n(void);
+
+extern void utc_inm_link_route_startup(void);
+extern void utc_inm_link_route_cleanup(void);
+extern int utc_inm_link_route_destroy_p(void);
+extern int utc_inm_link_route_destroy_n(void);
+extern int utc_inm_link_route_clone_p(void);
+extern int utc_inm_link_route_clone_n(void);
+extern int utc_inm_link_route_get_destination_p(void);
+extern int utc_inm_link_route_get_destination_n(void);
+extern int utc_inm_link_route_get_gateway_p(void);
+extern int utc_inm_link_route_get_gateway_n(void);
+extern int utc_inm_link_route_get_interface_p(void);
+extern int utc_inm_link_route_get_interface_n(void);
+extern int utc_inm_link_route_is_default_p(void);
+extern int utc_inm_link_route_is_default_n(void);
+extern int utc_inm_link_route_get_type_p(void);
+extern int utc_inm_link_route_get_type_n(void);
 
 testcase tc_array[] = {
     {"utc_inm_set_ethernet_cable_state_changed_cb_n", utc_inm_set_ethernet_cable_state_changed_cb_n, utc_inm_startup, utc_inm_cleanup},
@@ -286,6 +343,57 @@ testcase tc_array[] = {
     {"utc_inm_wifi_ap_get_assoc_status_code_n", utc_inm_wifi_ap_get_assoc_status_code_n, utc_inm_startup, utc_inm_cleanup},
     {"utc_inm_wifi_ap_foreach_vsie_p", utc_inm_wifi_ap_foreach_vsie_p, utc_inm_startup, utc_inm_cleanup},
     {"utc_inm_wifi_ap_foreach_vsie_n", utc_inm_wifi_ap_foreach_vsie_n, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_inm_foreach_link_p", utc_inm_inm_foreach_link_p, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_inm_foreach_link_n", utc_inm_inm_foreach_link_n, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_connection_get_link_p", utc_inm_connection_get_link_p, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_connection_get_link_n", utc_inm_connection_get_link_n, utc_inm_startup, utc_inm_cleanup},
+
+    {"utc_inm_link_destroy_p", utc_inm_link_destroy_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_destroy_n", utc_inm_link_destroy_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_clone_p", utc_inm_link_clone_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_clone_n", utc_inm_link_clone_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_interface_name_p", utc_inm_link_get_interface_name_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_interface_name_n", utc_inm_link_get_interface_name_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_flags_p", utc_inm_link_get_flags_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_flags_n", utc_inm_link_get_flags_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_operation_state_p", utc_inm_link_get_operation_state_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_operation_state_n", utc_inm_link_get_operation_state_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_received_bytes_p", utc_inm_link_get_received_bytes_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_received_bytes_n", utc_inm_link_get_received_bytes_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_sent_bytes_p", utc_inm_link_get_sent_bytes_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_sent_bytes_n", utc_inm_link_get_sent_bytes_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_address_p", utc_inm_link_foreach_address_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_address_n", utc_inm_link_foreach_address_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_route_p", utc_inm_link_foreach_route_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_route_n", utc_inm_link_foreach_route_n, utc_inm_link_startup, utc_inm_link_cleanup},
+
+    {"utc_inm_link_address_destroy_p", utc_inm_link_address_destroy_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_destroy_n", utc_inm_link_address_destroy_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_clone_p", utc_inm_link_address_clone_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_clone_n", utc_inm_link_address_clone_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_p", utc_inm_link_address_get_family_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_n", utc_inm_link_address_get_family_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_prefix_length_p", utc_inm_link_address_get_prefix_length_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_n", utc_inm_link_address_get_family_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_scope_p", utc_inm_link_address_get_scope_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_scope_n", utc_inm_link_address_get_scope_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_string_p", utc_inm_link_address_get_string_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+
+    {"utc_inm_link_route_destroy_p", utc_inm_link_route_destroy_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_destroy_n", utc_inm_link_route_destroy_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_clone_p", utc_inm_link_route_clone_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_clone_n", utc_inm_link_route_clone_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_destination_p", utc_inm_link_route_get_destination_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_destination_n", utc_inm_link_route_get_destination_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_gateway_p", utc_inm_link_route_get_gateway_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_gateway_n", utc_inm_link_route_get_gateway_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_interface_p", utc_inm_link_route_get_interface_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_interface_n", utc_inm_link_route_get_interface_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_is_default_p", utc_inm_link_route_is_default_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_is_default_n", utc_inm_link_route_is_default_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_type_p", utc_inm_link_route_get_type_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_type_n", utc_inm_link_route_get_type_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+
     {NULL, NULL}
 };
 
index 7f67e3526395fa8e9162bed6f626fa06ffb8729c..50622c6f0cba818178f71a2db18fd8302b1b1ef8 100755 (executable)
@@ -154,6 +154,63 @@ extern int utc_inm_wifi_ap_get_assoc_status_code_n(void);
 extern int utc_inm_wifi_ap_foreach_vsie_p(void);
 extern int utc_inm_wifi_ap_foreach_vsie_n(void);
 
+extern int utc_inm_inm_foreach_link_p(void);
+extern int utc_inm_inm_foreach_link_n(void);
+extern int utc_inm_connection_get_link_p(void);
+extern int utc_inm_connection_get_link_n(void);
+
+extern void utc_inm_link_startup(void);
+extern void utc_inm_link_cleanup(void);
+extern int utc_inm_link_destroy_p(void);
+extern int utc_inm_link_destroy_n(void);
+extern int utc_inm_link_clone_p(void);
+extern int utc_inm_link_clone_n(void);
+extern int utc_inm_link_get_interface_name_p(void);
+extern int utc_inm_link_get_interface_name_n(void);
+extern int utc_inm_link_get_flags_p(void);
+extern int utc_inm_link_get_flags_n(void);
+extern int utc_inm_link_get_operation_state_p(void);
+extern int utc_inm_link_get_operation_state_n(void);
+extern int utc_inm_link_get_received_bytes_p(void);
+extern int utc_inm_link_get_received_bytes_n(void);
+extern int utc_inm_link_get_sent_bytes_p(void);
+extern int utc_inm_link_get_sent_bytes_n(void);
+extern int utc_inm_link_foreach_address_p(void);
+extern int utc_inm_link_foreach_address_n(void);
+extern int utc_inm_link_foreach_route_p(void);
+extern int utc_inm_link_foreach_route_n(void);
+
+extern void utc_inm_link_address_startup(void);
+extern void utc_inm_link_address_cleanup(void);
+extern int utc_inm_link_address_destroy_p(void);
+extern int utc_inm_link_address_destroy_n(void);
+extern int utc_inm_link_address_clone_p(void);
+extern int utc_inm_link_address_clone_n(void);
+extern int utc_inm_link_address_get_family_p(void);
+extern int utc_inm_link_address_get_family_n(void);
+extern int utc_inm_link_address_get_prefix_length_p(void);
+extern int utc_inm_link_address_get_family_n(void);
+extern int utc_inm_link_address_get_scope_p(void);
+extern int utc_inm_link_address_get_scope_n(void);
+extern int utc_inm_link_address_get_string_p(void);
+extern int utc_inm_link_address_get_string_n(void);
+
+extern void utc_inm_link_route_startup(void);
+extern void utc_inm_link_route_cleanup(void);
+extern int utc_inm_link_route_destroy_p(void);
+extern int utc_inm_link_route_destroy_n(void);
+extern int utc_inm_link_route_clone_p(void);
+extern int utc_inm_link_route_clone_n(void);
+extern int utc_inm_link_route_get_destination_p(void);
+extern int utc_inm_link_route_get_destination_n(void);
+extern int utc_inm_link_route_get_gateway_p(void);
+extern int utc_inm_link_route_get_gateway_n(void);
+extern int utc_inm_link_route_get_interface_p(void);
+extern int utc_inm_link_route_get_interface_n(void);
+extern int utc_inm_link_route_is_default_p(void);
+extern int utc_inm_link_route_is_default_n(void);
+extern int utc_inm_link_route_get_type_p(void);
+extern int utc_inm_link_route_get_type_n(void);
 
 testcase tc_array[] = {
     {"utc_inm_set_ethernet_cable_state_changed_cb_n", utc_inm_set_ethernet_cable_state_changed_cb_n, utc_inm_startup, utc_inm_cleanup},
@@ -286,6 +343,57 @@ testcase tc_array[] = {
     {"utc_inm_wifi_ap_get_assoc_status_code_n", utc_inm_wifi_ap_get_assoc_status_code_n, utc_inm_startup, utc_inm_cleanup},
     {"utc_inm_wifi_ap_foreach_vsie_p", utc_inm_wifi_ap_foreach_vsie_p, utc_inm_startup, utc_inm_cleanup},
     {"utc_inm_wifi_ap_foreach_vsie_n", utc_inm_wifi_ap_foreach_vsie_n, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_inm_foreach_link_p", utc_inm_inm_foreach_link_p, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_inm_foreach_link_n", utc_inm_inm_foreach_link_n, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_connection_get_link_p", utc_inm_connection_get_link_p, utc_inm_startup, utc_inm_cleanup},
+    {"utc_inm_connection_get_link_n", utc_inm_connection_get_link_n, utc_inm_startup, utc_inm_cleanup},
+
+    {"utc_inm_link_destroy_p", utc_inm_link_destroy_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_destroy_n", utc_inm_link_destroy_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_clone_p", utc_inm_link_clone_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_clone_n", utc_inm_link_clone_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_interface_name_p", utc_inm_link_get_interface_name_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_interface_name_n", utc_inm_link_get_interface_name_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_flags_p", utc_inm_link_get_flags_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_flags_n", utc_inm_link_get_flags_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_operation_state_p", utc_inm_link_get_operation_state_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_operation_state_n", utc_inm_link_get_operation_state_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_received_bytes_p", utc_inm_link_get_received_bytes_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_received_bytes_n", utc_inm_link_get_received_bytes_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_sent_bytes_p", utc_inm_link_get_sent_bytes_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_get_sent_bytes_n", utc_inm_link_get_sent_bytes_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_address_p", utc_inm_link_foreach_address_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_address_n", utc_inm_link_foreach_address_n, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_route_p", utc_inm_link_foreach_route_p, utc_inm_link_startup, utc_inm_link_cleanup},
+    {"utc_inm_link_foreach_route_n", utc_inm_link_foreach_route_n, utc_inm_link_startup, utc_inm_link_cleanup},
+
+    {"utc_inm_link_address_destroy_p", utc_inm_link_address_destroy_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_destroy_n", utc_inm_link_address_destroy_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_clone_p", utc_inm_link_address_clone_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_clone_n", utc_inm_link_address_clone_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_p", utc_inm_link_address_get_family_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_n", utc_inm_link_address_get_family_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_prefix_length_p", utc_inm_link_address_get_prefix_length_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_family_n", utc_inm_link_address_get_family_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_scope_p", utc_inm_link_address_get_scope_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_scope_n", utc_inm_link_address_get_scope_n, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+    {"utc_inm_link_address_get_string_p", utc_inm_link_address_get_string_p, utc_inm_link_address_startup, utc_inm_link_address_cleanup},
+
+    {"utc_inm_link_route_destroy_p", utc_inm_link_route_destroy_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_destroy_n", utc_inm_link_route_destroy_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_clone_p", utc_inm_link_route_clone_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_clone_n", utc_inm_link_route_clone_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_destination_p", utc_inm_link_route_get_destination_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_destination_n", utc_inm_link_route_get_destination_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_gateway_p", utc_inm_link_route_get_gateway_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_gateway_n", utc_inm_link_route_get_gateway_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_interface_p", utc_inm_link_route_get_interface_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_interface_n", utc_inm_link_route_get_interface_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_is_default_p", utc_inm_link_route_is_default_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_is_default_n", utc_inm_link_route_is_default_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_type_p", utc_inm_link_route_get_type_p, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+    {"utc_inm_link_route_get_type_n", utc_inm_link_route_get_type_n, utc_inm_link_route_startup, utc_inm_link_route_cleanup},
+
     {NULL, NULL}
 };
 
index 9354cc3c0f032bb46eb9752cd738c67793d47987..f58a0fe1be289cce7c9c562a3f87b31b01016c87 100755 (executable)
@@ -166,6 +166,70 @@ int inm_get_any_profile(inm_connection_h *profile)
        return 1;
 }
 
+int inm_get_current_link(inm_link_h *link)
+{
+       inm_connection_h profile;
+       inm_connection_type_e type;
+       int  rv;
+
+       rv = inm_get_current_connection(g_hInm, &profile);
+       PRINT_RETURN("inm_get_current_connection", rv);
+       if(rv != INM_ERROR_NONE)
+               return rv;
+
+       rv = inm_connection_get_type(profile, &type);
+       PRINT_RETURN("inm_connection_get_type", rv);
+       if(rv != INM_ERROR_NONE)
+               return rv;
+
+       if (type != INM_CONNECTION_TYPE_WIFI &&
+                       type != INM_CONNECTION_TYPE_ETHERNET) {
+               PRINT_RETURN("unwanted connection type", rv);
+       }
+
+       rv = inm_connection_get_link(profile, link);
+       PRINT_RETURN("inm_connection_get_link", rv);
+
+       rv = inm_connection_destroy(&profile);
+       PRINT_RETURN("inm_connection_destroy", rv);
+
+       return rv;
+}
+
+static bool __save_address_callback(inm_link_address_h address, void *user_data)
+{
+       int rv = inm_link_address_clone(&g_hAddress, address);
+       PRINT_RETURN("inm_link_address_clone", rv);
+
+       return FALSE;
+}
+
+int inm_save_any_address(inm_link_h link)
+{
+       assert(link);
+
+       int rv = inm_link_foreach_address(link, __save_address_callback, NULL);
+
+       return rv;
+}
+
+static bool __save_route_callback(inm_link_route_h route, void *user_data)
+{
+       int rv = inm_link_route_clone(&g_hRoute, route);
+       PRINT_RETURN("inm_link_route_clone", rv);
+
+       return FALSE;
+}
+
+int inm_save_any_route(inm_link_h link)
+{
+       assert(link);
+
+       int rv = inm_link_foreach_route(link, __save_route_callback, NULL);
+
+       return rv;
+}
+
 void inm_wifi_state_changed_callback(inm_wifi_state_e result, void* user_data)
 {
        PRINT_RETURN("inm_wifi_state_changed_callback", result);
@@ -246,5 +310,21 @@ void inm_set_ethernet_state_changed_callback(inm_ethernet_state_e result, void*
        PRINT_RETURN("inm_set_cellular_state_changed_callback", INM_ERROR_NONE);
 }
 
+bool inm_foreach_link_callback(inm_link_h link, void *user_data)
+{
+       PRINT_RETURN("inm_foreach_link_callback", INM_ERROR_NONE);
+       return false;
+}
+
+bool inm_foreach_address_callback(inm_link_address_h address, void *user_data)
+{
+       PRINT_RETURN("inm_foreach_address_callback", INM_ERROR_NONE);
+       return false;
+}
 
+bool inm_foreach_route_callback(inm_link_route_h route, void *user_data)
+{
+       PRINT_RETURN("inm_foreach_route_callback", INM_ERROR_NONE);
+       return false;
+}
 
index 4d24f19c147b3f356066ce87faef8cc4b2d618ce..90930ee8c19ec7d63efbf52ff58e9e9cecfa0752 100755 (executable)
@@ -51,10 +51,13 @@ bool g_bFeatureAllNotSupported;
 inm_h g_hInm;
 inm_connection_h profile_temp;
 inm_connection_h g_hConnection;
+inm_link_h g_hLink;
+inm_link_address_h g_hAddress;
+inm_link_route_h g_hRoute;
 
 
 
-#define RUN_GMAIN_LOOP {\
+#define RUN_GMAIN_LOOP do {\
        g_pMainLoop = g_main_loop_new(NULL, false);\
        g_nTimeoutId = g_timeout_add(GMAINTIMEOUT, inm_callback_timeout, g_pMainLoop);\
        if (INM_DEBUG) {\
@@ -64,46 +67,49 @@ inm_connection_h g_hConnection;
        g_main_loop_run(g_pMainLoop);\
        g_source_remove(g_nTimeoutId);\
        g_pMainLoop = NULL;\
-}
-
-#define QUIT_GMAIN_LOOP {\
-       if (g_pMainLoop) {\
-               if (INM_DEBUG) {\
-                       FPRINTF("[%s:%d] Quit mainloop [%p]\\n", __FILE__, __LINE__, g_pMainLoop);\
-                       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Quit mainloop [%p]", __FILE__, __LINE__, g_pMainLoop);\
+} while (0)
+
+#define QUIT_GMAIN_LOOP do {\
+               if (g_pMainLoop) {\
+                       if (INM_DEBUG) {\
+                               FPRINTF("[%s:%d] Quit mainloop [%p]\\n", __FILE__, __LINE__, g_pMainLoop);\
+                               dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Quit mainloop [%p]", __FILE__, __LINE__, g_pMainLoop);\
+                       }\
+                       g_main_loop_quit(g_pMainLoop);\
                }\
-               g_main_loop_quit(g_pMainLoop);\
-}\
-}
-
-#define PRINT_RETURN(api, ret) {\
-       if (INM_DEBUG) {\
-               FPRINTF("[%s:%d] %s returned = %s\\n",\
-                       __FILE__, __LINE__, api, inm_get_error(ret));\
-               dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] %s returned = %s",\
-                       __FILE__, __LINE__, api, inm_get_error(ret));\
-       }\
-}
+       } while (0)
 
-#define CHECK_RETURN(api, ret, val) {\
-       if (INM_DEBUG) {\
-               if (ret != val) {\
-                       FPRINTF("[%s:%d] %s failed, error returned = %s\\n",\
+#define PRINT_RETURN(api, ret) do {\
+               if (INM_DEBUG) {\
+                       FPRINTF("[%s:%d] %s returned = %s\\n",\
                                __FILE__, __LINE__, api, inm_get_error(ret));\
-                       dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] %s failed, error returned = %s",\
+                       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] %s returned = %s",\
                                __FILE__, __LINE__, api, inm_get_error(ret));\
-                       return 1;\
-               } else {\
-                       PRINT_RETURN(api, ret);\
                }\
-       }\
-}
+       } while (0)
+
+#define CHECK_RETURN(api, ret, val) do{\
+               if (INM_DEBUG) {\
+                       if (ret != val) {\
+                               FPRINTF("[%s:%d] %s failed, error returned = %s\\n",\
+                                       __FILE__, __LINE__, api, inm_get_error(ret));\
+                               dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] %s failed, error returned = %s",\
+                                       __FILE__, __LINE__, api, inm_get_error(ret));\
+                               return 1;\
+                       } else {\
+                               PRINT_RETURN(api, ret);\
+                       }\
+               }\
+       } while (0)
 
 gboolean inm_callback_timeout(gpointer data);
 char* inm_get_error(int error);
 bool inm_get_value_from_configfile(char* key, char* value);
 bool inm_check_feature_supported(char *key);
 int inm_get_any_profile(inm_connection_h *profile);
+int inm_get_current_link(inm_link_h *link);
+int inm_save_any_address(inm_link_h link);
+int inm_save_any_route(inm_link_h link);
 
 void inm_wifi_state_changed_callback(inm_wifi_state_e result, void* user_data);
 void inm_connection_state_changed_callback(inm_connection_state_e state, void* user_data);
@@ -117,6 +123,9 @@ void inm_set_channel_interference_callback(int freq, double channel_intf, void*
 void inm_set_cellular_state_changed_callback(inm_cellular_state_e result, void* user_data);
 void inm_set_wifi_state_changed_callback(inm_wifi_state_e result, void* user_data);
 void inm_set_ethernet_state_changed_callback(inm_ethernet_state_e result, void* user_data);
+bool inm_foreach_link_callback(inm_link_h link, void *user_data);
+bool inm_foreach_address_callback(inm_link_address_h address, void *user_data);
+bool inm_foreach_route_callback(inm_link_route_h route, void *user_data);
 
 
 #endif  /* _INTELLIGENT_NETWORK_MONITORING_COMMON_H_ */
diff --git a/src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link-address.c b/src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link-address.c
new file mode 100644 (file)
index 0000000..3ec863b
--- /dev/null
@@ -0,0 +1,398 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "utc-intelligent-network-monitoring-common.h"
+
+
+
+/**
+ * @function        utc_inm_link_address_startup
+ * @since_tizen     5.5
+ * @description     Initializes inm link address.Called before each test
+ * @parameter       NA
+ * @return          NA
+ */
+void utc_inm_link_address_startup(void)
+{
+       g_bFeatureInm = inm_check_feature_supported(FEATURE_INM);
+       g_hLink = NULL;
+       g_hAddress = NULL;
+
+       int ret = inm_initialize(&g_hInm);
+       PRINT_RETURN("inm_initialize", ret);
+       if (ret != INM_ERROR_NONE) {
+               if (ret != INM_ERROR_NOT_SUPPORTED || !g_bFeatureInm) {
+                       FPRINTF("[%s:%d] Fail to initialize\\n", __FILE__, __LINE__);
+                       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Fail to initialize", __FILE__, __LINE__);
+               }
+               return;
+       }
+
+       ret = inm_get_current_link(&g_hLink);
+       if (ret != INM_ERROR_NONE || !g_hLink) {
+               FPRINTF("[%s:%d] Fail to get current link\\n", __FILE__, __LINE__);
+               dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Fail to get current link", __FILE__, __LINE__);
+               return;
+       }
+
+       ret = inm_save_any_address(g_hLink);
+       if (ret != INM_ERROR_NONE || !g_hAddress) {
+               FPRINTF("[%s:%d] Fail to get current link address\\n", __FILE__, __LINE__);
+               dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Fail to get current address", __FILE__, __LINE__);
+               return;
+       }
+}
+
+/**
+ * @function        utc_inm_link_address_cleanup
+ * @since_tizen     5.5
+ * @description     Deinitializes inm link address.Called after each test.
+ * @parameter       NA
+ * @return          NA
+ */
+void utc_inm_link_address_cleanup(void)
+{
+       int ret;
+
+       ret = inm_link_address_destroy(g_hAddress);
+       PRINT_RETURN("inm_link_address_destroy", ret);
+       g_hAddress = NULL;
+
+       ret = inm_link_destroy(g_hLink);
+       PRINT_RETURN("inm_link_destroy", ret);
+       g_hLink = NULL;
+
+       ret = inm_deinitialize(g_hInm);
+       PRINT_RETURN("inm_deinitialize", ret);
+       g_hInm = NULL;
+}
+
+/*****************************************
+ * CAPI_NETWORK_INM_LINK_MODULE
+ *****************************************/
+
+/**
+ * @testcase        utc_inm_link_address_destroy_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Destroys the address handle.
+ * @scenario        Invoking inm_link_address_destroy with valid parameter.
+ */
+int utc_inm_link_address_destroy_p(void)
+{
+       inm_link_address_h address_clone = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_destroy(address_clone);
+               CHECK_RETURN("inm_link_address_destroy", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_clone(&address_clone, g_hAddress);
+       CHECK_RETURN("inm_link_address_clone", ret, INM_ERROR_NONE);
+
+       ret = inm_link_address_destroy(address_clone);
+       CHECK_RETURN("inm_link_address_destroy", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_destroy_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     inm_link_address_destroy should fail with invalid parameter.
+ * @scenario        Verify inm_link_destroy by passing invalid parameter.
+ */
+int utc_inm_link_address_destroy_n(void)
+{
+       int ret = inm_link_address_destroy(NULL);
+
+       if (!g_bFeatureInm)
+               CHECK_RETURN("inm_link_address_destroy", ret, INM_ERROR_NOT_SUPPORTED);
+       else
+               CHECK_RETURN("inm_link_address_destroy", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_clone_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Clones a link address handle.
+ * @scenario        Verify inm_link_address_clone with valid parameter and destroy it.
+ */
+int utc_inm_link_address_clone_p(void)
+{
+       inm_link_address_h address_clone = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_clone(&address_clone, g_hAddress);
+               CHECK_RETURN("inm_link_clone", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_clone(&address_clone, g_hAddress);
+       CHECK_RETURN("inm_link_clone", ret, INM_ERROR_NONE);
+
+       ret = inm_link_address_destroy(address_clone);
+       PRINT_RETURN("inm_link_address_destroy", ret);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_clone_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not Clones a link address handle.
+ * @scenario        Verify inm_link_clone by passing invalid parameters.
+ */
+int utc_inm_link_address_clone_n(void)
+{
+       inm_link_address_h address_clone = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_clone(&address_clone, g_hAddress);
+               CHECK_RETURN("inm_link_clone", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_clone(NULL, NULL);
+       CHECK_RETURN("inm_link_clone", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_clone(&address_clone, NULL);
+       CHECK_RETURN("inm_link_clone", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_clone(NULL, g_hAddress);
+       CHECK_RETURN("inm_link_clone", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_get_family_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Get the address family.
+ * @scenario        Invoking inm_link_address_get_family with valid parameter.
+ */
+int utc_inm_link_address_get_family_p(void)
+{
+       inm_address_family_e family;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_get_family(g_hAddress, &family);
+               CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_get_family(g_hAddress, &family);
+       CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_get_family_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return address family.
+ * @scenario        Verify inm_link_address_get_family by passing invalid parameter.
+ */
+int utc_inm_link_address_get_family_n(void)
+{
+       inm_address_family_e family;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_get_family(g_hAddress, &family);
+               CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_get_family(NULL, NULL);
+       CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_get_family(NULL, &family);
+       CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_get_family(g_hAddress, NULL);
+       CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_get_prefix_length_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Get the address prefix length.
+ * @scenario        Invoking inm_link_address_get_prefix_length with valid parameter.
+ */
+int utc_inm_link_address_get_prefix_length_p(void)
+{
+       int prefix_length;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_get_prefix_length(g_hAddress, &prefix_length);
+               CHECK_RETURN("inm_link_address_get_prefix_length", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_get_prefix_length(g_hAddress, &prefix_length);
+       CHECK_RETURN("inm_link_address_get_prefix_length", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_get_prefix_length_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return address prefix length.
+ * @scenario        Verify inm_link_address_get_prefix_length by passing invalid parameter.
+ */
+int utc_inm_link_address_get_prefix_length_n(void)
+{
+       int prefix_length;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_get_prefix_length(g_hAddress, &prefix_length);
+               CHECK_RETURN("inm_link_address_get_prefix_length", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_get_prefix_length(NULL, NULL);
+       CHECK_RETURN("inm_link_address_get_prefix_length", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_get_prefix_length(NULL, &prefix_length);
+       CHECK_RETURN("inm_link_address_get_prefix_length", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_get_prefix_length(g_hAddress, NULL);
+       CHECK_RETURN("inm_link_address_get_prefix_length", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_get_scope_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Get the address scope.
+ * @scenario        Invoking inm_link_address_get_scope with valid parameter.
+ */
+int utc_inm_link_address_get_scope_p(void)
+{
+       inm_link_scope_e scope;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_get_scope(g_hAddress, &scope);
+               CHECK_RETURN("inm_link_address_get_scope", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_get_scope(g_hAddress, &scope);
+       CHECK_RETURN("inm_link_address_get_scope", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_get_scope_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return address scope.
+ * @scenario        Verify inm_link_address_get_scope by passing invalid parameter.
+ */
+int utc_inm_link_address_get_scope_n(void)
+{
+       inm_link_scope_e scope;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_get_scope(g_hAddress, &scope);
+               CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_get_scope(NULL, NULL);
+       CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_get_scope(NULL, &scope);
+       CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_get_scope(g_hAddress, NULL);
+       CHECK_RETURN("inm_link_address_get_family", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_get_string_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Get the address string.
+ * @scenario        Invoking inm_link_address_get_string with valid parameter.
+ */
+int utc_inm_link_address_get_string_p(void)
+{
+       char *p_addr_str = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_get_string(g_hAddress, &p_addr_str);
+               CHECK_RETURN("inm_link_address_get_string", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_get_string(g_hAddress, &p_addr_str);
+       if (!p_addr_str)
+               CHECK_RETURN("inm_link_address_get_string", ret, INM_ERROR_DATA_NOT_FOUND);
+       else
+               CHECK_RETURN("inm_link_address_get_string", ret, INM_ERROR_NONE);
+       FREE_MEMORY_TC(p_addr_str);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_address_get_string_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return address string.
+ * @scenario        Verify inm_link_address_get_string by passing invalid parameter.
+ */
+int utc_inm_link_address_get_string_n(void)
+{
+       char *p_addr_str = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_address_get_string(g_hAddress, &p_addr_str);
+               CHECK_RETURN("inm_link_address_get_string", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_address_get_string(NULL, NULL);
+       CHECK_RETURN("inm_link_address_get_string", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_get_string(NULL, &p_addr_str);
+       CHECK_RETURN("inm_link_address_get_string", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_address_get_string(g_hAddress, NULL);
+       CHECK_RETURN("inm_link_address_get_string", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
diff --git a/src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link-route.c b/src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link-route.c
new file mode 100644 (file)
index 0000000..5735b61
--- /dev/null
@@ -0,0 +1,456 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "utc-intelligent-network-monitoring-common.h"
+
+/**
+ * @function        utc_inm_link_route_startup
+ * @since_tizen     5.5
+ * @description     Initializes inm link route.Called before each test
+ * @parameter       NA
+ * @return          NA
+ */
+void utc_inm_link_route_startup(void)
+{
+       g_bFeatureInm = inm_check_feature_supported(FEATURE_INM);
+       g_hLink = NULL;
+
+       int ret = inm_initialize(&g_hInm);
+       PRINT_RETURN("inm_initialize", ret);
+       if (ret != INM_ERROR_NONE) {
+               if (ret != INM_ERROR_NOT_SUPPORTED || !g_bFeatureInm) {
+                       FPRINTF("[%s:%d] Fail to initialize\\n", __FILE__, __LINE__);
+                       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Fail to initialize", __FILE__, __LINE__);
+               }
+               return;
+       }
+
+       ret = inm_get_current_link(&g_hLink);
+       if (ret != INM_ERROR_NONE || !g_hLink) {
+               FPRINTF("[%s:%d] Fail to get current link\\n", __FILE__, __LINE__);
+               dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Fail to get current link", __FILE__, __LINE__);
+               return;
+       }
+
+       ret = inm_save_any_route(g_hLink);
+       if (ret != INM_ERROR_NONE || !g_hRoute) {
+               FPRINTF("[%s:%d] Fail to get current link route\\n", __FILE__, __LINE__);
+               dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Fail to get current route", __FILE__, __LINE__);
+               return;
+       }
+}
+
+/**
+ * @function        utc_inm_link_route_cleanup
+ * @since_tizen     5.5
+ * @description     Deinitializes inm.Called after each test.
+ * @parameter       NA
+ * @return          NA
+ */
+void utc_inm_link_route_cleanup(void)
+{
+       int ret;
+
+       ret = inm_link_route_destroy(g_hRoute);
+       PRINT_RETURN("inm_link_route_destroy", ret);
+       g_hRoute = NULL;
+
+       ret = inm_link_destroy(g_hLink);
+       PRINT_RETURN("inm_link_destroy", ret);
+       g_hLink = NULL;
+
+       ret = inm_deinitialize(g_hInm);
+       PRINT_RETURN("inm_deinitialize", ret);
+       g_hInm = NULL;
+}
+
+/*****************************************
+ * CAPI_NETWORK_INM_LINK_MODULE
+ *****************************************/
+
+/**
+ * @testcase        utc_inm_link_route_destroy_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Destroys the route handle.
+ * @scenario        Invoking inm_link_route_destroy with valid parameter.
+ */
+int utc_inm_link_route_destroy_p(void)
+{
+       inm_link_route_h route_clone = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_destroy(route_clone);
+               CHECK_RETURN("inm_link_route_destroy", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_clone(&route_clone, g_hRoute);
+       CHECK_RETURN("inm_link_route_clone", ret, INM_ERROR_NONE);
+
+       ret = inm_link_route_destroy(route_clone);
+       CHECK_RETURN("inm_link_route_destroy", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_destroy_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     inm_link_route_destroy should fail with invalid parameter.
+ * @scenario        Verify inm_link_destroy by passing invalid parameter.
+ */
+int utc_inm_link_route_destroy_n(void)
+{
+       int ret = inm_link_route_destroy(NULL);
+       if (!g_bFeatureInm)
+               CHECK_RETURN("inm_link_route_destroy", ret, INM_ERROR_NOT_SUPPORTED);
+       else
+               CHECK_RETURN("inm_link_route_destroy", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_clone_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Clones a link route handle.
+ * @scenario        Verify inm_link_route_clone with valid parameter and destroy it.
+ */
+int utc_inm_link_route_clone_p(void)
+{
+       inm_link_route_h route_clone = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_clone(&route_clone, g_hRoute);
+               CHECK_RETURN("inm_link_clone", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_clone(&route_clone, g_hRoute);
+       CHECK_RETURN("inm_link_route_clone", ret, INM_ERROR_NONE);
+
+       ret = inm_link_route_destroy(route_clone);
+       PRINT_RETURN("inm_link_route_destroy", ret);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_clone_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not Clones a link route handle.
+ * @scenario        Verify inm_link_clone by passing invalid parameters.
+ */
+int utc_inm_link_route_clone_n(void)
+{
+       inm_link_route_h route_clone = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_clone(&route_clone, g_hRoute);
+               CHECK_RETURN("inm_link_route_clone", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_clone(NULL, NULL);
+       CHECK_RETURN("inm_link_route_clone", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_clone(&route_clone, NULL);
+       CHECK_RETURN("inm_link_route_clone", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_clone(NULL, g_hRoute);
+       CHECK_RETURN("inm_link_route_clone", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_get_destination_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Get the route destination.
+ * @scenario        Invoking inm_link_route_get_destination with valid parameter.
+ */
+int utc_inm_link_route_get_destination_p(void)
+{
+       char *destination = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_get_destination(g_hRoute, &destination);
+               CHECK_RETURN("inm_link_route_get_destination", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_get_destination(g_hRoute, &destination);
+       if (!destination)
+               CHECK_RETURN("inm_link_route_get_destination", ret, INM_ERROR_DATA_NOT_FOUND);
+       else
+               CHECK_RETURN("inm_link_route_get_destination", ret, INM_ERROR_NONE);
+       FREE_MEMORY_TC(destination);
+
+       return 0;
+}
+
+
+/**
+ * @testcase        utc_inm_link_route_get_destination_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return route destination.
+ * @scenario        Verify inm_link_route_get_destination by passing invalid parameter.
+ */
+int utc_inm_link_route_get_destination_n(void)
+{
+       char *destination = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_get_destination(g_hRoute, &destination);
+               CHECK_RETURN("inm_link_route_get_destination", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_get_destination(NULL, NULL);
+       CHECK_RETURN("inm_link_route_get_destination", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_get_destination(NULL, &destination);
+       CHECK_RETURN("inm_link_route_get_destination", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_get_destination(g_hRoute, NULL);
+       CHECK_RETURN("inm_link_route_get_destination", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_get_gateway_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Get the route gateway.
+ * @scenario        Invoking inm_link_route_get_gateway with valid parameter.
+ */
+int utc_inm_link_route_get_gateway_p(void)
+{
+       char *gateway = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_get_gateway(g_hRoute, &gateway);
+               CHECK_RETURN("inm_link_route_get_gateway", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_get_gateway(g_hRoute, &gateway);
+       if (!gateway)
+               CHECK_RETURN("inm_link_route_get_gateway", ret, INM_ERROR_DATA_NOT_FOUND);
+       else
+               CHECK_RETURN("inm_link_route_get_gateway", ret, INM_ERROR_NONE);
+       FREE_MEMORY_TC(gateway);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_get_gateway_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return route gateway.
+ * @scenario        Verify inm_link_route_get_gateway by passing invalid parameter.
+ */
+int utc_inm_link_route_get_gateway_n(void)
+{
+       char *gateway = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_get_gateway(g_hRoute, &gateway);
+               CHECK_RETURN("inm_link_route_get_gateway", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_get_gateway(NULL, NULL);
+       CHECK_RETURN("inm_link_route_get_gateway", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_get_gateway(NULL, &gateway);
+       CHECK_RETURN("inm_link_route_get_gateway", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_get_gateway(g_hRoute, NULL);
+       CHECK_RETURN("inm_link_route_get_gateway", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_get_interface_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Get the route interface.
+ * @scenario        Invoking inm_link_route_get_interface with valid parameter.
+ */
+int utc_inm_link_route_get_interface_p(void)
+{
+       char *interface = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_get_interface(g_hRoute, &interface);
+               CHECK_RETURN("inm_link_route_get_interface", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_get_interface(g_hRoute, &interface);
+       if (!interface)
+               CHECK_RETURN("inm_link_route_get_interface", ret, INM_ERROR_DATA_NOT_FOUND);
+       else
+               CHECK_RETURN("inm_link_route_get_interface", ret, INM_ERROR_NONE);
+       FREE_MEMORY_TC(interface);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_get_interface_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return route interface.
+ * @scenario        Verify inm_link_route_get_interface by passing invalid parameter.
+ */
+int utc_inm_link_route_get_interface_n(void)
+{
+       char *interface = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_get_interface(g_hRoute, &interface);
+               CHECK_RETURN("inm_link_route_get_interface", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_get_interface(NULL, NULL);
+       CHECK_RETURN("inm_link_route_get_interface", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_get_interface(NULL, &interface);
+       CHECK_RETURN("inm_link_route_get_interface", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_get_interface(g_hRoute, NULL);
+       CHECK_RETURN("inm_link_route_get_interface", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_is_default_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Check if route is default route.
+ * @scenario        Invoking inm_link_route_is_default with valid parameter.
+ */
+int utc_inm_link_route_is_default_p(void)
+{
+       bool is_default;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_is_default(g_hRoute, &is_default);
+               CHECK_RETURN("inm_link_route_get_interface", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_is_default(g_hRoute, &is_default);
+       CHECK_RETURN("inm_link_route_get_gateway", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_is_default_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return route is default.
+ * @scenario        Verify inm_link_route_is_default by passing invalid parameter.
+ */
+int utc_inm_link_route_is_default_n(void)
+{
+       bool is_default;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_is_default(g_hRoute, &is_default);
+               CHECK_RETURN("inm_link_route_is_default", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_is_default(NULL, NULL);
+       CHECK_RETURN("inm_link_route_is_default", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_is_default(NULL, &is_default);
+       CHECK_RETURN("inm_link_route_is_default", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_is_default(g_hRoute, NULL);
+       CHECK_RETURN("inm_link_route_is_default", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_get_type_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the route type.
+ * @scenario        Invoking inm_link_route_get_type with valid parameter.
+ */
+int utc_inm_link_route_get_type_p(void)
+{
+       inm_link_route_type_e type;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_get_type(g_hRoute, &type);
+               CHECK_RETURN("inm_link_route_get_type", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_get_type(g_hRoute, &type);
+       CHECK_RETURN("inm_link_route_get_type", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_route_get_type_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return route type.
+ * @scenario        Verify inm_link_route_get_type by passing invalid parameter.
+ */
+int utc_inm_link_route_get_type_n(void)
+{
+       inm_link_route_type_e type;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_route_get_type(g_hRoute, &type);
+               CHECK_RETURN("inm_link_route_get_type", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_route_get_type(NULL, NULL);
+       CHECK_RETURN("inm_link_route_get_type", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_get_type(NULL, &type);
+       CHECK_RETURN("inm_link_route_get_type", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_route_get_type(g_hRoute, NULL);
+       CHECK_RETURN("inm_link_route_get_type", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
diff --git a/src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link.c b/src/utc/intelligent-network-monitoring/utc-intelligent-network-monitoring-link.c
new file mode 100644 (file)
index 0000000..56122ad
--- /dev/null
@@ -0,0 +1,525 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "utc-intelligent-network-monitoring-common.h"
+
+/**
+ * @function        utc_inm_link_startup
+ * @since_tizen     5.5
+ * @description     Initializes inm link.Called before each test
+ * @parameter       NA
+ * @return          NA
+ */
+void utc_inm_link_startup(void)
+{
+       g_bFeatureInm = inm_check_feature_supported(FEATURE_INM);
+       g_hLink = NULL;
+
+       int ret = inm_initialize(&g_hInm);
+       PRINT_RETURN("inm_initialize", ret);
+       if (ret != INM_ERROR_NONE) {
+               if (ret != INM_ERROR_NOT_SUPPORTED || !g_bFeatureInm) {
+                       FPRINTF("[%s:%d] Fail to initialize\\n", __FILE__, __LINE__);
+                       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Fail to initialize", __FILE__, __LINE__);
+               }
+               return;
+       }
+
+       ret = inm_get_current_link(&g_hLink);
+       if (ret != INM_ERROR_NONE || !g_hLink) {
+               FPRINTF("[%s:%d] Fail to get current link\\n", __FILE__, __LINE__);
+               dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Fail to get current link", __FILE__, __LINE__);
+               return;
+       }
+}
+
+/**
+ * @function        utc_inm_link_cleanup
+ * @since_tizen     5.5
+ * @description     Deinitializes inm link.Called after each test.
+ * @parameter       NA
+ * @return          NA
+ */
+void utc_inm_link_cleanup(void)
+{
+       int ret;
+
+       ret = inm_link_destroy(g_hLink);
+       PRINT_RETURN("inm_link_destroy", ret);
+       g_hLink = NULL;
+
+       ret = inm_deinitialize(g_hInm);
+       PRINT_RETURN("inm_deinitialize", ret);
+       g_hInm = NULL;
+}
+
+/*****************************************
+ * CAPI_NETWORK_INM_LINK_MODULE
+ *****************************************/
+
+/**
+ * @testcase        utc_inm_link_destroy_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Destroys the link handle.
+ * @scenario        Invoking inm_link_destroy with valid parameter.
+ */
+int utc_inm_link_destroy_p(void)
+{
+       inm_link_h link_clone = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_destroy(link_clone);
+               CHECK_RETURN("inm_link_destroy", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       if (g_hLink != NULL) {
+               ret = inm_link_clone(&link_clone, g_hLink);
+               CHECK_RETURN("inm_link_clone", ret, INM_ERROR_NONE);
+       }
+
+       ret = inm_link_destroy(link_clone);
+       CHECK_RETURN("inm_link_destroy", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_destroy_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     inm_link_destroy should fail with invalid parameter.
+ * @scenario        Verify inm_link_destroy by passing invalid parameter.
+ */
+int utc_inm_link_destroy_n(void)
+{
+       int ret = inm_link_destroy(NULL);
+
+       if (!g_bFeatureInm)
+               CHECK_RETURN("inm_link_destroy", ret, INM_ERROR_NOT_SUPPORTED);
+       else
+               CHECK_RETURN("inm_link_destroy", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_clone_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Clones a link handle.
+ * @scenario        Verify inm_link_clone with valid parameter and destroy it.
+ */
+int utc_inm_link_clone_p(void)
+{
+       inm_link_h link_cloned = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_clone(&link_cloned, g_hLink);
+               CHECK_RETURN("inm_link_clone", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_clone(&link_cloned, g_hLink);
+       CHECK_RETURN("inm_link_clone", ret, INM_ERROR_NONE);
+
+       ret = inm_link_destroy(link_cloned);
+       PRINT_RETURN("inm_link_destroy", ret);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_clone_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not Clones a profile handle.
+ * @scenario        Verify inm_link_clone by passing invalid parameters.
+ */
+int utc_inm_link_clone_n(void)
+{
+       inm_link_h link_cloned = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_clone(&link_cloned, g_hLink);
+               CHECK_RETURN("inm_link_clone", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_clone(NULL, NULL);
+       CHECK_RETURN("inm_link_clone", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_clone(NULL, g_hLink);
+       CHECK_RETURN("inm_link_clone", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_clone(&link_cloned, NULL);
+       CHECK_RETURN("inm_link_clone", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_interface_name_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link interface name.
+ * @scenario        Invoking inm_link_get_interface_name with valid link handle.
+ */
+int utc_inm_link_get_interface_name_p(void)
+{
+       char *name = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_interface_name(g_hLink, &name);
+               CHECK_RETURN("inm_link_get_interface_name", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_interface_name(g_hLink, &name);
+       FREE_MEMORY_TC(name);
+       CHECK_RETURN("inm_link_get_interface_name", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_interface_name_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return link name.
+ * @scenario        Verify inm_link_get_interface_name by passing invalid parameter.
+ */
+int utc_inm_link_get_interface_name_n(void)
+{
+       char *name = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_interface_name(g_hLink, &name);
+               CHECK_RETURN("inm_link_get_interface_name", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_interface_name(NULL, NULL);
+       CHECK_RETURN("inm_link_get_interface_name", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_interface_name(NULL, &name);
+       CHECK_RETURN("inm_link_get_interface_name", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_interface_name(g_hLink, NULL);
+       CHECK_RETURN("inm_link_get_interface_name", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_flags_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link flags.
+ * @scenario        Invoking inm_link_get_flags with valid link handle.
+ */
+int utc_inm_link_get_flags_p(void)
+{
+       int flags;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_flags(g_hLink, &flags);
+               CHECK_RETURN("inm_link_get_flags", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_flags(g_hLink, &flags);
+       CHECK_RETURN("inm_link_get_flags", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_flags_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return link flags.
+ * @scenario        Verify inm_link_get_flags by passing invalid parameter.
+ */
+int utc_inm_link_get_flags_n(void)
+{
+       int flags;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_flags(g_hLink, &flags);
+               CHECK_RETURN("inm_link_get_flags", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_flags(NULL, NULL);
+       CHECK_RETURN("inm_link_get_flags", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_flags(NULL, &flags);
+       CHECK_RETURN("inm_link_get_flags", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_flags(g_hLink, NULL);
+       CHECK_RETURN("inm_link_get_flags", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_operation_state_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link operation state.
+ * @scenario        Invoking inm_link_get_operation_state with valid link handle.
+ */
+int utc_inm_link_get_operation_state_p(void)
+{
+       inm_link_oper_state_e operation_state;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_operation_state(g_hLink, &operation_state);
+               CHECK_RETURN("inm_link_get_operation_state", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_operation_state(g_hLink, &operation_state);
+       CHECK_RETURN("inm_link_get_operation_state", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_operation_state_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return link operation state.
+ * @scenario        Verify inm_link_get_operation_state by passing invalid parameter.
+ */
+int utc_inm_link_get_operation_state_n(void)
+{
+       inm_link_oper_state_e operation_state;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_operation_state(g_hLink, &operation_state);
+               CHECK_RETURN("inm_link_get_operation_state", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+       ret = inm_link_get_operation_state(NULL, NULL);
+       CHECK_RETURN("inm_link_get_operation_state", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_operation_state(NULL, &operation_state);
+       CHECK_RETURN("inm_link_get_operation_state", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_operation_state(g_hLink, NULL);
+       CHECK_RETURN("inm_link_get_operation_state", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_received_bytes_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link received bytes.
+ * @scenario        Invoking inm_link_get_received_bytes with valid link handle.
+ */
+int utc_inm_link_get_received_bytes_p(void)
+{
+       unsigned long long bytes;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_received_bytes(g_hLink, &bytes);
+               CHECK_RETURN("inm_link_get_received_bytes", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_received_bytes(g_hLink, &bytes);
+       CHECK_RETURN("inm_link_get_received_bytes", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_received_bytes_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return link received bytes.
+ * @scenario        Verify inm_link_get_received_bytes by passing invalid parameter.
+ */
+int utc_inm_link_get_received_bytes_n(void)
+{
+       unsigned long long bytes;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_received_bytes(g_hLink, &bytes);
+               CHECK_RETURN("inm_link_get_received_bytes", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_received_bytes(NULL, NULL);
+       CHECK_RETURN("inm_link_get_received_bytes", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_received_bytes(NULL, &bytes);
+       CHECK_RETURN("inm_link_get_received_bytes", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_received_bytes(g_hLink, NULL);
+       CHECK_RETURN("inm_link_get_received_bytes", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_sent_bytes_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link sent bytes.
+ * @scenario        Invoking inm_link_get_sent_bytes with valid link handle.
+ */
+int utc_inm_link_get_sent_bytes_p(void)
+{
+       unsigned long long bytes;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_sent_bytes(g_hLink, &bytes);
+               CHECK_RETURN("inm_link_get_sent_bytes", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_sent_bytes(g_hLink, &bytes);
+       CHECK_RETURN("inm_link_get_sent_bytes", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_get_sent_bytes_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Should not return link sent bytes.
+ * @scenario        Verify inm_link_get_sent_bytes by passing invalid parameter.
+ */
+int utc_inm_link_get_sent_bytes_n(void)
+{
+       unsigned long long bytes;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_get_sent_bytes(g_hLink, &bytes);
+               CHECK_RETURN("inm_link_get_sent_bytes", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_get_sent_bytes(NULL, NULL);
+       CHECK_RETURN("inm_link_get_sent_bytes", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_sent_bytes(NULL, &bytes);
+       CHECK_RETURN("inm_link_get_sent_bytes", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_link_get_sent_bytes(g_hLink, NULL);
+       CHECK_RETURN("inm_link_get_sent_bytes", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_foreach_address_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link address information.
+ * @scenario        Get all the network interface address information. Ensure no error.
+ */
+int utc_inm_link_foreach_address_p(void)
+{
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_foreach_address(g_hLink, inm_foreach_address_callback, NULL);
+               CHECK_RETURN("inm_link_foreach_address", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_foreach_address(g_hLink, inm_foreach_address_callback, NULL);
+       CHECK_RETURN("inm_link_foreach_address", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_foreach_address_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Verify inm_link_foreach_address by passing invalid parameters
+ * @scenario        Pass invalid parameters and ensure network interface information are not returned.
+ *                  Ensure return value should be INM_ERROR_INVALID_PARAMETER.
+ */
+int utc_inm_link_foreach_address_n(void)
+{
+    int ret = INM_ERROR_NONE;
+
+       ret = inm_link_foreach_address(NULL, NULL, NULL);
+
+       if (!g_bFeatureInm)
+               CHECK_RETURN("inm_link_foreach_address", ret, INM_ERROR_NOT_SUPPORTED);
+       else
+               CHECK_RETURN("inm_link_foreach_address", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+
+/**
+ * @testcase        utc_inm_link_foreach_route_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link route information.
+ * @scenario        Get all the network interface route information. Ensure no error.
+ */
+int utc_inm_link_foreach_route_p(void)
+{
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_link_foreach_route(g_hLink, inm_foreach_route_callback, NULL);
+               CHECK_RETURN("inm_link_foreach_route", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_link_foreach_route(g_hLink, inm_foreach_route_callback, NULL);
+       CHECK_RETURN("inm_link_foreach_route", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_link_foreach_route_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Verify inm_link_foreach_route by passing invalid parameters
+ * @scenario        Pass invalid parameters and ensure network interface information are not returned.
+ *                  Ensure return value should be INM_ERROR_INVALID_PARAMETER.
+ */
+int utc_inm_link_foreach_route_n(void)
+{
+    int ret = INM_ERROR_NONE;
+
+       ret = inm_link_foreach_route(NULL, NULL, NULL);
+
+       if (!g_bFeatureInm)
+               CHECK_RETURN("inm_link_foreach_route", ret, INM_ERROR_NOT_SUPPORTED);
+       else
+               CHECK_RETURN("inm_link_foreach_route", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
index 6b9f1c408f21de5752e8b3d8cab7e3615a0e58d8..acd566214ecda6446d14b4f34199112c00f0b6d6 100755 (executable)
@@ -3990,3 +3990,103 @@ int utc_inm_wifi_ap_foreach_vsie_n(void)
        return 0;
 }
 
+/**
+ * @testcase        utc_inm_inm_foreach_link_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link information.
+ * @scenario        Get all the network interface information. Ensure no error.
+ */
+int utc_inm_inm_foreach_link_p(void)
+{
+       int ret = INM_ERROR_NONE;
+
+       ret = inm_foreach_link(g_hInm, inm_foreach_link_callback, NULL);
+       if (!g_bFeatureInm)
+               CHECK_RETURN("inm_foreach_link", ret, INM_ERROR_NOT_SUPPORTED);
+       else
+               CHECK_RETURN("inm_foreach_link", ret, INM_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_inm_foreach_link_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     Verify inm_inm_foreach_link by passing invalid parameters
+ * @scenario        Pass invalid parameters and ensure network interface information are not returned.
+ *                  Ensure return value should be INM_ERROR_INVALID_PARAMETER.
+ */
+int utc_inm_inm_foreach_link_n(void)
+{
+       int ret = INM_ERROR_NONE;
+
+       ret = inm_foreach_link(g_hInm, NULL, NULL);
+
+       if (!g_bFeatureInm)
+               CHECK_RETURN("inm_foreach_link", ret, INM_ERROR_NOT_SUPPORTED);
+       else
+               CHECK_RETURN("inm_foreach_link", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_connection_get_link_p
+ * @since_tizen     5.5
+ * @type            Positive
+ * @description     Gets the link from connection.
+ * @scenario        Invoking inm_connection_get_link with valid parameter.
+ */
+int utc_inm_connection_get_link_p(void)
+{
+       inm_connection_h profile_h = NULL;
+       inm_link_h link = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_connection_get_link(profile_h, &link);
+               CHECK_RETURN("inm_connection_get_link", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       ret = inm_get_current_link(&link);
+       CHECK_RETURN("inm_connection_get_link", ret, INM_ERROR_NONE);
+
+       ret = inm_link_destroy(link);
+       PRINT_RETURN("inm_link_destroy", ret);
+
+       return 0;
+}
+
+/**
+ * @testcase        utc_inm_connection_get_link_n
+ * @since_tizen     5.5
+ * @type            Negative
+ * @description     inm_connection_get_link should fail with invalid parameter.
+ * @scenario        Verify inm_connection_get_link by passing invalid parameter.
+ */
+int utc_inm_connection_get_link_n(void)
+{
+       inm_connection_h profile_h = NULL;
+       inm_link_h link = NULL;
+       int ret = INM_ERROR_NONE;
+
+       if (!g_bFeatureInm) {
+               ret = inm_connection_get_link(profile_h, &link);
+               CHECK_RETURN("inm_connection_get_link", ret, INM_ERROR_NOT_SUPPORTED);
+               return 0;
+       }
+
+       inm_get_any_profile(&profile_h);
+
+       ret = inm_connection_get_link(NULL, NULL);
+       CHECK_RETURN("inm_connection_get_link", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_connection_get_link(profile_h, NULL);
+       CHECK_RETURN("inm_connection_get_link", ret, INM_ERROR_INVALID_PARAMETER);
+       ret = inm_connection_get_link(NULL, &link);
+       CHECK_RETURN("inm_connection_get_link", ret, INM_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}