@@ -162,6 +162,120 @@ static void checkClockAligned(const std::vector<std::pair<std::string, std::uniq
162162 CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].value , " 16" );
163163}
164164
165+ /* * @brief Check all the sampled meter values */
166+ static void checkAllSampled (const std::vector<std::pair<std::string, std::unique_ptr<rapidjson::Document>>>& messages,
167+ ReadingContext context)
168+ {
169+ MeterValuesReq meter_value_req;
170+
171+ CHECK_EQ (messages.size (), 3u );
172+ CHECK_EQ (messages[0 ].first , METER_VALUES_ACTION);
173+ CHECK_EQ (messages[1 ].first , METER_VALUES_ACTION);
174+ CHECK_EQ (messages[2 ].first , METER_VALUES_ACTION);
175+
176+ CHECK (deserializeMeterValue ((*messages[0 ].second ), meter_value_req));
177+ CHECK_EQ (meter_value_req.connectorId , 0 );
178+ CHECK_FALSE (meter_value_req.transactionId .isSet ());
179+ CHECK_EQ (meter_value_req.meterValue .size (), 1u );
180+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue .size (), 4 );
181+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].measurand , Measurand::CurrentImport);
182+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].phase , Phase::L1);
183+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].location , Location::Inlet);
184+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].format , ValueFormat::Raw);
185+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].unit , UnitOfMeasure::A);
186+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].context , context);
187+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].value , " 10" );
188+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].measurand , Measurand::CurrentImport);
189+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].phase , Phase::L2);
190+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].location , Location::Inlet);
191+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].format , ValueFormat::Raw);
192+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].unit , UnitOfMeasure::A);
193+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].context , context);
194+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].value , " 20" );
195+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].measurand , Measurand::CurrentImport);
196+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].phase , Phase::L3);
197+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].location , Location::Inlet);
198+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].format , ValueFormat::Raw);
199+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].unit , UnitOfMeasure::A);
200+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].context , context);
201+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].value , " 30" );
202+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].measurand , Measurand::EnergyActiveImportRegister);
203+ CHECK_FALSE (meter_value_req.meterValue [0 ].sampledValue [3 ].phase .isSet ());
204+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].location , Location::Inlet);
205+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].format , ValueFormat::Raw);
206+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].unit , UnitOfMeasure::kWh );
207+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].context , context);
208+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].value , " 123" );
209+
210+ CHECK (deserializeMeterValue ((*messages[1 ].second ), meter_value_req));
211+ CHECK_EQ (meter_value_req.connectorId , 1 );
212+ CHECK_FALSE (meter_value_req.transactionId .isSet ());
213+ CHECK_EQ (meter_value_req.meterValue .size (), 1u );
214+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue .size (), 4 );
215+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].measurand , Measurand::CurrentImport);
216+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].phase , Phase::L1);
217+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].location , Location::Outlet);
218+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].format , ValueFormat::Raw);
219+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].unit , UnitOfMeasure::A);
220+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].context , context);
221+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].value , " 40" );
222+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].measurand , Measurand::CurrentImport);
223+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].phase , Phase::L2);
224+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].location , Location::Outlet);
225+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].format , ValueFormat::Raw);
226+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].unit , UnitOfMeasure::A);
227+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].context , context);
228+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].value , " 50" );
229+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].measurand , Measurand::CurrentImport);
230+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].phase , Phase::L3);
231+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].location , Location::Outlet);
232+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].format , ValueFormat::Raw);
233+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].unit , UnitOfMeasure::A);
234+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].context , context);
235+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].value , " 60" );
236+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].measurand , Measurand::EnergyActiveImportRegister);
237+ CHECK_FALSE (meter_value_req.meterValue [0 ].sampledValue [3 ].phase .isSet ());
238+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].location , Location::Outlet);
239+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].format , ValueFormat::Raw);
240+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].unit , UnitOfMeasure::kWh );
241+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].context , context);
242+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].value , " 100" );
243+
244+ CHECK (deserializeMeterValue ((*messages[2 ].second ), meter_value_req));
245+ CHECK_EQ (meter_value_req.connectorId , 2 );
246+ CHECK_FALSE (meter_value_req.transactionId .isSet ());
247+ CHECK_EQ (meter_value_req.meterValue .size (), 1u );
248+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue .size (), 4 );
249+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].measurand , Measurand::CurrentImport);
250+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].phase , Phase::L1);
251+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].location , Location::Outlet);
252+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].format , ValueFormat::Raw);
253+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].unit , UnitOfMeasure::A);
254+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].context , context);
255+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [0 ].value , " 70" );
256+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].measurand , Measurand::CurrentImport);
257+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].phase , Phase::L2);
258+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].location , Location::Outlet);
259+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].format , ValueFormat::Raw);
260+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].unit , UnitOfMeasure::A);
261+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].context , context);
262+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [1 ].value , " 80" );
263+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].measurand , Measurand::CurrentImport);
264+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].phase , Phase::L3);
265+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].location , Location::Outlet);
266+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].format , ValueFormat::Raw);
267+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].unit , UnitOfMeasure::A);
268+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].context , context);
269+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [2 ].value , " 90" );
270+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].measurand , Measurand::EnergyActiveImportRegister);
271+ CHECK_FALSE (meter_value_req.meterValue [0 ].sampledValue [3 ].phase .isSet ());
272+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].location , Location::Outlet);
273+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].format , ValueFormat::Raw);
274+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].unit , UnitOfMeasure::kWh );
275+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].context , context);
276+ CHECK_EQ (meter_value_req.meterValue [0 ].sampledValue [3 ].value , " 23" );
277+ }
278+
165279/* * @brief Check the sampled meter values */
166280static void checkSampled (const std::vector<std::pair<std::string, std::unique_ptr<rapidjson::Document>>>& messages)
167281{
@@ -825,18 +939,26 @@ TEST_SUITE("Metervalues component")
825939 rpc.clearCalls ();
826940
827941 // Trigger meter values without connector id
828- CHECK_FALSE (meter_mgr.onTriggerMessage (MessageTrigger::MeterValues, Optional<unsigned int >()));
829- CHECK_FALSE (event_handler.methodCalled (" getMeterValue" , params));
942+ CHECK (meter_mgr.onTriggerMessage (MessageTrigger::MeterValues, Optional<unsigned int >()));
943+ CHECK (event_handler.methodCalled (" getMeterValue" , params));
830944
831945 // Check messages
832- CHECK (rpc.getCalls ().empty ());
946+ checkAllSampled (rpc.getCalls (), ReadingContext::Trigger);
947+
948+ // Clear stubs
949+ event_handler.clearCalls ();
950+ rpc.clearCalls ();
833951
834952 // Extended trigger meter values without connector id
835- CHECK_FALSE (meter_mgr.onTriggerMessage (MessageTriggerEnumType::MeterValues, Optional<unsigned int >()));
836- CHECK_FALSE (event_handler.methodCalled (" getMeterValue" , params));
953+ CHECK (meter_mgr.onTriggerMessage (MessageTriggerEnumType::MeterValues, Optional<unsigned int >()));
954+ CHECK (event_handler.methodCalled (" getMeterValue" , params));
837955
838956 // Check messages
839- CHECK (rpc.getCalls ().empty ());
957+ checkAllSampled (rpc.getCalls (), ReadingContext::Trigger);
958+
959+ // Clear stubs
960+ event_handler.clearCalls ();
961+ rpc.clearCalls ();
840962 }
841963
842964 TEST_CASE (" Custom meter values" )
0 commit comments