Merge "Fix semaphore count bug in SI95 non-blocking rcv"
[ric-plt/lib/rmr.git] / test / rmr_nng_api_static_test.c
index 0cb49a5..6588907 100644 (file)
@@ -116,29 +116,46 @@ static int rmr_api_test( ) {
        v = rmr_ready( NULL );
        errors += fail_if( v != 0, "rmr_ready returned true before initialisation "  );
 
+       em_set_long_hostname( 1 );
        if( (rmc = rmr_init( "4560", 1024, FL_NOTHREAD )) == NULL ) {
                fail_if_nil( rmc, "rmr_init returned a nil pointer "  );
                return 1;
        }
 
+       setenv( "RMR_SRC_ID", "somehost", 1 );                                                          // context should have this as source
        if( (rmc2 = rmr_init( ":6789", 1024, FL_NOTHREAD )) == NULL ) {         // init without starting a thread
                errors += fail_if_nil( rmc, "rmr_init returned a nil pointer for non-threaded init "  );
        }
 
+       fprintf( stderr, "<INFO> with RMR_SRC_ID env set, source name in context: (%s)\n", ((uta_ctx_t *) rmc2)->my_name );
+       v = strcmp( ((uta_ctx_t *) rmc2)->my_name, "somehost:6789" );
+       errors += fail_not_equal( v, 0, "source name not set from environment variable (see previous info)" );
        free_ctx( rmc2 );                       // coverage
-
+       
+       unsetenv( "RMR_SRC_ID" );                                                                                               // context should NOT have our artificial name 
        if( (rmc2 = rmr_init( NULL, 1024, FL_NOTHREAD )) == NULL ) {                    // drive default port selector code
                errors += fail_if_nil( rmc, "rmr_init returned a nil pointer when driving for default port "  );
        }
 
+       fprintf( stderr, "<INFO> after unset of RMR_SRC_ID, source name in context: (%s)\n", ((uta_ctx_t *) rmc2)->my_name );
+       v = strcmp( ((uta_ctx_t *) rmc2)->my_name, "somehost:6789" );
+       errors += fail_if_equal( v, 0, "source name smells when removed from environment (see previous info)" );
+       free_ctx( rmc2 );                       // attempt to reduce leak check errors
 
        v = rmr_ready( rmc );           // unknown return; not checking at the moment
 
        msg = rmr_alloc_msg( NULL,  1024 );                                                                     // should return nil pointer
        errors += fail_not_nil( msg, "rmr_alloc_msg didn't return nil when given nil context "  );
 
+       
        msg = rmr_alloc_msg( rmc, 2048 );                               // allocate larger than default size given on init
        errors += fail_if_nil( msg, "rmr_alloc_msg returned nil msg pointer "  );
+       if( msg ) {
+               rmr_get_srcip( msg, wbuf );
+               errors += fail_if_equal( 0, strlen( wbuf ), "rmr_get_srcip did not did not return string with length (b) after alloc_msg" );
+               fprintf( stderr, "<INFO> ip: %s\n", wbuf );
+       }
+
 
        v = rmr_payload_size( NULL );
        errors += fail_if( v >= 0, "rmr_payload_size returned valid size for nil message "  );
@@ -176,12 +193,14 @@ static int rmr_api_test( ) {
        msg->len = 100;
        msg->mtype = 1;
        msg->state = 999;
+       msg->tp_state = 999;
        errno = 999;
        msg = rmr_send_msg( rmc, msg );
        errors += fail_if_nil( msg, "send_msg_ did not return a message on send "  );
        if( msg ) {
                errors += fail_not_equal( msg->state, RMR_ERR_NOENDPT, "send_msg did not return no endpoints before rtable added "  );
                errors += fail_if( errno == 0, "send_msg did not set errno "  );
+               errors += fail_if( msg->tp_state == 999, "send_msg did not set tp_state (1)" );
        }
 
        gen_rt( rmc );          // --- after this point there is a dummy route table so send and rts calls should be ok
@@ -189,6 +208,7 @@ static int rmr_api_test( ) {
        msg->len = 100;
        msg->mtype = 1;
        msg->state = 999;
+       msg->tp_state = 999;
        errno = 999;
        msg = rmr_send_msg( rmc, msg );
        errors += fail_if_nil( msg, "send_msg_ did not return a message on send "  );
@@ -197,6 +217,7 @@ static int rmr_api_test( ) {
                errors += fail_if( errno != 0, "send_msg set errno for send that should work "  );
                v = rmr_payload_size( msg );
                errors += fail_if( v != 2048, "send_msg did not allocate new buffer with correct size "  );
+               errors += fail_if( msg->tp_state == 999, "send_msg did not set tp_state (2)" );
        }
 
        rmr_set_stimeout( NULL, 0 );
@@ -215,7 +236,6 @@ static int rmr_api_test( ) {
                if( msg2->state != RMR_ERR_EMPTY ) {
                        errors += fail_not_equal( msg2->state, RMR_OK, "receive given nil message did not return msg with good state (not empty) "  );
                }
-               //errors += fail_not_equal( msg2->state, RMR_OK, "receive given nil message did not return msg with good state "  );
        }
 
 
@@ -233,12 +253,17 @@ static int rmr_api_test( ) {
 
        msg->state = 0;
        msg = rmr_rts_msg( NULL, msg );                 // should set state in msg
-       errors += fail_if_equal( msg->state, 0, "rmr_rts_msg did not set state when given valid message but no context "  );
+       if( msg ) {
+               errors += fail_if_equal( msg->state, 0, "rmr_rts_msg did not set state when given valid message but no context "  );
+       } else {
+               errors += fail_if_nil( msg,  "rmr_rts_msg returned a nil msg when given a good one" );
+       }
 
 
        msg = rmr_rts_msg( rmc, msg );                  // return the buffer to the sender
        errors += fail_if_nil( msg, "rmr_rts_msg did not return a message pointer "  );
-       errors += fail_if( errno != 0, "rmr_rts_msg did not reset errno "  );
+       errors += fail_not_equal( msg->state, 0, "rts_msg did not return a good state (a) when expected" );
+       errors += fail_not_equal( errno, 0, "rmr_rts_msg did not reset errno (a) expected (b)"  );
 
 
 
@@ -249,6 +274,8 @@ static int rmr_api_test( ) {
        snprintf( msg->xaction, 17, "%015d", 16 );              // dummy transaction id (emulation generates, this should arrive after a few calls to recv)
        msg->mtype = 0;
        msg->sub_id = -1;
+       em_set_rcvcount( 0 );                                                   // reset message counter
+       em_set_rcvdelay( 1 );                                                   // force slow msg rate during mt testing
        msg = rmr_call( rmc, msg );                                             // dummy nng/nano function will sequentually add xactions and should match or '16'
        errors += fail_if_nil( msg, "rmr_call returned a nil message on call expected to succeed "  );
        if( msg ) {
@@ -419,10 +446,14 @@ static int rmr_api_test( ) {
                errors += fail_if_nil( msg, "mt_call with known xaction id returned nil message" );
        }
        fprintf( stderr, "<INFO> time check: %ld\n", time( NULL ) );
-               
 
        em_set_mtc_msgs( 0 );                                                   // turn off 
-       em_set_rcvdelay( 0 );                                                   // full speed receive rate
+       em_set_rcvdelay( 0 );                                                   // full speed receive rate to overflow the ring
+
+       fprintf( stderr, "<INFO> pausing 5s to allow mt-call receive ring to fill  %ld\n", time( NULL ) );
+       sleep( 2 );
+       fprintf( stderr, "<INFO> tests continuing %ld\n", time( NULL ) );
+       em_set_rcvdelay( 1 );                                                   // restore slow receive pace for any later tests
        ((uta_ctx_t *)rmc)->shutdown = 1;                               // force the mt-reciver attached to the context to stop
 #endif