Skip to content

Commit

Permalink
Fixed some discrepancies handling different message types and added t…
Browse files Browse the repository at this point in the history
…ests.
  • Loading branch information
Ramki Ananthakrishnan committed Nov 17, 2017
1 parent 5c388d1 commit 0003bc4
Show file tree
Hide file tree
Showing 3 changed files with 328 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/downstream.c
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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));
Expand Down
7 changes: 7 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
#-------------------------------------------------------------------------------
Expand Down
314 changes: 314 additions & 0 deletions tests/test_downstream_more.c
Original file line number Diff line number Diff line change
@@ -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 <assert.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <wrp-c.h>

#include <CUnit/Basic.h>

#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;
}

0 comments on commit 0003bc4

Please sign in to comment.