Add metrics to the framework
[ric-plt/xapp-frame-cpp.git] / test / metrics_test.cpp
diff --git a/test/metrics_test.cpp b/test/metrics_test.cpp
new file mode 100644 (file)
index 0000000..3b939e3
--- /dev/null
@@ -0,0 +1,109 @@
+// vim: ts=4 sw=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.
+==================================================================================
+*/
+
+/*
+       Mnemonic:       metric_test.cpp
+       Abstract:       This is the unit test driver for the metrics class.
+
+       Date:           20 July 2020
+       Author:         E. Scott Daniels
+*/
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+
+#include <string>
+#include <memory>
+
+#include "../src/messaging/callback.hpp"
+#include "../src/messaging/default_cb.hpp"
+#include "../src/messaging/message.hpp"
+#include "../src/messaging/messenger.hpp"
+#include "../src/messaging/msg_component.hpp"
+#include "../src/alarm/alarm.hpp"
+#include "../src/xapp/xapp.hpp"
+
+#include "../src/metrics/metrics.hpp"          // overtly pull the code under test to get coverage opts
+#include "../src/metrics/metrics.cpp"
+
+#include "ut_support.cpp"
+
+int main( int argc, char** argv ) {
+       int             errors = 0;
+       std::shared_ptr<Xapp> x;
+       std::shared_ptr<xapp::Metrics> m;
+
+       set_test_name( "jhash_test" );
+
+       x = std::shared_ptr<Xapp>( new Xapp( "4560", true ) );
+       if( x == NULL ) {
+               fprintf( stderr, "<FAIL> unable to allocate xapp object\n" );
+               announce_results( 1 );
+               return 1;
+       }
+
+       m = x->Alloc_metrics( );
+       m->Push_data( "barney_balance", 216.49 );
+       m->Push_data( "fred_balance", 760.88 );
+       m->Send( );
+
+       // ensure data is cleared after first send
+       m->Push_data( "barney_balance", 216.49 );
+       m->Push_data( "fred_balance", 760.88 );
+       m->Push_data( "wilma_balance", 1986.0430 );
+       m->Send();
+
+       m->Send();                              // shouldn't really send
+
+
+       // drive alternate builders
+       m = x->Alloc_metrics( "different-source" );
+       m->Push_data( "wilma_balance", 1986.0430 );
+       m->Send();
+
+       m = x->Alloc_metrics( "different-app", "different-source" );
+       m->Push_data( "wilma_balance", 1986.0430 );
+       m->Push_data( "pebbles_balance", 1982.0614 );
+       m->Send();
+
+
+       m->Set_reporter( "set-reporter" );
+       m->Set_source( "set-source" );
+
+
+       // drive move/copy adjunct functions
+
+       xapp::Metrics b = *m.get();                             // force the move/copy operator functions to trigger
+       xapp::Metrics c( NULL );                                // a useless metric without a message
+       xapp::Metrics f( NULL, "source" );              // a useless metric to drive direct construction
+       c = *m.get();                                                   // drive copy = operator
+
+       b = std::move( c );                                             // move = operator
+       xapp::Metrics d = std::move( b );                       // move constructor
+
+
+       // ---------------------------- end housekeeping ---------------------------
+       announce_results( errors );
+       return !!errors;
+}