Allow endpoint selection based on meid in message
[ric-plt/lib/rmr.git] / test / test_gen_rt.c
diff --git a/test/test_gen_rt.c b/test/test_gen_rt.c
new file mode 100644 (file)
index 0000000..08c1276
--- /dev/null
@@ -0,0 +1,141 @@
+// : 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_gen_rt.c
+       Abstract:       This provides the means to generate a route table to disk.
+       Author:         E. Scott Daniels
+       Date:           6 January 2019
+*/
+
+#ifndef _test_gen_rt_c
+#define _test_gen_rt_c
+
+
+/*
+       Generate a simple route table (for all but direct route table testing).
+       This gets tricky inasmuch as we generate two in one; first a whole table 
+       and then two update tables. The first is a table with a bad counter in the
+       last record to test that we don't load that table and error. The second
+       is a good update. The same applies to the meid map; first has a bad counter
+       and some bad records to drive coverage testing. The end should leave a good
+       meid map in the table.
+*/
+static void gen_rt( uta_ctx_t* ctx ) {
+       int             fd;
+       char*   rt_stuff;               // strings for the route table
+
+       fd = open( "utesting.rt", O_WRONLY | O_CREAT, 0600 );
+       if( fd < 0 ) {
+               fprintf( stderr, "<BUGGERED> unable to open file for testing route table gen\n" );
+               return;
+       }
+
+       rt_stuff =
+               "newrt|end\n"                                                           // end of table check before start of table found
+               "# comment to drive full comment test\n"
+               "\n"                                                                            // handle blank lines
+               "   \n"                                                                         // handle blank lines
+           "mse|4|10|localhost:4561\n"                                 // entry before start message
+           "rte|4|localhost:4561\n"                                    // entry before start message
+               "newrt|start\n"                                                         // false start to drive detection
+               "xxx|badentry to drive default case"
+               "newrt|start\n"
+           "rte|0|localhost:4560,localhost:4562\n"                                     // these are legitimate entries for our testing
+           "rte|1|localhost:4562;localhost:4561,localhost:4569\n"
+           "rte|2|localhost:4562| 10\n"                                                                // new subid at end
+           "mse|4|10|localhost:4561\n"                                                                 // new msg/subid specifier rec
+           "mse|4|localhost:4561\n"                                                                    // new mse entry with less than needed fields
+               "   rte|   5   |localhost:4563    #garbage comment\n"           // tests white space cleanup
+           "rte|6|localhost:4562\n"
+               "newrt|end\n";
+
+       setenv( "RMR_SEED_RT", "utesting.rt", 1 );
+       write( fd, rt_stuff, strlen( rt_stuff ) );                              // write in the whole table
+
+       rt_stuff =                                                                                              // add an meid map which will fail
+               "meid_map | start\n"
+               "mme_ar | e2t-1 | one two three four\n"
+               "mme_del | one two\n"
+               "mme_del \n"                                                                            // short entries drive various checks for coverage
+               "mme_ar \n"                                                                                     
+               "mme_ar | e2t-0 \n"                                                                     
+               "meid_map | end | 5\n";                                                         // this will fail as the short recs don't "count"
+       write( fd, rt_stuff, strlen( rt_stuff ) );
+
+       rt_stuff =
+               "updatert|start\n"                                                                      // this is an update to the table
+           "mse|4|99|fooapp:9999,barapp:9999;logger:9999\n"    // update just one entry
+               "updatert|end | 3\n";                                                           // bad count; this update should be rejected
+       write( fd, rt_stuff, strlen( rt_stuff ) );
+
+
+       rt_stuff =
+               "updatert|start\n"                                                                      // this is an update to the table
+           "mse|4|10|fooapp:4561,barapp:4561;logger:9999\n"    // update just one entry
+               "mse | 99 | -1 | %meid\n"                                                       // type 99 will route based on meid and not mtype
+               "del|2|-1\n"                                                                            // delete an entry; not there so no action
+               "del|2|10\n"                                                                            // delete an entry
+               "updatert|end | 4\n";                                                           // end table; updates have a count as last field
+       write( fd, rt_stuff, strlen( rt_stuff ) );
+
+       rt_stuff =                                                                                              // this leaves an meid map in place too
+               "meid_map | start\n"
+               "mme_ar | localhost:4567 | meid1 meid2 meid3 meid4\n"
+               "mme_ar | localhost:4067 | meid11 meid12\n"
+               "meid_map | end | 2\n";
+       write( fd, rt_stuff, strlen( rt_stuff ) );
+
+       rt_stuff =                                                                                                      // verify that we can del entries in the current table
+               "meid_map | start\n"
+               "mme_del | meid11 meid12 meid13\n"              // includes a non-existant meid
+               "meid_map | end | 1\n";
+       write( fd, rt_stuff, strlen( rt_stuff ) );
+       
+       close( fd );
+       read_static_rt( ctx, 1 );                                                               // force in verbose mode to see stats on tty if failure
+       unlink( "utesting.rt" );
+}
+
+
+
+/*
+       Generate a custom route table file using the buffer passed in.
+*/
+static void gen_custom_rt( uta_ctx_t* ctx, char* buf ) {
+       int             fd;
+       char*   rt_stuff;               // strings for the route table
+
+       fd = open( "utesting.rt", O_WRONLY | O_CREAT, 0600 );
+       if( fd < 0 ) {
+               fprintf( stderr, "<BUGGERED> unable to open file for testing route table gen\n" );
+               return;
+       }
+       setenv( "RMR_SEED_RT", "utesting.rt", 1 );
+
+       write( fd, rt_stuff, strlen( buf ) );
+
+       close( fd );
+       read_static_rt( ctx, 1 );                                                               // force in verbose mode to see stats on tty if failure
+       unlink( "utesting.rt" );
+}
+
+
+#endif