diff --git a/src/downstream.c b/src/downstream.c index 85ac488e..9692fc98 100644 --- a/src/downstream.c +++ b/src/downstream.c @@ -93,13 +93,15 @@ void listenerOnMessage(void * msg, size_t msgSize) cJSON_AddStringToObject(response, "message", "Invalid partner_id"); } - if((message->u.req.dest !=NULL) && (ret >= 0)) + destVal = ((WRP_MSG_TYPE__EVENT == msgType) ? message->u.event.dest : + ((WRP_MSG_TYPE__REQ == msgType) ? message->u.req.dest : message->u.crud.dest)); + if( (destVal != NULL) && (ret >= 0) ) { - destVal = ((WRP_MSG_TYPE__REQ == msgType) ? message->u.req.dest : message->u.crud.dest); strtok(destVal , "/"); parStrncpy(dest,strtok(NULL , "/"), sizeof(dest)); ParodusInfo("Received downstream dest as :%s and transaction_uuid :%s\n", dest, - (WRP_MSG_TYPE__REQ == msgType ? message->u.req.transaction_uuid : message->u.crud.transaction_uuid)); + ((WRP_MSG_TYPE__REQ == msgType) ? message->u.req.transaction_uuid : + ((WRP_MSG_TYPE__EVENT == msgType) ? "NA" : message->u.crud.transaction_uuid))); temp = get_global_node(); //Checking for individual clients & Sending to each client @@ -130,7 +132,8 @@ void listenerOnMessage(void * msg, size_t msgSize) } } - if(destFlag == 0 || ret < 0) + if( (WRP_MSG_TYPE__EVENT != msgType) && + ((destFlag == 0) || (ret < 0)) ) { resp_msg = (wrp_msg_t *)malloc(sizeof(wrp_msg_t)); memset(resp_msg, 0, sizeof(wrp_msg_t)); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2786b525..3f26509e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -204,6 +204,13 @@ add_test(NAME test_downstream COMMAND ${MEMORY_CHECK} ./test_downstream) add_executable(test_downstream test_downstream.c ../src/downstream.c ../src/string_helpers.c) target_link_libraries (test_downstream -lcmocka ${PARODUS_COMMON_LIBS} ) +#------------------------------------------------------------------------------- +# test_downstream_more +#------------------------------------------------------------------------------- +add_test(NAME test_downstream_more COMMAND ${MEMORY_CHECK} ./test_downstream_more) +add_executable(test_downstream_more test_downstream_more.c ../src/downstream.c ../src/string_helpers.c) +target_link_libraries (test_downstream_more -lcmocka ${PARODUS_COMMON_LIBS} ) + #------------------------------------------------------------------------------- # test_thread_tasks #------------------------------------------------------------------------------- diff --git a/tests/test_downstream_more.c b/tests/test_downstream_more.c new file mode 100644 index 00000000..1b477f33 --- /dev/null +++ b/tests/test_downstream_more.c @@ -0,0 +1,314 @@ +/** + * Copyright 2017 Comcast Cable Communications Management, LLC + * + * 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 +#include +#include +#include +#include +#include + +#include + +#include "../src/downstream.h" + +/*----------------------------------------------------------------------------*/ +/* Macros */ +/*----------------------------------------------------------------------------*/ +/* none */ + +/*----------------------------------------------------------------------------*/ +/* Data Structures */ +/*----------------------------------------------------------------------------*/ +typedef struct { + wrp_msg_t s; + wrp_msg_t r; +} test_t; + +/*----------------------------------------------------------------------------*/ +/* File Scoped Variables */ +/*----------------------------------------------------------------------------*/ +static test_t tests[] = { + { + .s.msg_type = WRP_MSG_TYPE__CREATE, + .s.u.crud.transaction_uuid = "c2bb1f16-09c8-11e7-93ae-92361f002671", + .s.u.crud.source = "fake-server1", + .s.u.crud.dest = "fake-client1/iot", + .s.u.crud.partner_ids = NULL, + .s.u.crud.headers = NULL, + .s.u.crud.metadata = NULL, + .s.u.crud.include_spans = false, + .s.u.crud.spans.spans = NULL, + .s.u.crud.spans.count = 0, + .s.u.crud.path = "Some path", + .s.u.crud.payload = "Some binary", + .s.u.crud.payload_size = 11, + + .r.msg_type = WRP_MSG_TYPE__CREATE, + .r.u.crud.transaction_uuid = "c2bb1f16-09c8-11e7-93ae-92361f002671", + .r.u.crud.source = "fake-client1", + .r.u.crud.dest = "fake-server1", + .r.u.crud.partner_ids = NULL, + .r.u.crud.headers = NULL, + .r.u.crud.metadata = NULL, + .r.u.crud.include_spans = false, + .r.u.crud.spans.spans = NULL, + .r.u.crud.spans.count = 0, + .r.u.crud.path = "Some path", + .r.u.crud.payload = "{\"statusCode\":531,\"message\":\"Service Unavailable\"}", + .r.u.crud.payload_size = 50, + }, + + { + .s.msg_type = WRP_MSG_TYPE__RETREIVE, + .s.u.crud.transaction_uuid = "c2bb1f16-09c8-11e7-93ae-92361f002671", + .s.u.crud.source = "fake-server2", + .s.u.crud.dest = "fake-client2/iot", + .s.u.crud.partner_ids = NULL, + .s.u.crud.headers = NULL, + .s.u.crud.metadata = NULL, + .s.u.crud.include_spans = false, + .s.u.crud.spans.spans = NULL, + .s.u.crud.spans.count = 0, + .s.u.crud.path = "Some path", + .s.u.crud.payload = NULL, + .s.u.crud.payload_size = 0, + + .r.msg_type = WRP_MSG_TYPE__RETREIVE, + .r.u.crud.transaction_uuid = "c2bb1f16-09c8-11e7-93ae-92361f002671", + .r.u.crud.source = "fake-client2", + .r.u.crud.dest = "fake-server2", + .r.u.crud.partner_ids = NULL, + .r.u.crud.headers = NULL, + .r.u.crud.metadata = NULL, + .r.u.crud.include_spans = false, + .r.u.crud.spans.spans = NULL, + .r.u.crud.spans.count = 0, + .r.u.crud.path = "Some path", + .r.u.crud.payload = "{\"statusCode\":531,\"message\":\"Service Unavailable\"}", + .r.u.crud.payload_size = 50, + }, + + { + .s.msg_type = WRP_MSG_TYPE__UPDATE, + .s.u.crud.transaction_uuid = "c2bb1f16-09c8-11e7-93ae-92361f002671", + .s.u.crud.source = "fake-server3", + .s.u.crud.dest = "fake-client3/iot", + .s.u.crud.partner_ids = NULL, + .s.u.crud.headers = NULL, + .s.u.crud.metadata = NULL, + .s.u.crud.include_spans = false, + .s.u.crud.spans.spans = NULL, + .s.u.crud.spans.count = 0, + .s.u.crud.path = "Some path", + .s.u.crud.payload = NULL, + .s.u.crud.payload_size = 0, + + .r.msg_type = WRP_MSG_TYPE__UPDATE, + .r.u.crud.transaction_uuid = "c2bb1f16-09c8-11e7-93ae-92361f002671", + .r.u.crud.source = "fake-client3", + .r.u.crud.dest = "fake-server3", + .r.u.crud.partner_ids = NULL, + .r.u.crud.headers = NULL, + .r.u.crud.metadata = NULL, + .r.u.crud.include_spans = false, + .r.u.crud.spans.spans = NULL, + .r.u.crud.spans.count = 0, + .r.u.crud.path = "Some path", + .r.u.crud.payload = "{\"statusCode\":531,\"message\":\"Service Unavailable\"}", + .r.u.crud.payload_size = 50, + }, + + { + .s.msg_type = WRP_MSG_TYPE__DELETE, + .s.u.crud.transaction_uuid = "c2bb1f16-09c8-11e7-93ae-92361f002671", + .s.u.crud.source = "fake-server4", + .s.u.crud.dest = "fake-client4/iot", + .s.u.crud.partner_ids = NULL, + .s.u.crud.headers = NULL, + .s.u.crud.metadata = NULL, + .s.u.crud.include_spans = false, + .s.u.crud.spans.spans = NULL, + .s.u.crud.spans.count = 0, + .s.u.crud.path = "Some path", + .s.u.crud.payload = NULL, + .s.u.crud.payload_size = 0, + + .r.msg_type = WRP_MSG_TYPE__DELETE, + .r.u.crud.transaction_uuid = "c2bb1f16-09c8-11e7-93ae-92361f002671", + .r.u.crud.source = "fake-client4", + .r.u.crud.dest = "fake-server4", + .r.u.crud.partner_ids = NULL, + .r.u.crud.headers = NULL, + .r.u.crud.metadata = NULL, + .r.u.crud.include_spans = false, + .r.u.crud.spans.spans = NULL, + .r.u.crud.spans.count = 0, + .r.u.crud.path = "Some path", + .r.u.crud.payload = "{\"statusCode\":531,\"message\":\"Service Unavailable\"}", + .r.u.crud.payload_size = 50, + }, + + { + .s.msg_type = WRP_MSG_TYPE__EVENT, + .s.u.event.source = "fake-server5", + .s.u.event.dest = "fake-client5/iot", + .s.u.event.partner_ids = NULL, + .s.u.event.headers = NULL, + .s.u.event.metadata = NULL, + .s.u.event.payload = NULL, + .s.u.event.payload_size = 0, + + .r = {0}, + }, + }; + +static uint8_t i; + +/*----------------------------------------------------------------------------*/ +/* Mocks */ +/*----------------------------------------------------------------------------*/ +int validate_partner_id(wrp_msg_t *msg, partners_t **partnerIds) +{ + (void) msg; (void) partnerIds; + return 1; +} + +ssize_t wrp_to_struct( const void *bytes, const size_t length, const enum wrp_format fmt, + wrp_msg_t **msg ) +{ + (void) bytes; (void) length; (void) fmt; + *msg = (wrp_msg_t*) malloc(sizeof(wrp_msg_t)); + (*msg)->msg_type = tests[i].s.msg_type; + if( WRP_MSG_TYPE__EVENT == tests[i].s.msg_type ) { + (*msg)->u.event.source = strdup(tests[i].s.u.event.source); + (*msg)->u.event.dest = strdup(tests[i].s.u.event.dest); + } + else + { + (*msg)->u.crud.source = strdup(tests[i].s.u.crud.source); + (*msg)->u.crud.dest = strdup(tests[i].s.u.crud.dest); + (*msg)->u.crud.transaction_uuid = strdup(tests[i].s.u.crud.transaction_uuid); + (*msg)->u.crud.path = strdup(tests[i].s.u.crud.path); + } + return (ssize_t) sizeof(tests[i].s); +} + +ssize_t wrp_struct_to( const wrp_msg_t *msg, const enum wrp_format fmt, void **bytes ) +{ + (void) fmt; (void) bytes; + CU_ASSERT(WRP_MSG_TYPE__EVENT != msg->msg_type); + CU_ASSERT(tests[i].r.msg_type == msg->msg_type); + CU_ASSERT_STRING_EQUAL(tests[i].r.u.crud.transaction_uuid, msg->u.crud.transaction_uuid); + printf("tests[%d].r.u.crud.source = %s, msg->u.crud.source = %s\n", i, tests[i].r.u.crud.source, msg->u.crud.source); + CU_ASSERT_STRING_EQUAL(tests[i].r.u.crud.source, msg->u.crud.source); + CU_ASSERT_STRING_EQUAL(tests[i].r.u.crud.dest, msg->u.crud.dest); + CU_ASSERT_STRING_EQUAL(tests[i].r.u.crud.path, msg->u.crud.path); + CU_ASSERT(tests[i].r.u.crud.payload_size == msg->u.crud.payload_size); + CU_ASSERT(0 == memcmp(tests[i].r.u.crud.payload, msg->u.crud.payload, msg->u.crud.payload_size)); + + return 1; +} + +void sendUpstreamMsgToServer(void **resp_bytes, size_t resp_size) +{ + (void) resp_bytes; (void) resp_size; +} + +int get_numOfClients() +{ + return 0; +} + +reg_list_item_t *get_global_node(void) +{ + return NULL; +} + +void wrp_free_struct( wrp_msg_t *msg ) +{ + if( WRP_MSG_TYPE__EVENT == tests[i].s.msg_type ) { + if( NULL != msg->u.event.source) { + free(msg->u.event.source); + } + if( NULL != msg->u.event.dest) { + free(msg->u.event.dest); + } + } + else + { + if( NULL != msg->u.crud.source) { + free(msg->u.crud.source); + } + if( NULL != msg->u.crud.dest) { + free(msg->u.crud.dest); + } + if( NULL != msg->u.crud.transaction_uuid) { + free(msg->u.crud.transaction_uuid); + } + if( NULL != msg->u.crud.path) { + free(msg->u.crud.path); + } + } +} + +/*----------------------------------------------------------------------------*/ +/* Tests */ +/*----------------------------------------------------------------------------*/ +void test_listenerOnMessage() +{ + size_t t_size = sizeof(tests)/sizeof(test_t); + void *msg = malloc(1); + + for( i = 0; i < t_size; i++ ) { + listenerOnMessage(msg, 0); + } + free(msg); +} + +void add_suites( CU_pSuite *suite ) +{ + printf("--------Start of Test Cases Execution ---------\n"); + *suite = CU_add_suite( "tests", NULL, NULL ); + CU_add_test( *suite, "Test 1", test_listenerOnMessage ); +} + +/*----------------------------------------------------------------------------*/ +/* External Functions */ +/*----------------------------------------------------------------------------*/ +int main( void ) +{ + unsigned rv = 1; + CU_pSuite suite = NULL; + + if( CUE_SUCCESS == CU_initialize_registry() ) { + add_suites( &suite ); + + if( NULL != suite ) { + CU_basic_set_mode( CU_BRM_VERBOSE ); + CU_basic_run_tests(); + printf( "\n" ); + CU_basic_show_failures( CU_get_failure_list() ); + printf( "\n\n" ); + rv = CU_get_number_of_tests_failed(); + } + + CU_cleanup_registry(); + + } + + return rv; +} +