// : vi ts=4 sw=4 noet :
/*
==================================================================================
- Copyright (c) 2019 Nokia
- Copyright (c) 2018-2019 AT&T Intellectual Property.
+ Copyright (c) 2019-2020 Nokia
+ Copyright (c) 2018-2020 AT&T Intellectual Property.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
#include <fcntl.h>
#include <unistd.h>
+/*
+ This is ugly, but needed to allow for component testing.
+
+ The test code (e.g. foo_test.c and not foo_static_test.c) can include these
+ constants to turn off the import of test support files:
+ NO_EMULATION -- the transport emulation will not be included
+ NO_PRIVATE_HEADERS -- the private headers for the transport component of RMR
+ (e.g. si) will not be included.
+*/
+#ifndef NO_EMULATION // assume emulation unless specifically put off (love double negatives)
+ #ifdef NNG_UNDER_TEST
+ #define TP_HDR_LEN 0 // needed for support functions but nonexistant in nng world
+ #include "test_nng_em.c" // nano/ngg emulation functions
+ #else
+ #include "test_si95_em.c" // si emulation functions
+ #endif
+#endif
+
+#ifndef NO_PRIVATE_HEADERS // include transport headers unless specifically turned off
+ #ifdef NNG_UNDER_TEST
+ #include <rmr_nng_private.h> // context things are type sensitive
+ #else
+ #include "si95/socket_if.h" // need to have the si context more than anything else
+ #include <rmr_si_private.h>
+ #endif
+#endif
+
#ifndef BAD
#define BAD 1 // these are exit codes unless user overrides
#define GOOD 0
}
+// for symtab and other non-message things this allows them to exclude by setting
#ifndef NO_DUMMY_RMR
/*
Dummy message allocator for testing without sr_static functions
uta_mhdr_t* hdr;
size_t alen;
- alen = sizeof( *hdr ) + tr_len + len;
+ alen = sizeof( *hdr ) + tr_len + len + TP_HDR_LEN; // this does no support allocating len2 and len3 data fields
new_msg = (rmr_mbuf_t *) malloc( sizeof *new_msg );
new_msg->tp_buf = (void *) malloc( alen );
return;
}
-#endif
+/*
+ These allow values to be pushed deep into the real RMR header allocated
+ at the front of the transport buffer. These are needed to simulate
+ the actions of rmr_send() which pushes the values from the message buffer
+ just before putting them on the wire.
+*/
+static void test_set_mtype( rmr_mbuf_t* msg, int mtype ) {
+ uta_mhdr_t* hdr;
+
+ msg->mtype = mtype;
+ hdr = (uta_mhdr_t*) msg->tp_buf;
+ hdr->mtype = htonl( mtype );
+}
+
+static void test_set_sid( rmr_mbuf_t* msg, int sid ) {
+ uta_mhdr_t* hdr;
+
+ msg->sub_id = sid;
+ hdr = (uta_mhdr_t*) msg->tp_buf;
+ hdr->sub_id = htonl( sid );
+}
+
+static void test_set_plen( rmr_mbuf_t* msg, int plen ) {
+ uta_mhdr_t* hdr;
+
+ msg->len = plen;
+ hdr = (uta_mhdr_t*) msg->tp_buf;
+ hdr->plen = htonl( plen );
+}
+
+/*
+ Build a message and populate both the msg buffer and the tranport header
+ with mid, sid, and payload len. Tr_len causes that much space in the
+ header for trace info to be reserved.
+*/
+static rmr_mbuf_t* mk_populated_msg( int alloc_len, int tr_len, int mtype, int sid, int plen ) {
+ uta_mhdr_t* hdr;
+ rmr_mbuf_t* mbuf;
+
+ mbuf = test_mk_msg( alloc_len, tr_len );
+ test_set_mtype( mbuf, mtype );
+ test_set_sid( mbuf, sid );
+ test_set_plen( mbuf, plen );
+
+ return mbuf;
+}
+
+
+#endif
#endif