X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=test%2Fmbuf_api_static_test.c;fp=test%2Fmbuf_api_static_test.c;h=8598136006d1f45a7e18d9dc9626a1bb58fb74a2;hb=d710957ed5d73bf2da2ceea3f5a1a3c509275c30;hp=4c0cd5e05ef832276d38dea2a35156be94f81faa;hpb=9e0c1e70ff256eb05ad29d2fa8252b6219cb3659;p=ric-plt%2Flib%2Frmr.git diff --git a/test/mbuf_api_static_test.c b/test/mbuf_api_static_test.c index 4c0cd5e..8598136 100644 --- a/test/mbuf_api_static_test.c +++ b/test/mbuf_api_static_test.c @@ -42,6 +42,7 @@ int mbuf_api_test( ) { unsigned char* c; int i; + int state; int errors = 0; rmr_mbuf_t* mbuf; unsigned char src_buf[256]; @@ -57,6 +58,7 @@ int mbuf_api_test( ) { mbuf->header = mbuf->payload; mbuf->alloc_len = 1024; + // --- test payload field access functions --------------------------------------------------- memset( src_buf, 0, sizeof( src_buf ) ); rmr_bytes2payload( mbuf, NULL, strlen( src_buf) ); // errno should be set on return errors += fail_if( errno == 0, "buf copy to payload with nil src returned good errno" ); @@ -76,6 +78,8 @@ int mbuf_api_test( ) { snprintf( src_buf, sizeof( src_buf ), "This is some text in the buffer" ); rmr_str2payload( mbuf, src_buf ); // this uses bytes2payload, so only one invocation needed + + // --- test meid field access functions --------------------------------------------------- errno = 0; i = rmr_bytes2meid( NULL, src_buf, RMR_MAX_MEID ); errors += fail_if( errno == 0, "(errno) attempt to copy bytes to meid with nil message" ); @@ -121,6 +125,24 @@ int mbuf_api_test( ) { errors += fail_if( i == RMR_OK, "(rv) attempt to copy string to meid with large source buffer" ); + snprintf( src_buf, sizeof( src_buf ), "test-meid" ); + rmr_str2meid( mbuf, src_buf ); + + errno = 0; + c = rmr_get_meid( NULL, NULL ); + errors += fail_if( c != NULL, "get meid with nil message buffer" ); + errors += fail_if( errno == 0, "(errno bad) get meid with nil msg buffer" ); + + c = rmr_get_meid( mbuf, NULL ); // should allocate and return c + errors += fail_if( c == NULL, "get meid with nil dest pointer (did not allocate a buffer)" ); + errors += fail_if( strcmp( c, "test-meid" ) != 0, "did not get expected meid from mbuffer" ); + + c = rmr_get_meid( mbuf, c ); + errors += fail_if( c == NULL, "get meid with a dest pointer returned no pointer" ); + errors += fail_if( strcmp( c, "test-meid" ) != 0, "did not get expected meid from mbuffer" ); + + + // --- test transaction field access functions --------------------------------------------------- errno = 0; i = rmr_bytes2xact( NULL, src_buf, RMR_MAX_XID ); errors += fail_if( errno == 0, "(errno) attempt to copy bytes to xact with nil message" ); @@ -165,23 +187,67 @@ int mbuf_api_test( ) { errors += fail_if( errno == 0, "(errno) attempt to copy string to xact with large source buffer" ); errors += fail_if( i == RMR_OK, "(rv) attempt to copy string to xact with large source buffer" ); - - snprintf( src_buf, sizeof( src_buf ), "test-meid" ); - rmr_str2meid( mbuf, src_buf ); - errno = 0; - c = rmr_get_meid( NULL, NULL ); - errors += fail_if( c != NULL, "get meid with nil message buffer" ); - errors += fail_if( errno == 0, "(errno bad) get meid with nil msg buffer" ); + + // ------------ trace data tests ---------------------------------------------------------------- + // CAUTION: to support standalone mbuf api tests, the underlying buffer reallocation functions are NOT used + // if this is driven by the mbuf_api_test.c driver + + mbuf = test_mk_msg( 2048, 0 ); // initially no trace size to force realloc + + state = TRACE_OFFSET( mbuf->header ) - PAYLOAD_OFFSET( mbuf->header ); // no trace data, payload and trace offset should be the same + errors += fail_not_equal( state, 0, "trace offset and payload offset do NOT match when trace data is absent" ); + + state = rmr_get_trlen( mbuf ); + errors += fail_not_equal( state, 0, "initial trace len reported (a) does not match expected (b)" ); + + state = rmr_set_trace( NULL, src_buf, 100 ); // coverage test on nil check + errors += fail_not_equal( state, 0, "set trace with nil msg didn't return expected 0 status" ); + + state = rmr_set_trace( mbuf, src_buf, 0 ); // coverage test on length check + errors += fail_not_equal( state, 0, "set trace with 0 len didn't return expected 0 status" ); + + state = rmr_get_trace( NULL, src_buf, 100 ); // coverage test on nil check + errors += fail_not_equal( state, 0, "get trace with nil msg didn't return expected 0 status" ); + + state = rmr_get_trace( mbuf, NULL, 100 ); // coverage test on nil check + errors += fail_not_equal( state, 0, "get trace with nil dest didn't return expected 0 status" ); + + state = rmr_get_trlen( NULL ); // coverage test on nil check + errors += fail_not_equal( state, 0, "get trace length with nil msg didn't return expected 0 status" ); - c = rmr_get_meid( mbuf, NULL ); // should allocate and return c - errors += fail_if( c == NULL, "get meid with nil dest pointer (did not allocate a buffer)" ); - errors += fail_if( strcmp( c, "test-meid" ) != 0, "did not get expected meid from mbuffer" ); + src_buf[0] = 0; + state = rmr_set_trace( mbuf, "foo bar was here", 17 ); // should force a realloc + errors += fail_not_equal( state, 17, "bytes copied to trace (a) did not match expected size (b)" ); - c = rmr_get_meid( mbuf, c ); - errors += fail_if( c == NULL, "get meid with a dest pointer returned no pointer" ); - errors += fail_if( strcmp( c, "test-meid" ) != 0, "did not get expected meid from mbuffer" ); + state = rmr_get_trace( mbuf, src_buf, 17 ); + errors += fail_not_equal( state, 17, "bytes retrieved from trace (a) did not match expected size (b)" ); + + state = rmr_get_trlen( mbuf ); + errors += fail_not_equal( state, 17, "trace len reported (a) does not match expected (b)" ); + state = strcmp( src_buf, "foo bar was here" ); + errors+= fail_not_equal( state, 0, "compare of pulled trace info did not match" ); + + state = TRACE_OFFSET( mbuf->header ) - PAYLOAD_OFFSET( mbuf->header ); // when there is a trace area these should NOT be the same + errors += fail_if_equal( state, 0, "trace offset and payload offset match when trace data is present" ); + + + // second round of trace testing, allocating a message with a trace size that matches + mbuf = test_mk_msg( 2048, 17 ); // trace size that matches what we'll stuff in, no realloc + state = rmr_get_trlen( mbuf ); + errors += fail_not_equal( state, 17, "alloc with trace size: initial trace len reported (a) does not match expected (b)" ); + + src_buf[0] = 0; + state = rmr_set_trace( mbuf, "foo bar was here", 17 ); // should force a realloc + errors += fail_not_equal( state, 17, "bytes copied to trace (a) did not match expected size (b)" ); + + state = rmr_get_trace( mbuf, src_buf, 17 ); + errors += fail_not_equal( state, 17, "bytes retrieved from trace (a) did not match expected size (b)" ); + state = strcmp( src_buf, "foo bar was here" ); + errors+= fail_not_equal( state, 0, "compare of pulled trace info did not match" ); + + i = rmr_get_trlen( mbuf ); return errors > 0; // overall exit code bad if errors