X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=test%2Ftest_nng_em.c;h=c2c1e801675c415821fc5948b11296fec61976f2;hb=refs%2Ftags%2F3.3.0;hp=fc6030146a352c2ff2c8c4d0cce9fcbe8cd80a87;hpb=6b1712a0f1c2fb37eec04b3114ce1956800f74c9;p=ric-plt%2Flib%2Frmr.git diff --git a/test/test_nng_em.c b/test/test_nng_em.c index fc60301..c2c1e80 100644 --- a/test/test_nng_em.c +++ b/test/test_nng_em.c @@ -40,170 +40,7 @@ #define _em_nn #include - -static int em_send_failures = 0; // test programme can set this to emulate eagain send failures -static int em_timeout = -1; // set by set socket option -static int em_mtc_msgs = 0; // set to generate 'received' messages with mt-call header data -static int return_value = 0; // functions should return this value -static int rcv_count = 0; // receive counter for transaction id to allow test to rest -static int rcv_delay = 0; // forced delay before call to rcvmsg starts to work - -static int gates_ok = 0; -static pthread_mutex_t rcv_gate; -static int em_gen_long_hostname = 0; // if set the emulated hostname generates a longer name (>40 char) - - -// ----------- gethostname emulation --------------------------------------- -#define gethostname em_gethostname -static int em_gethostname( char* buf, size_t len ) { - if( len < 1 ) { - errno = EINVAL; - return 1; - } - - if( em_gen_long_hostname ) { - snprintf( buf, len, "hostname-which-is-long-a860430b890219-dfw82" ); - } else { - snprintf( buf, len, "em-hostname" ); - } - - return 0; -} - -static int em_set_long_hostname( int v ) { - em_gen_long_hostname = !!v; -} - -// ----------- epoll emulation --------------------------------------------- - -// CAUTION: sys/epoll.h must be included before these define and function will properly compile. -#define epoll_wait em_wait -#define epoll_ctl em_ep_ctl -#define epoll_create em_ep_create - -/* - Every other call returns 1 ready; alternate calls return 0 ready. - Mostly for testing the timeout receive call. First call should return - something ready and the second should return nothing ready so we can - drive both cases. -*/ -static int em_wait( int fd, void* events, int n, int to ) { - static int ready = 0; - - ready = !ready; - return ready; -} - -int em_ep_ctl( int epfd, int op, int fd, struct epoll_event *event ) { - return 0; -} - -int em_ep_create( int size ) { - return 0; -} - - - -/* - Simulated v1 message for receive to return. This needs to match the RMr header - so that we can fill in length, type and xaction id things. -#define MSG_VER 1 -struct em_msg { - int32_t mtype; // message type ("long" network integer) - int32_t plen; // payload length - int32_t rmr_ver; // our internal message version number - unsigned char xid[32]; // space for user transaction id or somesuch - unsigned char sid[32]; // sender ID for return to sender needs - unsigned char src[16]; // name of the sender (source) - unsigned char meid[32]; // managed element id. - struct timespec ts; // timestamp ??? -}; -*/ - -/* - v2 message; should be able to use it for everything that is set up here as - we don't add a payload even if setting a v1 type. -*/ -#define ALT_MSG_VER 1 // alternate every so often -#define MSG_VER 3 // default version to insert -struct em_msg { - int32_t mtype; // message type ("long" network integer) - int32_t plen; // payload length - int32_t rmr_ver; // our internal message version number - unsigned char xid[32]; // space for user transaction id or somesuch - unsigned char sid[32]; // sender ID for return to sender needs - unsigned char src[64]; // name of the sender (source) - unsigned char meid[32]; // managed element id. - struct timespec ts; // timestamp ??? - - // V2 extension - int32_t flags; // HFL_* constants - int32_t len0; // length of the RMr header data - int32_t len1; // length of the tracing data - int32_t len2; // length of data 1 (d1) - int32_t len3; // length of data 2 (d2) - int32_t sub_id; // subscription id (-1 invalid) - - // V3 stuff - unsigned char srcip[64]; // sender ID for return to sender needs -}; - - - -// -- emulation control functions ------------------------------------------------------ - -/* - Test app can call this to have all emulated functions return failure instead - of success. -*/ -static void en_set_return( int rv ) { - return_value = rv; -} - - - -static int em_nng_foo() { - fprintf( stderr, "emulated functions in play" ); -} - - -/* - Turns on/off the generation of multi-threaded call messages -*/ -static int em_set_mtc_msgs( int state ) { - em_mtc_msgs = state; -} - -/* - Returns the size of the header we inserted -*/ -static int em_hdr_size() { - if( em_mtc_msgs ) { - return (int) sizeof( struct em_msg ) + 4; - } - - return (int) sizeof( struct em_msg ); -} - -static void em_set_rcvcount( int v ) { - rcv_count = v; -} - -static void em_set_rcvdelay( int v ) { - if( v < 0 ) { - fprintf( stderr, " ##ERR## attempt to set receive delay with invalid value was ignored: %d seconds\n", v ); - return; - } - fprintf( stderr, " receive delay is now %d seconds\n", v ); - rcv_delay = v; -} - -static void em_start() { - if( ! gates_ok ) { - pthread_mutex_init( &rcv_gate, NULL ); - gates_ok = 1; - } -} +#include "test_common_em.c" // things common to all emulation code //-------------------------------------------------------------------------- #ifdef EMULATE_NNG @@ -211,6 +48,7 @@ struct nn_msghdr { int boo; }; +#define SOCKET_TYPE nng_socket // socket representation is different in each transport /* Receive message must allocate a new buffer and return the pointer into *m. @@ -448,6 +286,8 @@ static int em_nng_getopt_int( nng_socket s, void* con, int* target ) { #else +#define SOCKET_TYPE int // socket representation is different in each transport + // ----------------------- emulated nano functions -------------------------- struct em_nn_msghdr {