X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=test%2Fsi95_test.c;h=8e9ee5021d917422d04463783821f0a912125b5f;hb=11838bcf76f3614384459cb56e2ce80dea788cef;hp=809d9a1cf9ccefc21d04ee68cee09dc14bcd0260;hpb=8c6756d9d6f94beca0bc382f97383ca5e79d16c7;p=ric-plt%2Flib%2Frmr.git diff --git a/test/si95_test.c b/test/si95_test.c index 809d9a1..8e9ee50 100644 --- a/test/si95_test.c +++ b/test/si95_test.c @@ -1,8 +1,8 @@ // :vi sw=4 ts=4 noet: /* ================================================================================== - Copyright (c) 2020 Nokia - Copyright (c) 2020 AT&T Intellectual Property. + Copyright (c) 2020-2021 Nokia + Copyright (c) 2020-2021 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. @@ -35,26 +35,18 @@ #include #include #include - -#include // these four needed for si address tests -#include -#include -#include - - - #include -#include -#include #include -#include -#include #include -#include #include -#include #include + +#include // these four needed for si address tests +#include +#include +#include + #define DEBUG 1 // specific test tools in this directory @@ -66,14 +58,39 @@ #include "test_support.c" // things like fail_if() #include "test_transport_em.c" // system/transport emulation (open, close, connect, etc) -/* -#include "rmr.h" // things the users see -#include "rmr_symtab.h" -#include "rmr_agnostic.h" // transport agnostic header -*/ #include #include + +// ------------- dummy functions to force edge cases when we can --------------------------------------- + +#define SYSTEM_UNDER_TEST 1 // for conditional code + +/* + These are global so they can be reset for individual tests. +*/ +static int good_mallocs = 0; // number of initial good malocs before failurs +static int bad_mallocs = 1; // number of failed mallocs (consecutive) + +static void* test_malloc( size_t n ) { + +fprintf( stderr, ">>>> test malloc: %d %d\n", good_mallocs, bad_mallocs ); + if( good_mallocs ) { + good_mallocs--; + return malloc( n ); + } + + if( bad_mallocs ) { + bad_mallocs--; + errno = ENOMEM; + return NULL; + } + + return malloc( n ); +} + +// ----------------------------------------------------------------------------------------------------- + #include //#include #include @@ -95,7 +112,9 @@ #include #include #include -//#include +#define malloc test_malloc +#include +#undef malloc // --------------------------------------------------------------------- @@ -270,6 +289,15 @@ static int prep() { static int poll() { int errors = 0; int status; + struct ginfo_blk* dummy; + + + dummy = SIinitialise( 0 ); // get one to fiddle to drive edge cases + dummy->flags |= GIF_SHUTDOWN; // shutdown edge condition + SIpoll( dummy, 1 ); + + memset( dummy, 0, sizeof( *dummy ) ); // force bad cookie check code to drive + SIpoll( dummy, 1 ); status = SIpoll( si_ctx, 1 ); errors += fail_if_true( status != 0, "poll failed" ); @@ -436,6 +464,29 @@ static int send_tests( ) { } +/* + Wait testing. This is tricky because we don't have any sessions and thus it's difficult + to drive much of SIwait(). +*/ +static int wait_tests() { + int errors = 0; + struct ginfo_blk* dummy; + + + dummy = SIinitialise( 0 ); // get one to fiddle to drive edge cases + SIwait( dummy ); // malloc should "fail" + + dummy->flags |= GIF_SHUTDOWN; + SIwait( dummy ); + + memset( dummy, 0, sizeof( *dummy ) ); // force bad cookie check code to drive + SIwait( dummy ); + + SIwait( si_ctx ); // should drive once through the loop + + return errors; +} + // ---------------------------------------------------------------------------------------- /* @@ -459,6 +510,7 @@ int main() { errors += send_tests(); errors += poll(); + errors += wait_tests(); errors += cleanup();