X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=test%2Fsi95_test.c;h=fd6dd56dbc6264d2fb6f4578e74d30f70bcab132;hb=refs%2Fchanges%2F77%2F4177%2F1;hp=26b1b21a38d12cc2ec34918abefed32f6a9bfbd0;hpb=708ebac12488fe6fb204ff2861fc0045afb73b78;p=ric-plt%2Flib%2Frmr.git diff --git a/test/si95_test.c b/test/si95_test.c index 26b1b21..fd6dd56 100644 --- a/test/si95_test.c +++ b/test/si95_test.c @@ -21,7 +21,7 @@ /* Mmemonic: si95_test.c Abstract: This is the main driver to test the si95 core functions - (within rmr/src/si/src/si95). + (within rmr/src/si/src/si95). Author: E. Scott Daniels Date: 6 March 2018 @@ -58,12 +58,13 @@ #define DEBUG 1 // specific test tools in this directory -#undef NNG_UNDER_TEST // NNG is NOT under test so undefine if set +#undef NNG_UNDER_TEST // NNG is NOT under test so undefine if set #define NO_EMULATION 1 // no emulation of transport functions #define NO_PRIVATE_HEADERS 1 // no rmr_si or rmr_nng headers #define NO_DUMMY_RMR 1 // no msg things -#include "test_support.c" // things like fail_if() +#include "test_support.c" // things like fail_if() +#include "test_transport_em.c" // system/transport emulation (open, close, connect, etc) /* #include "rmr.h" // things the users see @@ -84,7 +85,7 @@ //#include //#include #include -//#include +#include #include //#include //#include @@ -126,7 +127,7 @@ static int memory( ) { ((struct tp_blk *)ptr)->squeue = iptr; SItrash( TP_BLK, ptr ); } - + ptr = SInew( GI_BLK ); errors += fail_if_nil( ptr, "memory: sinew returned nil when given giblk request" ); SItrash( GI_BLK, ptr ); // GI block cannot be trashed, ensure this (valgind will complain about a leak) @@ -148,19 +149,26 @@ static int init() { SIclr_tflags( si_ctx, 0x00 ); // drive for coverage; no return value from these SIset_tflags( si_ctx, 0x03 ); + fprintf( stderr, " init module finished with %d errors\n", errors ); return errors; } static int cleanup() { int errors = 0; - + if( ! si_ctx ) { return 0; } - SIconnect( si_ctx, "localhost:43086" ); // ensure context has a tp block to free on shutdown - SIshutdown( si_ctx ); + SItp_stats( si_ctx ); // drive for coverage only + SItp_stats( NULL ); + + SIconnect( si_ctx, "localhost:43086" ); // ensure context has a tp block to free on shutdown + SIshutdown( NULL ); + SIabort( si_ctx ); + + fprintf( stderr, " cleanup module finished with %d errors\n", errors ); return errors; } @@ -184,25 +192,67 @@ static int addr() { dest = NULL; snprintf( buf1, sizeof( buf1 ), " [ff02::5:4001" ); // invalid address, drive leading space eater too - l = SIaddress( buf1, &dest, AC_TOADDR6 ); + l = SIaddress( buf1, (void **) &dest, AC_TOADDR6 ); errors += fail_if_true( l > 0, "to addr6 with bad addr convdersion returned valid len" ); - snprintf( buf1, sizeof( buf1 ), "[ff02::5]:4002" ); // v6 might not be supported so failure is OK here - l=SIaddress( buf1, &dest, AC_TOADDR6 ); - errors += fail_if_true( l < 1, "to addr convdersion failed" ); + snprintf( buf1, sizeof( buf1 ), "[ff02::5]:4002" ); // v6 might not be supported so failure is OK here; driving for coverage + l=SIaddress( buf1, (void **) &dest, AC_TOADDR6 ); snprintf( buf1, sizeof( buf1 ), "localhost:43086" ); l = SIaddress( buf1, (void **) &dest, AC_TOADDR ); errors += fail_if_true( l < 1, "to addr convdersion failed" ); snprintf( buf1, sizeof( buf1 ), "localhost:4004" ); - l = SIaddress( buf1, &dest, AC_TODOT ); + l = SIaddress( buf1, (void **) &dest, AC_TODOT ); errors += fail_if_true( l < 1, "to dot convdersion failed" ); + fprintf( stderr, " addr module finished with %d errors\n", errors ); return errors; } + +/* + Connection oriented tests. +*/ +static int conn( ) { + int errors = 0; + int state; + + state = SIconnect( si_ctx, "localhost:4567" ); // driver regular connect + errors += fail_if_true( state < 0, "connect to low port failed" ); + + state = SIconnect( si_ctx, "localhost:43086" ); // drive save connect with good return code + errors += fail_if_true( state < 0, "connect to high port failed" ); + + tpem_set_addr_dup_state( 1 ); // force get sockket name emulation to return a duplicate address + state = SIconnect( si_ctx, "localhost:43086" ); // drive save connect with good return code + errors += fail_if_true( state >= 0, "forced dup connect did not return error" ); + + tpem_set_addr_dup_state( 0 ); // force get sockket name emulation to return a duplicate address + tpem_set_conn_state( 1 ); + state = SIconnect( si_ctx, "localhost:4567" ); // driver regular connect + errors += fail_if_true( state >= 0, "connect to low port successful when failure expected" ); + + tpem_set_sock_state( 1 ); // make scoket calls fail + state = SIconnect( si_ctx, "localhost:4567" ); // driver regular connect + errors += fail_if_true( state >= 0, "connect to low port successful when socket based failure expected" ); + + tpem_set_sock_state( 0 ); + + state = SIlistener( si_ctx, TCP_DEVICE, "0.0.0.0:4567" ); + errors += fail_if_true( state < 0, "listen failed" ); + + tpem_set_bind_state( 1 ); + state = SIlistener( si_ctx, TCP_DEVICE, "0.0.0.0:4567" ); + errors += fail_if_true( state >= 0, "listen successful when bind error set" ); + tpem_set_bind_state( 0 ); + + + fprintf( stderr, " conn module finished with %d errors\n", errors ); + return errors; +} + /* Drive tests... */ @@ -216,7 +266,7 @@ int main() { errors += init(); errors += memory(); errors += addr(); -fprintf( stderr, ">>> cleaning\n" ); + errors += conn(); errors += cleanup(); fprintf( stderr, " testing finished\n" );