@@ -128,9 +128,16 @@ class TestReadCallback : public app::ClusterStateCache::Callback
128
128
{
129
129
public:
130
130
TestReadCallback () : mClusterCacheAdapter (*this ) {}
131
- void OnDone (app::ReadClient *) {}
131
+ void OnDone (app::ReadClient *) override {}
132
+
133
+ void OnEventData (const EventHeader & aEventHeader, TLV::TLVReader * apData, const StatusIB * apStatus) override
134
+ {
135
+ ++mEventsSeen ;
136
+ }
132
137
133
138
app::ClusterStateCache mClusterCacheAdapter ;
139
+
140
+ size_t mEventsSeen = 0 ;
134
141
};
135
142
136
143
namespace {
@@ -181,6 +188,7 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
181
188
chip::EventNumber lastEventNumber;
182
189
183
190
GenerateEvents (apSuite, firstEventNumber, lastEventNumber);
191
+ NL_TEST_ASSERT (apSuite, lastEventNumber > firstEventNumber);
184
192
185
193
app::EventPathParams eventPath;
186
194
eventPath.mEndpointId = kTestEndpointId ;
@@ -203,10 +211,12 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
203
211
204
212
uint8_t generationCount = 0 ;
205
213
readCallback.mClusterCacheAdapter .ForEachEventData (
206
- [&apSuite, &readCallback, &generationCount](const app::EventHeader & header) {
214
+ [&apSuite, &readCallback, &generationCount, firstEventNumber, lastEventNumber ](const app::EventHeader & header) {
207
215
NL_TEST_ASSERT (apSuite, header.mPath .mClusterId == Clusters::UnitTesting::Id);
208
216
NL_TEST_ASSERT (apSuite, header.mPath .mEventId == Clusters::UnitTesting::Events::TestEvent::Id);
209
217
NL_TEST_ASSERT (apSuite, header.mPath .mEndpointId == kTestEndpointId );
218
+ NL_TEST_ASSERT (apSuite, header.mEventNumber >= firstEventNumber);
219
+ NL_TEST_ASSERT (apSuite, header.mEventNumber <= lastEventNumber);
210
220
211
221
Clusters::UnitTesting::Events::TestEvent::DecodableType eventData;
212
222
NL_TEST_ASSERT (apSuite, readCallback.mClusterCacheAdapter .Get (header.mEventNumber , eventData) == CHIP_NO_ERROR);
@@ -216,21 +226,23 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
216
226
return CHIP_NO_ERROR;
217
227
});
218
228
219
- NL_TEST_ASSERT (apSuite, generationCount == 5 );
229
+ NL_TEST_ASSERT (apSuite, generationCount == lastEventNumber - firstEventNumber + 1 );
220
230
221
231
Optional<EventNumber> highestEventNumber;
222
232
readCallback.mClusterCacheAdapter .GetHighestReceivedEventNumber (highestEventNumber);
223
- NL_TEST_ASSERT (apSuite, highestEventNumber.HasValue () && highestEventNumber.Value () == 4 );
233
+ NL_TEST_ASSERT (apSuite, highestEventNumber.HasValue () && highestEventNumber.Value () == lastEventNumber );
224
234
225
235
//
226
236
// Re-run the iterator but pass in a path filter: EP*/TestCluster/EID*
227
237
//
228
238
generationCount = 0 ;
229
239
readCallback.mClusterCacheAdapter .ForEachEventData (
230
- [&apSuite, &readCallback, &generationCount](const app::EventHeader & header) {
240
+ [&apSuite, &readCallback, &generationCount, firstEventNumber, lastEventNumber ](const app::EventHeader & header) {
231
241
NL_TEST_ASSERT (apSuite, header.mPath .mClusterId == Clusters::UnitTesting::Id);
232
242
NL_TEST_ASSERT (apSuite, header.mPath .mEventId == Clusters::UnitTesting::Events::TestEvent::Id);
233
243
NL_TEST_ASSERT (apSuite, header.mPath .mEndpointId == kTestEndpointId );
244
+ NL_TEST_ASSERT (apSuite, header.mEventNumber >= firstEventNumber);
245
+ NL_TEST_ASSERT (apSuite, header.mEventNumber <= lastEventNumber);
234
246
235
247
Clusters::UnitTesting::Events::TestEvent::DecodableType eventData;
236
248
NL_TEST_ASSERT (apSuite, readCallback.mClusterCacheAdapter .Get (header.mEventNumber , eventData) == CHIP_NO_ERROR);
@@ -241,17 +253,19 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
241
253
},
242
254
app::EventPathParams (kInvalidEndpointId , Clusters::UnitTesting::Id, kInvalidEventId ));
243
255
244
- NL_TEST_ASSERT (apSuite, generationCount == 5 );
256
+ NL_TEST_ASSERT (apSuite, generationCount == lastEventNumber - firstEventNumber + 1 );
245
257
246
258
//
247
259
// Re-run the iterator but pass in a path filter: EP*/TestCluster/TestEvent
248
260
//
249
261
generationCount = 0 ;
250
262
readCallback.mClusterCacheAdapter .ForEachEventData (
251
- [&apSuite, &readCallback, &generationCount](const app::EventHeader & header) {
263
+ [&apSuite, &readCallback, &generationCount, firstEventNumber, lastEventNumber ](const app::EventHeader & header) {
252
264
NL_TEST_ASSERT (apSuite, header.mPath .mClusterId == Clusters::UnitTesting::Id);
253
265
NL_TEST_ASSERT (apSuite, header.mPath .mEventId == Clusters::UnitTesting::Events::TestEvent::Id);
254
266
NL_TEST_ASSERT (apSuite, header.mPath .mEndpointId == kTestEndpointId );
267
+ NL_TEST_ASSERT (apSuite, header.mEventNumber >= firstEventNumber);
268
+ NL_TEST_ASSERT (apSuite, header.mEventNumber <= lastEventNumber);
255
269
256
270
Clusters::UnitTesting::Events::TestEvent::DecodableType eventData;
257
271
NL_TEST_ASSERT (apSuite, readCallback.mClusterCacheAdapter .Get (header.mEventNumber , eventData) == CHIP_NO_ERROR);
@@ -262,17 +276,20 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
262
276
},
263
277
app::EventPathParams (kInvalidEndpointId , Clusters::UnitTesting::Id, Clusters::UnitTesting::Events::TestEvent::Id));
264
278
265
- NL_TEST_ASSERT (apSuite, generationCount == 5 );
279
+ NL_TEST_ASSERT (apSuite, generationCount == lastEventNumber - firstEventNumber + 1 );
266
280
267
281
//
268
- // Re-run the iterator but pass in a min event number filter (EventNumber = 1). We should only receive 4 events.
282
+ // Re-run the iterator but pass in a min event number filter
283
+ // (EventNumber = firstEventNumber + 1). We should only receive 4 events.
269
284
//
270
285
generationCount = 1 ;
271
286
readCallback.mClusterCacheAdapter .ForEachEventData (
272
- [&apSuite, &readCallback, &generationCount](const app::EventHeader & header) {
287
+ [&apSuite, &readCallback, &generationCount, firstEventNumber, lastEventNumber ](const app::EventHeader & header) {
273
288
NL_TEST_ASSERT (apSuite, header.mPath .mClusterId == Clusters::UnitTesting::Id);
274
289
NL_TEST_ASSERT (apSuite, header.mPath .mEventId == Clusters::UnitTesting::Events::TestEvent::Id);
275
290
NL_TEST_ASSERT (apSuite, header.mPath .mEndpointId == kTestEndpointId );
291
+ NL_TEST_ASSERT (apSuite, header.mEventNumber >= firstEventNumber + 1 );
292
+ NL_TEST_ASSERT (apSuite, header.mEventNumber <= lastEventNumber);
276
293
277
294
Clusters::UnitTesting::Events::TestEvent::DecodableType eventData;
278
295
NL_TEST_ASSERT (apSuite, readCallback.mClusterCacheAdapter .Get (header.mEventNumber , eventData) == CHIP_NO_ERROR);
@@ -281,20 +298,23 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
281
298
generationCount++;
282
299
return CHIP_NO_ERROR;
283
300
},
284
- app::EventPathParams (), 1 );
301
+ app::EventPathParams (), firstEventNumber + 1 );
285
302
286
- NL_TEST_ASSERT (apSuite, generationCount == 5 );
303
+ NL_TEST_ASSERT (apSuite, generationCount == lastEventNumber - firstEventNumber + 1 );
287
304
288
305
//
289
- // Re-run the iterator but pass in a min event number filter (EventNumber = 1) AND a path filter. We should only receive 4
306
+ // Re-run the iterator but pass in a min event number filter
307
+ // (EventNumber = firstEventNumber + 1) AND a path filter. We should only receive 4
290
308
// events.
291
309
//
292
310
generationCount = 1 ;
293
311
readCallback.mClusterCacheAdapter .ForEachEventData (
294
- [&apSuite, &readCallback, &generationCount](const app::EventHeader & header) {
312
+ [&apSuite, &readCallback, &generationCount, firstEventNumber, lastEventNumber ](const app::EventHeader & header) {
295
313
NL_TEST_ASSERT (apSuite, header.mPath .mClusterId == Clusters::UnitTesting::Id);
296
314
NL_TEST_ASSERT (apSuite, header.mPath .mEventId == Clusters::UnitTesting::Events::TestEvent::Id);
297
315
NL_TEST_ASSERT (apSuite, header.mPath .mEndpointId == kTestEndpointId );
316
+ NL_TEST_ASSERT (apSuite, header.mEventNumber >= firstEventNumber + 1 );
317
+ NL_TEST_ASSERT (apSuite, header.mEventNumber <= lastEventNumber);
298
318
299
319
Clusters::UnitTesting::Events::TestEvent::DecodableType eventData;
300
320
NL_TEST_ASSERT (apSuite, readCallback.mClusterCacheAdapter .Get (header.mEventNumber , eventData) == CHIP_NO_ERROR);
@@ -303,14 +323,15 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
303
323
generationCount++;
304
324
return CHIP_NO_ERROR;
305
325
},
306
- app::EventPathParams (kInvalidEndpointId , Clusters::UnitTesting::Id, kInvalidEventId ), 1 );
326
+ app::EventPathParams (kInvalidEndpointId , Clusters::UnitTesting::Id, kInvalidEventId ), firstEventNumber + 1 );
307
327
308
- NL_TEST_ASSERT (apSuite, generationCount == 5 );
328
+ NL_TEST_ASSERT (apSuite, generationCount == lastEventNumber - firstEventNumber + 1 );
309
329
}
310
330
311
331
//
312
332
// Generate more events.
313
333
//
334
+ const EventNumber oldFirstEventNumber = firstEventNumber;
314
335
GenerateEvents (apSuite, firstEventNumber, lastEventNumber);
315
336
316
337
{
@@ -327,10 +348,12 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
327
348
//
328
349
uint8_t generationCount = 0 ;
329
350
readCallback.mClusterCacheAdapter .ForEachEventData (
330
- [&apSuite, &readCallback, &generationCount](const app::EventHeader & header) {
351
+ [&apSuite, &readCallback, &generationCount, oldFirstEventNumber, lastEventNumber ](const app::EventHeader & header) {
331
352
NL_TEST_ASSERT (apSuite, header.mPath .mClusterId == Clusters::UnitTesting::Id);
332
353
NL_TEST_ASSERT (apSuite, header.mPath .mEventId == Clusters::UnitTesting::Events::TestEvent::Id);
333
354
NL_TEST_ASSERT (apSuite, header.mPath .mEndpointId == kTestEndpointId );
355
+ NL_TEST_ASSERT (apSuite, header.mEventNumber >= oldFirstEventNumber);
356
+ NL_TEST_ASSERT (apSuite, header.mEventNumber <= lastEventNumber);
334
357
335
358
Clusters::UnitTesting::Events::TestEvent::DecodableType eventData;
336
359
NL_TEST_ASSERT (apSuite, readCallback.mClusterCacheAdapter .Get (header.mEventNumber , eventData) == CHIP_NO_ERROR);
@@ -341,7 +364,7 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
341
364
return CHIP_NO_ERROR;
342
365
});
343
366
344
- NL_TEST_ASSERT (apSuite, generationCount == 10 );
367
+ NL_TEST_ASSERT (apSuite, generationCount == lastEventNumber - oldFirstEventNumber + 1 );
345
368
346
369
Optional<EventNumber> highestEventNumber;
347
370
readCallback.mClusterCacheAdapter .GetHighestReceivedEventNumber (highestEventNumber);
@@ -368,18 +391,28 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
368
391
app::ReadClient::InteractionType::Read);
369
392
370
393
readCallback.mClusterCacheAdapter .ClearEventCache ();
371
- readCallback.mClusterCacheAdapter .SetHighestReceivedEventNumber (3 );
394
+ constexpr EventNumber kLastSeenEventNumber = 3 ;
395
+ NL_TEST_ASSERT (apSuite, kLastSeenEventNumber < lastEventNumber);
396
+ readCallback.mClusterCacheAdapter .SetHighestReceivedEventNumber (kLastSeenEventNumber );
397
+ readParams.mEventNumber .ClearValue ();
398
+
399
+ readCallback.mEventsSeen = 0 ;
372
400
373
401
NL_TEST_ASSERT (apSuite, readClient.SendRequest (readParams) == CHIP_NO_ERROR);
374
402
375
403
ctx.DrainAndServiceIO ();
376
404
377
- uint8_t generationCount = 4 ;
405
+ // We should only get events with event numbers larger than kHighestEventNumberSeen.
406
+ NL_TEST_ASSERT (apSuite, readCallback.mEventsSeen == lastEventNumber - kLastSeenEventNumber );
407
+
408
+ uint8_t generationCount = kLastSeenEventNumber + 1 ;
378
409
readCallback.mClusterCacheAdapter .ForEachEventData (
379
- [&apSuite, &readCallback, &generationCount](const app::EventHeader & header) {
410
+ [&apSuite, &readCallback, &generationCount, lastEventNumber ](const app::EventHeader & header) {
380
411
NL_TEST_ASSERT (apSuite, header.mPath .mClusterId == Clusters::UnitTesting::Id);
381
412
NL_TEST_ASSERT (apSuite, header.mPath .mEventId == Clusters::UnitTesting::Events::TestEvent::Id);
382
413
NL_TEST_ASSERT (apSuite, header.mPath .mEndpointId == kTestEndpointId );
414
+ NL_TEST_ASSERT (apSuite, header.mEventNumber > kLastSeenEventNumber );
415
+ NL_TEST_ASSERT (apSuite, header.mEventNumber <= lastEventNumber);
383
416
384
417
Clusters::UnitTesting::Events::TestEvent::DecodableType eventData;
385
418
NL_TEST_ASSERT (apSuite, readCallback.mClusterCacheAdapter .Get (header.mEventNumber , eventData) == CHIP_NO_ERROR);
@@ -390,10 +423,10 @@ void TestReadEvents::TestBasicCaching(nlTestSuite * apSuite, void * apContext)
390
423
return CHIP_NO_ERROR;
391
424
});
392
425
393
- NL_TEST_ASSERT (apSuite, generationCount == 10 );
426
+ NL_TEST_ASSERT (apSuite, generationCount == lastEventNumber - oldFirstEventNumber + 1 );
394
427
Optional<EventNumber> highestEventNumber;
395
428
readCallback.mClusterCacheAdapter .GetHighestReceivedEventNumber (highestEventNumber);
396
- NL_TEST_ASSERT (apSuite, highestEventNumber.HasValue () && highestEventNumber.Value () == 9 );
429
+ NL_TEST_ASSERT (apSuite, highestEventNumber.HasValue () && highestEventNumber.Value () == lastEventNumber );
397
430
}
398
431
399
432
//
0 commit comments