blob: d5bcc3a9da1aba1f91e59180f2f31f7e27145b11 [file] [log] [blame]
// :vi sw=4 ts=4 noet:
/*
==================================================================================
Copyright (c) 2020 Nokia
Copyright (c) 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.
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.
==================================================================================
*/
/*
Mmemonic: si95_test.c
Abstract: This is the main driver to test the si95 core functions
(within rmr/src/si/src/si95).
Author: E. Scott Daniels
Date: 6 March 2018
*/
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <errno.h>
#include <string.h>
#include <errno.h>
#include <pthread.h>
#include <ctype.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <errno.h>
#include <string.h>
#include <stdint.h>
#include <ctype.h>
#include <sys/epoll.h>
#include <pthread.h>
#include <semaphore.h>
#define DEBUG 1
// specific test tools in this directory
#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 "rmr.h" // things the users see
#include "rmr_symtab.h"
#include "rmr_agnostic.h" // transport agnostic header
*/
#include <rmr_logging.h>
#include <logging.c>
//#include <si95/siaddress.c>
//#include <si95/sialloc.c>
//#include <si95/sibldpoll.c>
//#include <si95/sicbreg.c>
//#include <si95/sicbstat.c>
//#include <si95/siclose.c>
//#include <si95/siconnect.c>
//#include <si95/siestablish.c>
//#include <si95/sigetadd.c>
//#include <si95/sigetname.c>
#include <si95/siinit.c>
//#include <si95/silisten.c>
#include <si95/sinew.c>
//#include <si95/sinewses.c>
//#include <si95/sipoll.c>
//#include <si95/sircv.c>
//#include <si95/sisend.c>
//#include <si95/sisendt.c>
#include <si95/sishutdown.c>
#include <si95/siterm.c>
#include <si95/sitrash.c>
//#include <si95/siwait.c>
/*
Memory allocation/free related tests
*/
static int memory( ) {
int errors = 0;
void* ptr;
void* iptr;
// ---- SInew ----------------
ptr = SInew( 100 ); // invalid block type should return nil
errors += fail_not_nil( ptr, "memory: sinew did not return nil when given a valid struct type" );
SItrash( 100, NULL ); // drive trash for coverage
iptr = SInew( IOQ_BLK );
errors += fail_if_nil( iptr, "memory: sinew returned nil when given ioq request" );
SItrash( IOQ_BLK, iptr );
ptr = SInew( TP_BLK );
errors += fail_if_nil( ptr, "memory: sinew returned nil when given tpblk request" );
if( ptr ) {
iptr = SInew( IOQ_BLK );
((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)
return errors;
}
void* si_ctx = NULL; // a global context might be useful
/*
Test initialisation related things
*/
static int init() {
int errors = 0;
si_ctx = SIinitialise( 0 );
errors += fail_if_nil( si_ctx, "init: siinit returned a nil pointer" );
SIclr_tflags( si_ctx, 0x00 ); // drive for coverage; no return value from these
SIset_tflags( si_ctx, 0x03 );
return errors;
}
/*
Drive tests...
*/
int main() {
int errors = 0;
rmr_set_vlevel( 5 ); // enable all debugging
fprintf( stderr, "\n<INFO> starting SI95 tests\n" );
errors += init();
errors += memory();
if( errors == 0 ) {
fprintf( stderr, "<PASS> all tests were OK\n\n" );
} else {
fprintf( stderr, "<FAIL> %d errors in SI95 core code\n\n", errors );
}
return !!errors;
}