From 5675d2254eec51582b8475eb4b81a7172fc531a2 Mon Sep 17 00:00:00 2001 From: perforce Date: Tue, 31 May 2016 17:20:08 +0900 Subject: [PATCH] [ITC][iotcon][Non-ACR][Fix TC fails] Change-Id: I76a8a8b7379100d37ba14abb55a46b311fa20de9 Signed-off-by: perforce --- src/itc/iotcon/ITs-iotcon-resource.c | 777 +++++++++++++++++++++++------------ 1 file changed, 503 insertions(+), 274 deletions(-) diff --git a/src/itc/iotcon/ITs-iotcon-resource.c b/src/itc/iotcon/ITs-iotcon-resource.c index 859fc6f..44eaa42 100755 --- a/src/itc/iotcon/ITs-iotcon-resource.c +++ b/src/itc/iotcon/ITs-iotcon-resource.c @@ -15,38 +15,6 @@ // #include "ITs-iotcon-common.h" -#include "assert.h" - -#define ITC_LOG_TAG "NativeTCT" -#include - -#define ITC_LOG_RED "\033[0;31m" -#define ITC_LOG_GREEN "\033[0;32m" -#define ITC_LOG_END "\033[0;m" - -#define ITC_INFO(fmt, arg...) \ - do { \ - dlog_print(DLOG_INFO, ITC_LOG_TAG, ITC_LOG_GREEN "[%s][Line : %d] " fmt ITC_LOG_END, __FILE__, __LINE__, ##arg); \ - } while (0) - -#define FN_CALL \ - do { \ - dlog_print(DLOG_INFO, ITC_LOG_TAG, ITC_LOG_GREEN "[%s][Line : %d] %s >>>>>>> called " ITC_LOG_END, __FILE__, __LINE__, __FUNCTION__); \ - } while (0) - -#define ITC_ERR(fmt, arg...) \ - do { \ - dlog_print(DLOG_ERROR, ITC_LOG_TAG, ITC_LOG_RED "[%s][Line : %d] " fmt ITC_LOG_END, __FILE__, __LINE__, ##arg); \ - } while (0) - -#define ITC_ASSERT_EQ(var, ref) \ - if (var != ref) { \ - dlog_print(DLOG_ERROR, ITC_LOG_TAG, \ - ITC_LOG_RED "(%s == 0x%x) and (%s == 0x%x) are not equal" ITC_LOG_END, \ - #var, (int)var, #ref, (int)ref); \ - assert_eq(var, ref); \ - } while (0) - #define LIGHT_RESOURCE_TYPE "core.light" #define LIGHT_RESOURCE_TYPE2 "core.light2" #define LIGHT_RESOURCE_TYPE3 "core.light3" @@ -55,142 +23,35 @@ #define LED_RESOURCE_URI "/a/led" enum { - RESOURCE_BIND_CHILD_RESOURCE_P, - RESOURCE_BIND_CHILD_RESOURCE_N, - RESOURCE_BIND_INTERFACE_P, - RESOURCE_BIND_INTERFACE_N, - RESOURCE_BIND_TYPE_P, - RESOURCE_BIND_TYPE_N, - RESOURCE_CREATE_P, - RESOURCE_CREATE_N, - RESOURCE_DESTROY_P, - RESOURCE_DESTROY_N, - RESOURCE_GET_INTERFACES_P, - RESOURCE_GET_INTERFACES_N, - RESOURCE_GET_NTH_CHILD_P, - RESOURCE_GET_NTH_CHILD_N, - RESOURCE_GET_NUMBER_OF_CHILDREN_P, - RESOURCE_GET_NUMBER_OF_CHILDREN_N, - RESOURCE_GET_PROPERTIES_P, - RESOURCE_GET_PROPERTIES_N, - RESOURCE_GET_TYPES_P, - RESOURCE_GET_TYPES_N, - RESOURCE_GET_URI_PATH_P, - RESOURCE_GET_URI_PATH_N, - RESOURCE_NOTIFY_P, - RESOURCE_NOTIFY_N, - RESOURCE_SET_REQUEST_HANDLER_P, - RESOURCE_SET_REQUEST_HANDLER_N, - RESOURCE_UNBIND_CHILD_RESOURCE_P, - RESOURCE_UNBIND_CHILD_RESOURCE_N, + RESOURCE_BIND_CHILD_RESOURCE, + RESOURCE_BIND_INTERFACE, + RESOURCE_BIND_TYPE, + RESOURCE_CREATE, + RESOURCE_DESTROY, + RESOURCE_GET_INTERFACES, + RESOURCE_GET_NTH_CHILD, + RESOURCE_GET_NUMBER_OF_CHILDREN, + RESOURCE_GET_PROPERTIES, + RESOURCE_GET_TYPES, + RESOURCE_GET_URI_PATH, + RESOURCE_NOTIFY, + RESOURCE_SET_REQUEST_HANDLER, + RESOURCE_UNBIND_CHILD_RESOURCE, }; -static bool g_feature; bool g_check = false; +static bool g_bRequestHandlerCB = false; +static bool g_bResult; +static iotcon_resource_h g_hLightResource; +static iotcon_remote_resource_h g_hRemoteResource; -int itc_create_resource_types(const char *type, iotcon_resource_types_h *types_h) -{ - int nRet; - iotcon_resource_types_h types; - - nRet = iotcon_resource_types_create(&types); - if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_resource_types_create() Fail(%d)", nRet); - return nRet; - } - - nRet = iotcon_resource_types_add(types, type); - if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_resource_types_add() Fail(%d)", nRet); - iotcon_resource_types_destroy(types); - return nRet; - } - - *types_h = types; - return 0; -} - -int itc_create_resource_interfaces(iotcon_resource_interfaces_h *ifaces_h) -{ - int nRet; - iotcon_resource_interfaces_h ifaces; - - nRet = iotcon_resource_interfaces_create(&ifaces); - if (IOTCON_ERROR_NONE != nRet) { - FPRINTF("iotcon_resource_interfaces_create() Fail(%d)", nRet); - return nRet; - } - - nRet = iotcon_resource_interfaces_add(ifaces, IOTCON_INTERFACE_DEFAULT); - if (IOTCON_ERROR_NONE != nRet) { - FPRINTF("iotcon_resource_interfaces_add() Fail(%d)", nRet); - iotcon_resource_interfaces_destroy(ifaces); - return nRet; - } - - nRet = iotcon_resource_interfaces_add(ifaces, IOTCON_INTERFACE_BATCH); - if (IOTCON_ERROR_NONE != nRet) { - FPRINTF("iotcon_resource_interfaces_add() Fail(%d)", nRet); - iotcon_resource_interfaces_destroy(ifaces); - return nRet; - } - - *ifaces_h = ifaces; - - return 0; -} - -static void _Iotcon_request_handler(iotcon_resource_h resource, - iotcon_request_h request, void *user_data) -{ - g_check = true; - FN_CALL; -} - -int itc_create_resource(const char *resource_type, const char *resource_uri, iotcon_resource_h *resource_handle) -{ - int nRet; - int nIotconTimeoutId = 0; - iotcon_resource_h resource = NULL; - iotcon_resource_types_h types; - iotcon_resource_interfaces_h ifaces; - - nRet = itc_create_resource_types(resource_type, &types); - if (IOTCON_ERROR_NONE != nRet) { - FPRINTF("itc_create_resource_types() Fail(%d)", nRet); - return nRet; - } - - nRet = itc_create_resource_interfaces(&ifaces); - if (IOTCON_ERROR_NONE != nRet) { - FPRINTF("itc_create_resource_interfaces() Fail(%d)", nRet); - iotcon_resource_types_destroy(types); - return nRet; - } - - nRet = iotcon_resource_create(resource_uri, - types, - ifaces, - (IOTCON_RESOURCE_DISCOVERABLE | IOTCON_RESOURCE_OBSERVABLE), - _Iotcon_request_handler, - NULL, - &resource); - if (IOTCON_ERROR_NONE != nRet) { - FPRINTF("iotcon_resource_create() Fail(%d)", nRet); - iotcon_resource_interfaces_destroy(ifaces); - iotcon_resource_types_destroy(types); - return nRet; - } - RUN_POLLING_LOOP; - - iotcon_resource_interfaces_destroy(ifaces); - iotcon_resource_types_destroy(types); - - *resource_handle = resource; - return 0; -} - -int itc_create_state(iotcon_state_h *state_h) +/** +* @function CreateState +* @description Called to create iotcon state handle +* @parameter iotcon_state_h : The state handle +* @return int +*/ +static int CreateState(iotcon_state_h *state_h) { int nRet; iotcon_state_h state, val_state; @@ -199,48 +60,48 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_state_create(&state); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_create() Fail(%d)", nRet); + FPRINTF("iotcon_state_create() Fail(%d)", nRet); return nRet; } nRet = iotcon_state_add_int(state, "int", 1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_int() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_int() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_state_add_bool(state, "bool", true); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_bool() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_bool() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_state_add_double(state, "double", 1.1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_double() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_double() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_state_add_null(state, "null"); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_null() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_null() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_state_add_str(state, "str", "string"); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_str() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_str() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_state_add_byte_str(state, "bytestr", byte_str, 3); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_byte_str() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_byte_str() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } @@ -248,14 +109,14 @@ int itc_create_state(iotcon_state_h *state_h) /* state */ nRet = iotcon_state_create(&val_state); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_create() Fail(%d)", nRet); + FPRINTF("iotcon_state_create() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_state_add_int(val_state, "val_state", 10); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_int() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_int() Fail(%d)", nRet); iotcon_state_destroy(val_state); iotcon_state_destroy(state); return nRet; @@ -263,7 +124,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_state_add_state(state, "state", val_state); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_state() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_state() Fail(%d)", nRet); iotcon_state_destroy(val_state); iotcon_state_destroy(state); return nRet; @@ -272,7 +133,7 @@ int itc_create_state(iotcon_state_h *state_h) /* state list */ nRet = iotcon_list_create(IOTCON_TYPE_STATE, &list6); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_create() Fail(%d)", nRet); + FPRINTF("iotcon_list_create() Fail(%d)", nRet); iotcon_state_destroy(val_state); iotcon_state_destroy(state); return nRet; @@ -280,7 +141,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_list_add_state(list6, val_state, -1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_add_state() Fail(%d)", nRet); + FPRINTF("iotcon_list_add_state() Fail(%d)", nRet); iotcon_list_destroy(list6); iotcon_state_destroy(val_state); iotcon_state_destroy(state); @@ -290,7 +151,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_state_add_list(state, "state_list", list6); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_list() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_list() Fail(%d)", nRet); iotcon_list_destroy(list6); iotcon_state_destroy(state); return nRet; @@ -300,14 +161,14 @@ int itc_create_state(iotcon_state_h *state_h) /* int list */ nRet = iotcon_list_create(IOTCON_TYPE_INT, &list1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_create() Fail(%d)", nRet); + FPRINTF("iotcon_list_create() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_list_add_int(list1, 1, -1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_add_int() Fail(%d)", nRet); + FPRINTF("iotcon_list_add_int() Fail(%d)", nRet); iotcon_list_destroy(list1); iotcon_state_destroy(state); return nRet; @@ -315,7 +176,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_state_add_list(state, "int_list", list1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_list() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_list() Fail(%d)", nRet); iotcon_list_destroy(list1); iotcon_state_destroy(state); return nRet; @@ -325,14 +186,14 @@ int itc_create_state(iotcon_state_h *state_h) /* boolean list */ nRet = iotcon_list_create(IOTCON_TYPE_BOOL, &list2); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_create() Fail(%d)", nRet); + FPRINTF("iotcon_list_create() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_list_add_bool(list2, true, -1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_add_bool() Fail(%d)", nRet); + FPRINTF("iotcon_list_add_bool() Fail(%d)", nRet); iotcon_list_destroy(list2); iotcon_state_destroy(state); return nRet; @@ -340,7 +201,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_state_add_list(state, "bool_list", list2); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_list() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_list() Fail(%d)", nRet); iotcon_list_destroy(list2); iotcon_state_destroy(state); return nRet; @@ -350,14 +211,14 @@ int itc_create_state(iotcon_state_h *state_h) /* string list */ nRet = iotcon_list_create(IOTCON_TYPE_STR, &list3); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_create() Fail(%d)", nRet); + FPRINTF("iotcon_list_create() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_list_add_str(list3, "string", -1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_add_str() Fail(%d)", nRet); + FPRINTF("iotcon_list_add_str() Fail(%d)", nRet); iotcon_list_destroy(list3); iotcon_state_destroy(state); return nRet; @@ -365,7 +226,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_state_add_list(state, "str_list", list3); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_list() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_list() Fail(%d)", nRet); iotcon_list_destroy(list3); iotcon_state_destroy(state); return nRet; @@ -375,14 +236,14 @@ int itc_create_state(iotcon_state_h *state_h) /* byte string list */ nRet = iotcon_list_create(IOTCON_TYPE_BYTE_STR, &list4); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_create() Fail(%d)", nRet); + FPRINTF("iotcon_list_create() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_list_add_byte_str(list4, byte_str, 3, -1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_add_byte_str() Fail(%d)", nRet); + FPRINTF("iotcon_list_add_byte_str() Fail(%d)", nRet); iotcon_list_destroy(list4); iotcon_state_destroy(state); return nRet; @@ -390,7 +251,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_state_add_list(state, "byte_str_list", list4); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_list() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_list() Fail(%d)", nRet); iotcon_list_destroy(list4); iotcon_state_destroy(state); return nRet; @@ -399,7 +260,7 @@ int itc_create_state(iotcon_state_h *state_h) /* list list */ nRet = iotcon_list_create(IOTCON_TYPE_LIST, &list5); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_create() Fail(%d)", nRet); + FPRINTF("iotcon_list_create() Fail(%d)", nRet); iotcon_list_destroy(list4); iotcon_state_destroy(state); return nRet; @@ -407,7 +268,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_list_add_list(list5, list4, -1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_add_list() Fail(%d)", nRet); + FPRINTF("iotcon_list_add_list() Fail(%d)", nRet); iotcon_list_destroy(list5); iotcon_list_destroy(list4); iotcon_state_destroy(state); @@ -417,7 +278,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet = iotcon_state_add_list(state, "list_list", list5); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_list() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_list() Fail(%d)", nRet); iotcon_list_destroy(list5); iotcon_state_destroy(state); return nRet; @@ -427,14 +288,14 @@ int itc_create_state(iotcon_state_h *state_h) /* double list */ nRet = iotcon_list_create(IOTCON_TYPE_DOUBLE, &list7); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_create() Fail(%d)", nRet); + FPRINTF("iotcon_list_create() Fail(%d)", nRet); iotcon_state_destroy(state); return nRet; } nRet = iotcon_list_add_double(list7, 1.1, -1); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_list_add_double() Fail(%d)", nRet); + FPRINTF("iotcon_list_add_double() Fail(%d)", nRet); iotcon_list_destroy(list7); iotcon_state_destroy(state); return nRet; @@ -442,7 +303,7 @@ int itc_create_state(iotcon_state_h *state_h) nRet =iotcon_state_add_list(state, "double_list", list7); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_state_add_list() Fail(%d)", nRet); + FPRINTF("iotcon_state_add_list() Fail(%d)", nRet); iotcon_list_destroy(list7); iotcon_state_destroy(state); return nRet; @@ -455,7 +316,77 @@ int itc_create_state(iotcon_state_h *state_h) return 0; } -int itc_create_representation(iotcon_representation_h *representation) +/** +* @function CreateResourceTypes +* @description Called to create iotcon resource types handle +* @parameter iotcon_resource_types_h : The resource types handle +* @return int +*/ +static int CreateResourceTypes(const char *type, iotcon_resource_types_h *types_h) +{ + int nRet; + iotcon_resource_types_h types; + + nRet = iotcon_resource_types_create(&types); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_resource_types_create() Fail(%d)", nRet); + return nRet; + } + + nRet = iotcon_resource_types_add(types, type); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_resource_types_add() Fail(%d)", nRet); + iotcon_resource_types_destroy(types); + return nRet; + } + + *types_h = types; + return 0; +} + +/** +* @function CreateResourceInterfaces +* @description Called to create iotcon interfaces handle +* @parameter iotcon_resource_interfaces_h : The interfaces handle +* @return int +*/ +static int CreateResourceInterfaces(iotcon_resource_interfaces_h *ifaces_h) +{ + int nRet; + iotcon_resource_interfaces_h ifaces; + + nRet = iotcon_resource_interfaces_create(&ifaces); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_resource_interfaces_create() Fail(%d)", nRet); + return nRet; + } + + nRet = iotcon_resource_interfaces_add(ifaces, IOTCON_INTERFACE_DEFAULT); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_resource_interfaces_add() Fail(%d)", nRet); + iotcon_resource_interfaces_destroy(ifaces); + return nRet; + } + + nRet = iotcon_resource_interfaces_add(ifaces, IOTCON_INTERFACE_BATCH); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_resource_interfaces_add() Fail(%d)", nRet); + iotcon_resource_interfaces_destroy(ifaces); + return nRet; + } + + *ifaces_h = ifaces; + + return 0; +} + +/** +* @function CreateRepresentation +* @description Called to create iotcon representation handle +* @parameter iotcon_representation_h : The representation handle +* @return int +*/ +static int CreateRepresentation(iotcon_representation_h *representation) { int nRet; char *uri_path = "/uri_path"; @@ -466,29 +397,29 @@ int itc_create_representation(iotcon_representation_h *representation) nRet = iotcon_representation_create(&repr); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_representation_create() Fail(%d)", nRet); + FPRINTF("iotcon_representation_create() Fail(%d)", nRet); return nRet; } /* uri path */ nRet = iotcon_representation_set_uri_path(repr, uri_path); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_representation_set_uri_path() Fail(%d)", nRet); + FPRINTF("iotcon_representation_set_uri_path() Fail(%d)", nRet); iotcon_representation_destroy(repr); return nRet; } /* resource types */ - nRet = itc_create_resource_types(LIGHT_RESOURCE_TYPE, &types); + nRet = CreateResourceTypes(LIGHT_RESOURCE_TYPE, &types); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("itc_create_resource_types() Fail(%d)", nRet); + FPRINTF("CreateResourceTypes() Fail(%d)", nRet); iotcon_representation_destroy(repr); return nRet; } nRet = iotcon_representation_set_resource_types(repr, types); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_representation_set_resource_types() Fail(%d)", nRet); + FPRINTF("iotcon_representation_set_resource_types() Fail(%d)", nRet); iotcon_resource_types_destroy(types); iotcon_representation_destroy(repr); return nRet; @@ -497,16 +428,16 @@ int itc_create_representation(iotcon_representation_h *representation) iotcon_resource_types_destroy(types); /* resource interfaces */ - nRet = itc_create_resource_interfaces(&ifaces); + nRet = CreateResourceInterfaces(&ifaces); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("itc_create_resource_interfaces() Fail(%d)", nRet); + FPRINTF("CreateResourceInterfaces() Fail(%d)", nRet); iotcon_representation_destroy(repr); return nRet; } nRet = iotcon_representation_set_resource_interfaces(repr, ifaces); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_representation_set_resource_interfaces() Fail(%d)", nRet); + FPRINTF("iotcon_representation_set_resource_interfaces() Fail(%d)", nRet); iotcon_resource_interfaces_destroy(ifaces); iotcon_representation_destroy(repr); return nRet; @@ -515,16 +446,16 @@ int itc_create_representation(iotcon_representation_h *representation) iotcon_resource_interfaces_destroy(ifaces); /* state */ - nRet = itc_create_state(&state); + nRet = CreateState(&state); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("itc_create_state() Fail(%d)", nRet); + FPRINTF("CreateState() Fail(%d)", nRet); iotcon_representation_destroy(repr); return nRet; } nRet = iotcon_representation_set_state(repr, state); if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_representation_set_state() Fail(%d)", nRet); + FPRINTF("iotcon_representation_set_state() Fail(%d)", nRet); iotcon_state_destroy(state); iotcon_representation_destroy(repr); return nRet; @@ -536,6 +467,366 @@ int itc_create_representation(iotcon_representation_h *representation) return 0; } +/** + * @function gmain_loop_quit_idle + * @description Called if some callback is not invoked for a particular timeout + * @parameter gpointer data + * @return gboolean + */ +static gboolean gmain_loop_quit_idle(gpointer p) +{ + + g_main_loop_quit(g_pMainLoop); + return G_SOURCE_REMOVE; +} + +/** +* @function QuitGmainLoopIdle +* @description Called to quit +* @parameter NA +* @return NA +*/ +static void QuitGmainLoopIdle(bool result) +{ + g_bResult = result; + g_idle_add(gmain_loop_quit_idle, NULL); +} + +/** +* @function FindRequestHandlerCB +* @description Called when create iotcon resource to get response handle +* @parameter iotcon_resource_h : The resource handle, iotcon_request_h : The request handle +* user_data : The user data passed from function +* @return NA +*/ +static void FindRequestHandlerCB(iotcon_resource_h resource, + iotcon_request_h request, void *user_data) +{ + FPRINTF("Inside FindRequestHandlerCB callback... \n"); + + int nRet; + iotcon_representation_h repr; + g_bRequestHandlerCB = true; + iotcon_response_h response; + nRet = CreateRepresentation(&repr); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("CreateRepresentation() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_response_create(request, &response); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_response_create() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_response_set_representation(response, IOTCON_INTERFACE_DEFAULT, repr); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_response_set_representation() Fail(%d)", nRet); + iotcon_response_destroy(response); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_response_set_result(response, IOTCON_RESPONSE_OK); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_response_set_result() Fail(%d)", nRet); + iotcon_response_destroy(response); + QuitGmainLoopIdle(false); + return; + } + + iotcon_representation_destroy(repr); + + nRet = iotcon_response_send(response); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_response_send() Fail(%d)", nRet); + iotcon_response_destroy(response); + QuitGmainLoopIdle(false); + return; + } + + iotcon_response_destroy(response); +} + + +/** +* @function RequestHandlerCB +* @description Called when create iotcon resource to get request handle +* @parameter iotcon_resource_h : The resource handle, iotcon_request_h : The request handle +* user_data : The user data passed from function +* @return NA +*/ +static void RequestHandlerCB(iotcon_resource_h resource, iotcon_request_h request, + void *user_data) +{ + FPRINTF("Inside RequestHandlerCB callback... \n"); + + int nRet; + iotcon_representation_h hRep = NULL; + iotcon_response_h hResponse; + g_bRequestHandlerCB = true; + + nRet = CreateRepresentation(&hRep); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("CreateRepresentation() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_response_create(request, &hResponse); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_response_create() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_response_set_representation(hResponse, IOTCON_INTERFACE_DEFAULT, hRep); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_response_set_representation() Fail(%d)", nRet); + iotcon_response_destroy(hResponse); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_response_set_result(hResponse, IOTCON_RESPONSE_OK); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_response_set_result() Fail(%d)", nRet); + iotcon_response_destroy(hResponse); + QuitGmainLoopIdle(false); + return; + } + + iotcon_representation_destroy(hRep); + + nRet = iotcon_response_send(hResponse); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_response_send() Fail(%d)", nRet); + iotcon_response_destroy(hResponse); + QuitGmainLoopIdle(false); + return; + } + + iotcon_response_destroy(hResponse); +} + +/** +* @function CreateResource +* @description Called to create and add resource and interface. +* @parameter NA +* @return intiger : 0 if sussess +*/ +static int CreateResource(int tc_index) +{ + FPRINTF("Inside CreateResource... \n"); + int nRet; + iotcon_resource_types_h hLightTypes; + iotcon_resource_interfaces_h hLightiFaces; + + nRet = iotcon_resource_types_create(&hLightTypes); + PRINT_RESULT(IOTCON_ERROR_NONE, nRet, "iotcon_resource_types_create", IotConGetError(nRet)); + + nRet = iotcon_resource_types_add(hLightTypes, LIGHT_RESOURCE_TYPE); + PRINT_RESULT_CLEANUP(IOTCON_ERROR_NONE, nRet, "iotcon_resource_types_add", IotConGetError(nRet),iotcon_resource_types_destroy(hLightTypes)); + + nRet = iotcon_resource_interfaces_create(&hLightiFaces); + PRINT_RESULT_CLEANUP(IOTCON_ERROR_NONE, nRet, "iotcon_resource_interfaces_create", IotConGetError(nRet),iotcon_resource_types_destroy(hLightTypes)); + + nRet = iotcon_resource_interfaces_add(hLightiFaces, IOTCON_INTERFACE_DEFAULT); + PRINT_RESULT_CLEANUP(IOTCON_ERROR_NONE, nRet, "iotcon_resource_interfaces_add", IotConGetError(nRet),iotcon_resource_interfaces_destroy(hLightiFaces);iotcon_resource_types_destroy(hLightTypes)); + + nRet = iotcon_resource_interfaces_add(hLightiFaces, IOTCON_INTERFACE_BATCH); + PRINT_RESULT_CLEANUP(IOTCON_ERROR_NONE, nRet, "iotcon_resource_interfaces_add", IotConGetError(nRet),iotcon_resource_interfaces_destroy(hLightiFaces);iotcon_resource_types_destroy(hLightTypes)); + nRet = iotcon_resource_create(LIGHT_RESOURCE_URI, + hLightTypes, + hLightiFaces, + (IOTCON_RESOURCE_DISCOVERABLE | IOTCON_RESOURCE_OBSERVABLE), + RequestHandlerCB, + GINT_TO_POINTER(tc_index), + &g_hLightResource); + + PRINT_RESULT_CLEANUP(IOTCON_ERROR_NONE, nRet, "iotcon_resource_create", IotConGetError(nRet),iotcon_resource_interfaces_destroy(hLightiFaces);iotcon_resource_types_destroy(hLightTypes)); + + iotcon_resource_interfaces_destroy(hLightiFaces); + iotcon_resource_types_destroy(hLightTypes); + + return 0; +} + +/** +* @function ResourceNotifyIdle +* @description Called when Resource idle is notified +* @parameter gpointer data +* @return gboolean +*/ +static gboolean ResourceNotifyIdle(gpointer p) +{ + int nRet; + iotcon_representation_h repr; + CreateRepresentation(&repr); + nRet = iotcon_resource_notify(g_hLightResource, repr, NULL, IOTCON_QOS_HIGH); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_resource_notify() Fail(%d)", nRet); + iotcon_representation_destroy(repr); + QuitGmainLoopIdle(false); + return G_SOURCE_REMOVE; + } + iotcon_representation_destroy(repr); + return G_SOURCE_REMOVE; +} + +/** +* @function ResourceObserveCB +* @description Called when resource observe is registered +* @parameter iotcon_remote_resource_h : The remote resource handle, iotcon_error_e : The iotcon error, +* sequence number ,iotcon_response_h: Iotcon Reponse user_data : The user data passed from function +* @return NA +*/ +static void ResourceObserveCB(iotcon_remote_resource_h resource, + iotcon_error_e err, int sequence_number, iotcon_response_h response, void *user_data) +{ + static int notify_count = 0; + int tc_index = (int)user_data; + + switch (tc_index) { + case RESOURCE_CREATE: + case RESOURCE_SET_REQUEST_HANDLER: + QuitGmainLoopIdle(true); + return; + case RESOURCE_NOTIFY: + if (0 == notify_count++) { + FPRINTF("RESOURCE_NOTIFY"); + g_idle_add(ResourceNotifyIdle, NULL); + return; + } + QuitGmainLoopIdle(true); + return; + default: + FPRINTF("Invalid tc_index(%d)", tc_index); + QuitGmainLoopIdle(false); + return; + } +} + +/** +* @function FoundResourceCB +* @description get remote resource clone +* @parameter iotcon_remote_resource_h : The remote resource handle, iotcon_error_e : iotcon error +* user_data : The user data passed from function +* @return NA +*/ +static void FoundResourceCB(iotcon_remote_resource_h resource, + iotcon_error_e err, void *user_data) +{ + FPRINTF("Inside FoundResourceCB callback... \n"); + + int nRet; + int tc_index = (int)user_data; + int nIotconTimeoutId = 0; + + if (IOTCON_ERROR_TIMEOUT == err && nIotconTimeoutId < TIMEOUT_COUNT_MAX) { + nIotconTimeoutId++; + nRet = iotcon_find_resource(IOTCON_MULTICAST_ADDRESS, IOTCON_CONNECTIVITY_IPV4, + LIGHT_RESOURCE_TYPE, false, FoundResourceCB, user_data); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_find_resource() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + return; + } else if (IOTCON_ERROR_NONE != err) { + QuitGmainLoopIdle(false); + return; + } + + switch (tc_index) { + case RESOURCE_SET_REQUEST_HANDLER: + nRet = iotcon_resource_set_request_handler(g_hLightResource, + FindRequestHandlerCB, (void *)tc_index); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_resource_set_request_handler() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_remote_resource_clone(resource, &g_hRemoteResource); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_remote_resource_clone() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_remote_resource_observe_register(g_hRemoteResource, + IOTCON_OBSERVE_ACCEPT_OUT_OF_ORDER, NULL, ResourceObserveCB, (void *)tc_index); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_remote_resource_observe_register() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + break; + case RESOURCE_CREATE: + case RESOURCE_NOTIFY: + nRet = iotcon_remote_resource_clone(resource, &g_hRemoteResource); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_remote_resource_clone() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + + nRet = iotcon_remote_resource_observe_register(g_hRemoteResource, + IOTCON_OBSERVE_ACCEPT_OUT_OF_ORDER, NULL, ResourceObserveCB, (void *)tc_index); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_remote_resource_observe_register() Fail(%d)", nRet); + QuitGmainLoopIdle(false); + return; + } + break; + default: + FPRINTF("Invalid tc_index(%d)", tc_index); + QuitGmainLoopIdle(false); + return; + } +} + +/** +* @function CreateAndFindResource +* @description Function to create and find resource +* @parameter NA +* @return intiger : 0 if sussess +*/ +static int CreateAndFindResource(int tc_index) +{ + FPRINTF("[Line : %d][%s] Inside : CreateAndFindResource !!!\\n", __LINE__, API_NAMESPACE); + int nRet; + g_pMainLoop = g_main_loop_new(NULL, FALSE); + g_bRequestHandlerCB = false; + + nRet = CreateResource(tc_index); + if (nRet == 1) { + FPRINTF("[Line : %d][%s] CreateResource() \\n", __LINE__, API_NAMESPACE); + return 1; + } + + nRet = iotcon_find_resource(IOTCON_MULTICAST_ADDRESS, IOTCON_CONNECTIVITY_IPV4, + LIGHT_RESOURCE_TYPE, false, FoundResourceCB, (void *)tc_index); + if (IOTCON_ERROR_NONE != nRet) { + FPRINTF("iotcon_find_resource() Fail(%d)", nRet); + return 1; + } + + g_main_loop_run(g_pMainLoop); + g_main_loop_unref(g_pMainLoop); + + if(g_bRequestHandlerCB != true) + { + FPRINTF("[Line : %d][%s] CreateAndFindResource failed... \\n", __LINE__, API_NAMESPACE); + return 1; + }else + return 0; +} + //& set: Iotcon /** @addtogroup itc-iotcon @@ -842,14 +1133,6 @@ bool IotconCreateLedResource(void) return 0; } - - -static void _resource_request_handler(iotcon_resource_h resource, iotcon_request_h request, void *user_data) -{ - g_check = true; - FN_CALL; -} - /** * @function ITs_iotcon_resource_startup * @description Called before each test @@ -1050,36 +1333,11 @@ int ITc_iotcon_resource_bind_type_p(void) * @precondition NA * @postcondition NA */ - int ITc_iotcon_resource_set_request_handler_p(void) { START_TEST; - int nRet; - int nIotconTimeoutId = 0; - iotcon_resource_h resource = NULL; - g_check = false; - - nRet = itc_create_resource(LIGHT_RESOURCE_TYPE, LIGHT_RESOURCE_URI, &resource); - if(nRet != 0) - { - FPRINTF("ITc_iotcon_resource_set_request_handler_p: itc_create_resource FAILS \n"); - return 1; - } - - nRet = iotcon_resource_set_request_handler(resource, _resource_request_handler, NULL); - if (IOTCON_ERROR_NONE != nRet) { - FPRINTF("iotcon_resource_set_request_handler() Fail(%d)", nRet); - iotcon_resource_destroy(resource); - return 1; - } - RUN_POLLING_LOOP; - if(g_check == false) - { - FPRINTF("iotcon_resource_set_request_handler: Callback not invoked \n"); - return 1; - } - - iotcon_resource_destroy(resource); + int nRet = CreateAndFindResource(RESOURCE_SET_REQUEST_HANDLER); + PRINT_RESULT(IOTCON_ERROR_NONE, nRet, "CreateAndFindResource", IotConGetError(nRet)); return 0; } @@ -1586,44 +1844,15 @@ int ITc_iotcon_resource_types_clone_p(void) * @precondition NA * @postcondition NA */ -//int ITc_iotcon_resource_notify_p(void) - int ITc_iotcon_resource_notify_p(void) { START_TEST; - int nRet; - iotcon_resource_h resource = NULL; - iotcon_representation_h repr = NULL; - g_check = false; - - nRet = itc_create_resource(LIGHT_RESOURCE_TYPE, LIGHT_RESOURCE_URI, &resource); - ITC_ASSERT_EQ(nRet, 0); - if(g_check == false) - { - FPRINTF("ITc_iotcon_resource_notify_p: Callback not invoked \n"); - return 1; - } + int nRet = CreateAndFindResource(RESOURCE_NOTIFY); + PRINT_RESULT(IOTCON_ERROR_NONE, nRet, "CreateAndFindResource", IotConGetError(nRet)); - nRet = itc_create_representation(&repr); - if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("itc_create_representation() Fail(%d)", nRet); - iotcon_resource_destroy(resource); - return 1; - } - - nRet = iotcon_resource_notify(resource, repr, NULL, IOTCON_QOS_HIGH); - if (IOTCON_ERROR_NONE != nRet) { - ITC_ERR("iotcon_resource_notify() Fail(%d)", nRet); - iotcon_representation_destroy(repr); - iotcon_resource_destroy(resource); - return 1; - } - - iotcon_representation_destroy(repr); - iotcon_resource_destroy(resource); return 0; } /** @} */ -/** @} */ +/** @} */ \ No newline at end of file -- 2.7.4