LCOV - code coverage report
Current view: top level - test/RoutingPolicies - NoOp_policy_t.cc (source / functions) Coverage Total Hit
Test: artdaq.info.cleaned Lines: 100.0 % 129 129
Test Date: 2025-09-04 00:45:34 Functions: 100.0 % 12 12

            Line data    Source code
       1              : #define BOOST_TEST_MODULE NoOp_policy_t
       2              : #include <boost/test/unit_test.hpp>
       3              : 
       4              : #include "TRACE/tracemf.h"
       5              : 
       6              : #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
       7              : #include "artdaq/RoutingPolicies/makeRoutingManagerPolicy.hh"
       8              : #include "fhiclcpp/ParameterSet.h"
       9              : 
      10              : BOOST_AUTO_TEST_SUITE(NoOp_policy_t)
      11              : 
      12            2 : BOOST_AUTO_TEST_CASE(Simple)
      13              : {
      14            3 :         TLOG(TLVL_INFO) << "NoOp_policy_t Test Case Simple BEGIN";
      15            2 :         fhicl::ParameterSet ps = fhicl::ParameterSet::make("");
      16              : 
      17            1 :         auto noop = artdaq::makeRoutingManagerPolicy("NoOp", ps);
      18              : 
      19            1 :         noop->Reset();
      20            1 :         noop->AddReceiverToken(1, 1);
      21            1 :         noop->AddReceiverToken(3, 1);
      22            1 :         noop->AddReceiverToken(2, 1);
      23            1 :         noop->AddReceiverToken(4, 1);
      24            1 :         noop->AddReceiverToken(2, 1);
      25            1 :         BOOST_REQUIRE_EQUAL(noop->GetReceiverCount(), 4);
      26            1 :         auto secondTable = noop->GetCurrentTable();
      27            1 :         BOOST_REQUIRE_EQUAL(secondTable.size(), 5);
      28            1 :         BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
      29            1 :         BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 3);
      30            1 :         BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 2);
      31            1 :         BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 4);
      32            1 :         BOOST_REQUIRE_EQUAL(secondTable[4].destination_rank, 2);
      33            1 :         BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 1);
      34            1 :         BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 2);
      35            1 :         BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 3);
      36            1 :         BOOST_REQUIRE_EQUAL(secondTable[3].sequence_id, 4);
      37            1 :         BOOST_REQUIRE_EQUAL(secondTable[4].sequence_id, 5);
      38              : 
      39            1 :         noop->AddReceiverToken(1, 0);
      40              : 
      41            1 :         auto thirdTable = noop->GetCurrentTable();
      42            1 :         BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
      43            3 :         TLOG(TLVL_INFO) << "NoOp_policy_t Test Case Simple END";
      44            1 : }
      45              : 
      46            2 : BOOST_AUTO_TEST_CASE(DataFlowMode)
      47              : {
      48            3 :         TLOG(TLVL_INFO) << "NoOp_policy_t Test Case DataFlowMode BEGIN";
      49            2 :         fhicl::ParameterSet ps = fhicl::ParameterSet::make("routing_manager_mode: DataFlow");
      50              : 
      51            1 :         auto noop = artdaq::makeRoutingManagerPolicy("NoOp", ps);
      52              : 
      53            1 :         noop->Reset();
      54            1 :         noop->AddReceiverToken(1, 1);
      55            1 :         noop->AddReceiverToken(3, 1);
      56            1 :         noop->AddReceiverToken(2, 1);
      57            1 :         noop->AddReceiverToken(3, 1);
      58            1 :         noop->AddReceiverToken(2, 1);
      59            1 :         BOOST_REQUIRE_EQUAL(noop->GetReceiverCount(), 3);
      60            1 :         auto route = noop->GetRouteForSequenceID(1, 4);
      61            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
      62            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
      63              : 
      64              :         // Multiple hits for the same sequence ID are allowed, and should receive different information
      65            1 :         route = noop->GetRouteForSequenceID(1, 5);
      66            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
      67            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
      68              : 
      69              :         // Except, that the same sequence ID from the same host should always get the same info
      70            1 :         route = noop->GetRouteForSequenceID(1, 5);
      71            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
      72            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
      73              : 
      74            1 :         route = noop->GetRouteForSequenceID(2, 4);
      75            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
      76            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 2);
      77              : 
      78            1 :         noop->AddReceiverToken(1, 1);
      79            1 :         route = noop->GetRouteForSequenceID(2, 5);
      80            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
      81            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 2);
      82              : 
      83              :         // Out-of-order sequence IDs are allowed
      84            1 :         route = noop->GetRouteForSequenceID(1, 6);
      85            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
      86            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
      87              : 
      88              :         // Arbitrary sequence IDs are allowed
      89            1 :         route = noop->GetRouteForSequenceID(10343, 4);
      90            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
      91            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 10343);
      92            3 :         TLOG(TLVL_INFO) << "NoOp_policy_t Test Case DataFlowMode END";
      93            1 : }
      94              : 
      95            2 : BOOST_AUTO_TEST_CASE(RequestBasedEventBuilding)
      96              : {
      97            3 :         TLOG(TLVL_INFO) << "NoOp_policy_t Test Case RequestBasedEventBuilding BEGIN";
      98            2 :         fhicl::ParameterSet ps = fhicl::ParameterSet::make("routing_manager_mode: RequestBasedEventBuilding routing_cache_size: 2");
      99              : 
     100            1 :         auto noop = artdaq::makeRoutingManagerPolicy("NoOp", ps);
     101              : 
     102            1 :         noop->Reset();
     103            1 :         noop->AddReceiverToken(1, 1);
     104            1 :         noop->AddReceiverToken(3, 1);
     105            1 :         noop->AddReceiverToken(2, 1);
     106            1 :         noop->AddReceiverToken(3, 1);
     107            1 :         noop->AddReceiverToken(2, 1);
     108            1 :         BOOST_REQUIRE_EQUAL(noop->GetReceiverCount(), 3);
     109              : 
     110            1 :         auto route = noop->GetRouteForSequenceID(1, 4);
     111            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
     112            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
     113              : 
     114              :         // Multiple hits for the same sequence ID should receive the same routing
     115            1 :         route = noop->GetRouteForSequenceID(1, 5);
     116            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
     117            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
     118              : 
     119              :         // Only events which have started routing should be in the table
     120            1 :         auto firstTable = noop->GetCurrentTable();
     121            1 :         BOOST_REQUIRE_EQUAL(firstTable.size(), 1);
     122            1 :         BOOST_REQUIRE_EQUAL(firstTable[0].destination_rank, 1);
     123              : 
     124              :         // Arbitrary Sequence IDs are allowed
     125            1 :         route = noop->GetRouteForSequenceID(12343, 4);
     126            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
     127            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 12343);
     128              : 
     129              :         // Out-of-order Sequence IDs are allowed
     130            1 :         route = noop->GetRouteForSequenceID(4, 5);
     131            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
     132            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 4);
     133              : 
     134              :         // Requests that arrive late still get the same info
     135            1 :         route = noop->GetRouteForSequenceID(1, 6);
     136            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
     137            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
     138              : 
     139              :         // Check that things behave when tokens are exhausted...
     140            1 :         route = noop->GetRouteForSequenceID(10, 4);
     141            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
     142            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 10);
     143            1 :         route = noop->GetRouteForSequenceID(11, 4);
     144            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
     145            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 11);
     146              : 
     147            1 :         route = noop->GetRouteForSequenceID(50, 4);
     148            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, -1);
     149              : 
     150            1 :         noop->AddReceiverToken(1, 1);
     151            1 :         route = noop->GetRouteForSequenceID(50, 4);
     152            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
     153            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
     154              : 
     155            1 :         route = noop->GetRouteForSequenceID(50, 5);
     156            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
     157            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
     158              : 
     159              :         // Routing cache is sorted by sequence ID
     160            1 :         auto secondTable = noop->GetCurrentTable();
     161            1 :         BOOST_REQUIRE_EQUAL(secondTable.size(), 5);
     162            1 :         BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 2);
     163            1 :         BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 4);
     164            1 :         BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 3);
     165            1 :         BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 10);
     166            1 :         BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 2);
     167            1 :         BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 11);
     168            1 :         BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 1);
     169            1 :         BOOST_REQUIRE_EQUAL(secondTable[3].sequence_id, 50);
     170            1 :         BOOST_REQUIRE_EQUAL(secondTable[4].destination_rank, 3);
     171            1 :         BOOST_REQUIRE_EQUAL(secondTable[4].sequence_id, 12343);
     172              : 
     173              :         // Since the routing cache has been set to 2, only the highest two events routed are here, as the cache is checked when generating tables
     174            1 :         BOOST_REQUIRE_EQUAL(noop->GetCacheSize(), 2);
     175            1 :         auto thirdTable = noop->GetCurrentTable();
     176            1 :         BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
     177              : 
     178            1 :         BOOST_REQUIRE(noop->CacheHasRoute(50));
     179            1 :         BOOST_REQUIRE(!noop->CacheHasRoute(4));
     180            1 :         route = noop->GetRouteForSequenceID(50, 6);
     181            1 :         BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
     182            1 :         BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
     183              : 
     184            3 :         TLOG(TLVL_INFO) << "NoOp_policy_t Test Case RequestBasedEventBuilding END";
     185            1 : }
     186              : 
     187              : BOOST_AUTO_TEST_SUITE_END()
        

Generated by: LCOV version 2.0-1