@@ -67,6 +67,22 @@ TEST_CASE("RKNN accelerator metrics provider reports per-core busy-time load", "
6767 CHECK (metrics.gpudevusage .front ().gpuusage == Catch::Approx (0.42 ));
6868}
6969
70+ TEST_CASE (" RKNN accelerator metrics provider reports aggregate-only busy-time load" ,
71+ " [system][metrics][rknn]" ) {
72+ ScopedNpuLoadFixture fixture (" NPU load: 37%\n " );
73+ auto provider = cosmo::service::detail::CreateAcceleratorMetricsProvider ();
74+ REQUIRE (provider != nullptr );
75+
76+ const auto metrics = provider->QueryUtilization ();
77+ CHECK (metrics.gpuusageAvailable );
78+ CHECK (metrics.gpuusage == Catch::Approx (0.37 ));
79+ CHECK (metrics.utilizationMetric == " busy-time-load" );
80+ REQUIRE (metrics.coreUtilizations .size () == 1 );
81+ CHECK (metrics.coreUtilizations .front () == Catch::Approx (0.37 ));
82+ REQUIRE (metrics.gpudevusage .size () == 1 );
83+ CHECK (metrics.gpudevusage .front ().gpuusage == Catch::Approx (0.37 ));
84+ }
85+
7086TEST_CASE (" RKNN accelerator metrics provider rejects invalid load" , " [system][metrics][rknn]" ) {
7187 ScopedNpuLoadFixture fixture (" NPU load: Core0: 105%, Core1: 0%,\n " );
7288 auto provider = cosmo::service::detail::CreateAcceleratorMetricsProvider ();
@@ -77,4 +93,16 @@ TEST_CASE("RKNN accelerator metrics provider rejects invalid load", "[system][me
7793 CHECK (metrics.gpuusage == 0.0 );
7894 CHECK (metrics.coreUtilizations .empty ());
7995}
96+
97+ TEST_CASE (" RKNN accelerator metrics provider rejects invalid aggregate-only load" ,
98+ " [system][metrics][rknn]" ) {
99+ ScopedNpuLoadFixture fixture (" NPU load: 101%\n " );
100+ auto provider = cosmo::service::detail::CreateAcceleratorMetricsProvider ();
101+ REQUIRE (provider != nullptr );
102+
103+ const auto metrics = provider->QueryUtilization ();
104+ CHECK_FALSE (metrics.gpuusageAvailable );
105+ CHECK (metrics.gpuusage == 0.0 );
106+ CHECK (metrics.coreUtilizations .empty ());
107+ }
80108#endif
0 commit comments