LCOV - code coverage report
Current view: top level - appmodel/test/apps - generate_modules_test.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 74 0
Test Date: 2026-03-29 15:29:34 Functions: 0.0 % 1 0

            Line data    Source code
       1              : /**
       2              :  * @file gen_readout_modules.cxx
       3              :  *
       4              :  * Quick test/demonstration of ReadoutApplication's dal method
       5              :  *
       6              :  * This is part of the DUNE DAQ Application Framework, copyright 2020.
       7              :  * Licensing/copyright details are in the COPYING file that you should have
       8              :  * received with this code.
       9              :  */
      10              : 
      11              : #include "logging/Logging.hpp"
      12              : 
      13              : #include "conffwk/Configuration.hpp"
      14              : 
      15              : #include "confmodel/Connection.hpp"
      16              : #include "confmodel/DaqModule.hpp"
      17              : #include "confmodel/Session.hpp"
      18              : 
      19              : #include "appmodel/ConfigurationHelper.hpp"
      20              : #include "appmodel/DFApplication.hpp"
      21              : #include "appmodel/DFOApplication.hpp"
      22              : #include "appmodel/MLTApplication.hpp"
      23              : #include "appmodel/ReadoutApplication.hpp"
      24              : #include "appmodel/SmartDaqApplication.hpp"
      25              : #include "appmodel/TPReplayApplication.hpp"
      26              : #include "appmodel/TPStreamWriterApplication.hpp"
      27              : #include "appmodel/TriggerApplication.hpp"
      28              : 
      29              : #include "appmodel/DataHandlerModule.hpp"
      30              : #include "appmodel/DataReaderModule.hpp"
      31              : #include "appmodel/DataMoveCallbackConf.hpp"
      32              : #include "appmodel/SocketDataWriterModule.hpp"
      33              : 
      34              : #include "appmodel/appmodelIssues.hpp"
      35              : 
      36              : #include <string>
      37              : using namespace dunedaq;
      38              : using namespace dunedaq::appmodel;
      39              : 
      40              : int
      41            0 : main(int argc, char* argv[])
      42              : {
      43            0 :   if (argc < 4) {
      44            0 :     std::cout << "Usage: " << argv[0] << " <session> <smart-app> <database-file>\n";
      45            0 :     return 0;
      46              :   }
      47              : 
      48            0 :   std::string sessionName(argv[1]);
      49            0 :   std::string appName(argv[2]);
      50            0 :   std::string dbfile(argv[3]);
      51              : 
      52            0 :   logging::Logging::setup("test", "generate_module");
      53              : 
      54            0 :   conffwk::Configuration* confdb;
      55            0 :   try {
      56            0 :     confdb = new conffwk::Configuration("oksconflibs:" + dbfile);
      57            0 :   } catch (conffwk::Generic& exc) {
      58            0 :     std::cout << "Failed to load OKS database: " << exc << std::endl;
      59            0 :     return 0;
      60            0 :   }
      61              : 
      62            0 :   auto session = confdb->get<confmodel::Session>(sessionName);
      63            0 :   if (session == nullptr) {
      64            0 :     std::cout << "Failed to get Session " << sessionName << " from database\n";
      65              :     return 0;
      66              :   }
      67            0 :   auto daqapp = confdb->get<appmodel::SmartDaqApplication>(appName);
      68            0 :   if (daqapp) {
      69            0 :     std::cout << appName << " is of class " << daqapp->class_name() << std::endl;
      70              : 
      71            0 :     auto res = daqapp->cast<confmodel::Resource>();
      72            0 :     if (res && res->is_disabled(*session)) {
      73            0 :       std::cout << "Application " << appName << " is disabled" << std::endl;
      74            0 :       return 0;
      75              :     }
      76              : 
      77            0 :     auto helper = std::make_shared<ConfigurationHelper>(session);
      78            0 :     try {
      79            0 :       daqapp->generate_modules(helper);
      80              :     }
      81            0 :     catch (appmodel::BadConf& exc) {
      82            0 :       std::cout << "Caught BadConf exception: " << exc << std::endl;
      83            0 :       exit(-1);
      84            0 :     }
      85              : 
      86            0 :     auto modules = daqapp->get_modules();
      87            0 :     std::cout << "Generated " << modules.size() << " modules" << std::endl;
      88            0 :     for (auto daq_module : modules) {
      89            0 :       std::cout << "module " << daq_module->UID() << std::endl;
      90            0 :       daq_module->config_object().print_ref(std::cout, *confdb, "  ");
      91            0 :       std::cout << " input objects " << std::endl;
      92            0 :       for (auto input : daq_module->get_inputs()) {
      93            0 :         auto iObj = input->config_object();
      94            0 :         iObj.print_ref(std::cout, *confdb, "    ");
      95            0 :       }
      96            0 :       std::cout << " output objects " << std::endl;
      97            0 :       for (auto output : daq_module->get_outputs()) {
      98            0 :         auto oObj = output->config_object();
      99            0 :         oObj.print_ref(std::cout, *confdb, "    ");
     100            0 :       }
     101              : 
     102            0 :       auto reader_module = daq_module->cast<appmodel::DataReaderModule>();
     103            0 :       if (reader_module != nullptr) {
     104            0 :         auto callback_confs = reader_module->get_raw_data_callbacks();
     105            0 :         std::cout << " callback confs " << std::endl;
     106            0 :         for (auto* callback_conf : callback_confs) {
     107            0 :           auto cbObj = callback_conf->config_object();
     108            0 :           cbObj.print_ref(std::cout, *confdb, "    ");
     109            0 :         }
     110            0 :       }
     111              : 
     112            0 :       auto handler_module = daq_module->cast<appmodel::DataHandlerModule>();
     113            0 :       if (handler_module != nullptr) {
     114            0 :         auto callback_conf = handler_module->get_raw_data_callback();
     115            0 :         if (callback_conf != nullptr) {
     116            0 :           auto cbObj = callback_conf->config_object();
     117            0 :           cbObj.print_ref(std::cout, *confdb, "    ");
     118            0 :         }
     119              :       }
     120              : 
     121            0 :       auto socketwriter_module = daq_module->cast<appmodel::SocketDataWriterModule>();
     122            0 :       if (socketwriter_module != nullptr) {
     123            0 :         auto callback_conf = socketwriter_module->get_raw_data_callback();
     124            0 :         if (callback_conf != nullptr) {
     125            0 :           auto cbObj = callback_conf->config_object();
     126            0 :           cbObj.print_ref(std::cout, *confdb, "    ");
     127            0 :         }
     128              :       }
     129              : 
     130            0 :       std::cout << std::endl;
     131              :     }
     132            0 :   } else {
     133            0 :     std::cout << "Failed to get SmartDaqApplication " << appName << " from database\n";
     134              :     return 0;
     135              :   }
     136            0 : }
        

Generated by: LCOV version 2.0-1