X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=test%2Frt_static_test.c;h=972b767046d74636d3b67ad58d48f33ddf71efdf;hb=7958ddfd7e5bc9278bcba939b55b5b90e83529c2;hp=129eec1da669b436f5b7793fb318dc415f4d348c;hpb=8790bf0c4f4f08fd05853afa67e211112b344a42;p=ric-plt%2Flib%2Frmr.git diff --git a/test/rt_static_test.c b/test/rt_static_test.c index 129eec1..972b767 100644 --- a/test/rt_static_test.c +++ b/test/rt_static_test.c @@ -1,7 +1,7 @@ // : vi ts=4 sw=4 noet : /* ================================================================================== - Copyright (c) 2019 Nokia + Copyright (c) 2019 Nokia Copyright (c) 2018-2019 AT&T Intellectual Property. Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,7 +21,7 @@ /* Mmemonic: rt_static_test.c Abstract: Test the route table funcitons. These are meant to be included at compile - time by the test driver. + time by the test driver. Author: E. Scott Daniels Date: 3 April 2019 @@ -44,6 +44,38 @@ typedef struct entry_info { } ei_t; +/* + Driven by symtab foreach element of one space. + We count using the data as a counter. +*/ +static void count_things( void* st, void* entry, char const* name, void* thing, void* vdata ) { + int* counter; + + if( thing ) { + if( (counter = (int *) vdata) != NULL ) { + *counter++; + } + } +} + +/* + Returns the number of entries in the table for the given class. +*/ +static int count_entries( route_table_t* rt, int class ) { + int counter = 0; + + if( ! rt ) { + return 0; + } + if( !rt->hash ) { + return 0; + } + + rmr_sym_foreach_class( rt->hash, class, count_things, &counter ); // run each and update counter + + return counter; +} + /* This is the main route table test. It sets up a very specific table for testing (not via the generic setup function for other test @@ -59,6 +91,8 @@ static int rt_test( ) { int errors = 0; // number errors found int i; int k; + int c1; // general counters + int c2; int mtype; int value; int alt_value; @@ -142,8 +176,33 @@ static int rt_test( ) { } } - crt = uta_rt_clone( rt ); + crt = uta_rt_clone( rt ); // clone only the endpoint entries errors += fail_if_nil( crt, "cloned route table" ); + if( crt ) { + c1 = count_entries( rt, 1 ); + c2 = count_entries( crt, 1 ); + errors += fail_not_equal( c1, c2, "cloned (endpoints) table entries space 1 count (b) did not match original table count (a)" ); + + c2 = count_entries( crt, 0 ); + errors += fail_not_equal( c2, 0, "cloned (endpoints) table entries space 0 count (a) was not zero as expected" ); + uta_rt_drop( crt ); + } + + + crt = uta_rt_clone_all( rt ); // clone all entries + errors += fail_if_nil( crt, "cloned all route table" ); + + if( crt ) { + c1 = count_entries( rt, 0 ); + c2 = count_entries( crt, 0 ); + errors += fail_not_equal( c1, c2, "cloned (all) table entries space 0 count (b) did not match original table count (a)" ); + + c1 = count_entries( rt, 1 ); + c2 = count_entries( crt, 1 ); + errors += fail_not_equal( c1, c2, "cloned (all) table entries space 1 count (b) did not match original table count (a)" ); + uta_rt_drop( crt ); + } + ep = uta_get_ep( rt, "localhost:4561" ); errors += fail_if_nil( ep, "end point (fetch by name)" ); @@ -198,8 +257,6 @@ static int rt_test( ) { uta_rt_drop( rt ); - uta_rt_drop( crt ); - if( (ctx = (uta_ctx_t *) malloc( sizeof( uta_ctx_t ) )) != NULL ) { memset( ctx, 0, sizeof( *ctx ) ); @@ -228,5 +285,15 @@ static int rt_test( ) { } */ + state = uta_link2( "worm", NULL, NULL ); + errors += fail_if_true( state, "link2 did not return false when given nil pointers" ); + + state = uta_epsock_rr( rt, 122, 0, NULL, NULL ); + errors += fail_if_true( state, "uta_epsock_rr returned bad state when given nil socket pointer" ); + + rt = uta_rt_init( ); // get us a route table + state = uta_epsock_rr( rt, 0, -1, NULL, &nn_sock ); + errors += fail_if_true( state, "uta_epsock_rr returned bad state (true) when given negative group number" ); + return !!errors; // 1 or 0 regardless of count }