@@ -11,6 +11,7 @@ class TransportMock:
1111 def __init__ (self ):
1212 self .q = queue .Queue ()
1313 self .canConnect = False
14+ self .counter = 0
1415 def authorizeConnect (self ,value ):
1516 self .canConnect = value
1617 def connect (self ,options ):
@@ -20,6 +21,7 @@ def disconnect(self):
2021 pass
2122 def read (self , maxbytes = 1 ):
2223 amount = maxbytes if self .q .qsize () > maxbytes else self .q .qsize ()
24+ self .counter += amount
2325 data = []
2426 for i in range (amount ):
2527 data .append (self .q .get ())
@@ -31,6 +33,12 @@ def write(self, data):
3133 self .q .put (c )
3234 def writeable (self ):
3335 return True
36+ def resetStats (self ):
37+ self .counter = 0
38+ def stats (self ):
39+ return {
40+ "rx_bytes" : self .counter
41+ }
3442
3543# To be done
3644class SuperplotMock :
@@ -122,6 +130,12 @@ def test_print(fixturefortests):
122130
123131 clear (outstream )
124132
133+ tlm .onecmd ("pub --s hello world" )
134+ tlm .runner .update ()
135+ assert outstream .getvalue () == "Published on topic 'hello' : world [string]\n "
136+
137+ clear (outstream )
138+
125139 tlm .onecmd ("pub --i32 foo 4" )
126140 tlm .runner .update ()
127141 assert outstream .getvalue () == "Published on topic 'foo' : 4 [int32]\n "
@@ -164,6 +178,12 @@ def test_print(fixturefortests):
164178
165179 clear (outstream )
166180
181+ tlm .onecmd ("print hello" )
182+ tlm .runner .update ()
183+ assert outstream .getvalue () == "world\n "
184+
185+ clear (outstream )
186+
167187 tlm .onecmd ("print foo -a 2.3" )
168188 tlm .runner .update ()
169189 assert outstream .getvalue () == "Could not cast --amount = '2.3' to integer. Using 1.\n 4\n "
@@ -228,7 +248,7 @@ def test_disconnect_quit(fixturefortests):
228248 clear (outstream )
229249
230250 pytest .raises (SystemExit , tlm .onecmd , "quit" )
231- assert outstream .getvalue () == "Good Bye!\n "
251+ assert outstream .getvalue () == "Disconnected. \n Good Bye!\n "
232252
233253 clear (outstream )
234254
@@ -311,3 +331,107 @@ def test_topics_are_cleared_after_reconnect(fixturefortests):
311331 assert outstream .getvalue () == ""
312332
313333 clear (outstream )
334+
335+
336+ def test_stats (fixturefortests ):
337+ tr , outstream , tlm = fixturefortests
338+ clear (outstream )
339+ tlm .topics .clear () # Clear all topics
340+
341+ tr .resetStats ()
342+ tlm .runner .resetStats ()
343+ tlm .telemetry .resetStats ()
344+ tlm .onecmd ("stats" )
345+
346+ assert "Raw IO:\n " in outstream .getvalue ()
347+ assert "\t rx_bytes : 0\n " in outstream .getvalue ()
348+ assert "IO speeds:\n " in outstream .getvalue ()
349+ assert "\t baudspeed : 0.0\n " in outstream .getvalue ()
350+ assert "\t baudratio : 0.0\n " in outstream .getvalue ()
351+ assert "\t baudratio_avg : 0.0\n " in outstream .getvalue ()
352+ assert "\t baudspeed_avg : 0.0\n " in outstream .getvalue ()
353+ assert "Framing:\n " in outstream .getvalue ()
354+ assert "\t tx_encoded_frames : 0\n " in outstream .getvalue ()
355+ assert "\t rx_uncomplete_frames : 0\n " in outstream .getvalue ()
356+ assert "\t tx_processed_bytes : 0\n " in outstream .getvalue ()
357+ assert "\t rx_complete_frames : 0\n " in outstream .getvalue ()
358+ assert "\t tx_escaped_bytes : 0\n " in outstream .getvalue ()
359+ assert "\t rx_discarded_bytes : 0\n " in outstream .getvalue ()
360+ assert "\t rx_processed_bytes : 0\n " in outstream .getvalue ()
361+ assert "\t rx_escaped_bytes : 0\n " in outstream .getvalue ()
362+ assert "Protocol:\n " in outstream .getvalue ()
363+ assert "\t tx_encoded_frames : 0\n " in outstream .getvalue ()
364+ assert "\t rx_corrupted_header : 0\n " in outstream .getvalue ()
365+ assert "\t rx_decoded_frames : 0\n " in outstream .getvalue ()
366+ assert "\t rx_corrupted_payload : 0\n " in outstream .getvalue ()
367+ assert "\t rx_corrupted_crc : 0\n " in outstream .getvalue ()
368+ assert "\t rx_corrupted_eol : 0\n " in outstream .getvalue ()
369+ assert "\t rx_corrupted_topic : 0\n " in outstream .getvalue ()
370+
371+ tlm .onecmd ("pub --i32 foo 2" )
372+
373+ clear (outstream )
374+
375+ tlm .runner .update ()
376+
377+ tlm .onecmd ("stats" )
378+
379+ speeds = tlm .runner .stats ()
380+
381+ assert "Raw IO:\n " in outstream .getvalue ()
382+ assert "\t rx_bytes : 14\n " in outstream .getvalue ()
383+ assert "IO speeds:\n " in outstream .getvalue ()
384+ assert "\t baudspeed : {0}\n " .format (speeds ['baudspeed' ]) in outstream .getvalue ()
385+ assert "\t baudratio : {0}\n " .format (speeds ['baudratio' ]) in outstream .getvalue ()
386+ assert "\t baudratio_avg : {0}\n " .format (speeds ['baudratio_avg' ]) in outstream .getvalue ()
387+ assert "\t baudspeed_avg : {0}\n " .format (speeds ['baudspeed_avg' ]) in outstream .getvalue ()
388+ assert "Framing:\n " in outstream .getvalue ()
389+ assert "\t tx_encoded_frames : 1\n " in outstream .getvalue ()
390+ assert "\t rx_uncomplete_frames : 0\n " in outstream .getvalue ()
391+ assert "\t tx_processed_bytes : 12\n " in outstream .getvalue ()
392+ assert "\t rx_complete_frames : 1\n " in outstream .getvalue ()
393+ assert "\t tx_escaped_bytes : 0\n " in outstream .getvalue ()
394+ assert "\t rx_discarded_bytes : 0\n " in outstream .getvalue ()
395+ assert "\t rx_processed_bytes : 14\n " in outstream .getvalue ()
396+ assert "\t rx_escaped_bytes : 0\n " in outstream .getvalue ()
397+ assert "Protocol:\n " in outstream .getvalue ()
398+ assert "\t tx_encoded_frames : 1\n " in outstream .getvalue ()
399+ assert "\t rx_corrupted_header : 0\n " in outstream .getvalue ()
400+ assert "\t rx_decoded_frames : 1\n " in outstream .getvalue ()
401+ assert "\t rx_corrupted_payload : 0\n " in outstream .getvalue ()
402+ assert "\t rx_corrupted_crc : 0\n " in outstream .getvalue ()
403+ assert "\t rx_corrupted_eol : 0\n " in outstream .getvalue ()
404+ assert "\t rx_corrupted_topic : 0\n " in outstream .getvalue ()
405+
406+ # Check stats are cleaned after restart
407+ tr .authorizeConnect (True )
408+ tlm .onecmd ("serial com123" )
409+
410+ clear (outstream )
411+
412+ tlm .onecmd ("stats" )
413+
414+ assert "Raw IO:\n " in outstream .getvalue ()
415+ assert "\t rx_bytes : 0\n " in outstream .getvalue ()
416+ assert "IO speeds:\n " in outstream .getvalue ()
417+ assert "\t baudspeed : 0.0\n " in outstream .getvalue ()
418+ assert "\t baudratio : 0.0\n " in outstream .getvalue ()
419+ assert "\t baudratio_avg : 0.0\n " in outstream .getvalue ()
420+ assert "\t baudspeed_avg : 0.0\n " in outstream .getvalue ()
421+ assert "Framing:\n " in outstream .getvalue ()
422+ assert "\t tx_encoded_frames : 0\n " in outstream .getvalue ()
423+ assert "\t rx_uncomplete_frames : 0\n " in outstream .getvalue ()
424+ assert "\t tx_processed_bytes : 0\n " in outstream .getvalue ()
425+ assert "\t rx_complete_frames : 0\n " in outstream .getvalue ()
426+ assert "\t tx_escaped_bytes : 0\n " in outstream .getvalue ()
427+ assert "\t rx_discarded_bytes : 0\n " in outstream .getvalue ()
428+ assert "\t rx_processed_bytes : 0\n " in outstream .getvalue ()
429+ assert "\t rx_escaped_bytes : 0\n " in outstream .getvalue ()
430+ assert "Protocol:\n " in outstream .getvalue ()
431+ assert "\t tx_encoded_frames : 0\n " in outstream .getvalue ()
432+ assert "\t rx_corrupted_header : 0\n " in outstream .getvalue ()
433+ assert "\t rx_decoded_frames : 0\n " in outstream .getvalue ()
434+ assert "\t rx_corrupted_payload : 0\n " in outstream .getvalue ()
435+ assert "\t rx_corrupted_crc : 0\n " in outstream .getvalue ()
436+ assert "\t rx_corrupted_eol : 0\n " in outstream .getvalue ()
437+ assert "\t rx_corrupted_topic : 0\n " in outstream .getvalue ()
0 commit comments