Initial commit of RMR Library
Change-Id: Ic4c998b056e8759f4a47a9a8c50c77e88df0f325
Signed-off-by: Ashwin Sridharan <hiltunen@att.com>
diff --git a/test/test_support.c b/test/test_support.c
new file mode 100644
index 0000000..d9a5f47
--- /dev/null
+++ b/test/test_support.c
@@ -0,0 +1,134 @@
+// : vi ts=4 sw=4 noet :
+/*
+==================================================================================
+ Copyright (c) 2019 Nokia
+ Copyright (c) 2018-2019 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.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================================
+*/
+
+/*
+ Mnemonic: test_tools.c
+ Abstract: Functions for test applications to make their life a bit easier.
+ This file is probably compiled to a .o, and then included on
+ the cc command for the test.
+ Author: E. Scott Daniels
+ Date: 6 January 2019
+*/
+
+#include <signal.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef BAD
+#define BAD 1 // these are exit codes unless user overrides
+#define GOOD 0
+#endif
+
+/*
+ Snag the optional positional parameter at pp, return defval if not there.
+*/
+static char* snag_pp( int pp, int argc, char** argv, char* defval ) {
+
+ if( pp < argc ) {
+ return argv[pp];
+ }
+
+ return defval;
+}
+
+/*
+ Signal handler -- inside of the tests we will exit cleanly for hup/temp/intr
+ signals so that the coverage stuff will generate the needed data files. If
+ we inter/term the process they don't drive.
+*/
+
+void sig_clean_exit( int sign ) {
+ fprintf( stderr, "signal trapped for clean exit: %d\n", sign );
+ exit( 0 );
+}
+
+/*
+ Setup all of the signal handling for signals that we want to force a clean exit:
+ term, intr, hup, quit, usr1/2 alarm, etc. All others we'll let default.
+*/
+static void set_signals( void ) {
+ struct sigaction sa;
+ int sig_list[] = { SIGINT, SIGQUIT, SIGILL, SIGALRM, SIGTERM, SIGUSR1 , SIGUSR2 };
+ int i;
+ int nele; // number of elements in the list
+
+ nele = (int) ( sizeof( sig_list )/sizeof( int ) ); // convert raw size to the number of elements
+ for( i = 0; i < nele; i ++ ) {
+ memset( &sa, 0, sizeof( sa ) );
+ sa.sa_handler = sig_clean_exit;
+ sigaction( sig_list[i], &sa, NULL );
+ }
+}
+
+
+static int fail_if_nil( void* p, char* what ) {
+ if( !p ) {
+ fprintf( stderr, "[FAIL] pointer to '%s' was nil\n", what );
+ }
+ return p ? GOOD : BAD;
+}
+
+static int fail_not_nil( void* p, char* what ) {
+ if( p ) {
+ fprintf( stderr, "[FAIL] pointer to '%s' was not nil\n", what );
+ }
+ return !p ? GOOD : BAD;
+}
+
+static int fail_if_false( int bv, char* what ) {
+ if( !bv ) {
+ fprintf( stderr, "[FAIL] boolean was false (%d) %s\n", bv, what );
+ }
+
+ return bv ? GOOD : BAD;
+}
+
+static int fail_if_true( int bv, char* what ) {
+ if( bv ) {
+ fprintf( stderr, "[FAIL] boolean was true (%d) %s\n", bv, what );
+ }
+ return bv ? BAD : GOOD;
+}
+
+/*
+ Same as fail_if_true(), but reads easier in the test code.
+*/
+static int fail_if( int bv, char* what ) {
+
+ if( bv ) {
+ fprintf( stderr, "[FAIL] boolean was true (%d) %s\n", bv, what );
+ }
+ return bv ? BAD : GOOD;
+}
+
+static int fail_not_equal( int a, int b, char* what ) {
+ if( a != b ) {
+ fprintf( stderr, "[FAIL] %s values were not equal a=%d b=%d\n", what, a, b );
+ }
+ return a == b ? GOOD : BAD; // user may override good/bad so do NOT return a==b directly!
+}
+
+static int fail_if_equal( int a, int b, char* what ) {
+ if( a == b ) {
+ fprintf( stderr, "[FAIL] %s values were equal a=%d b=%d\n", what, a, b );
+ }
+ return a != b ? GOOD : BAD; // user may override good/bad so do NOT return a==b directly!
+}