Skip to content

Commit 1aa0bc6

Browse files
authored
Add test for stopping Cyclic Tasks with removal (#645)
This increases test coverage in order to verify that Cyclic Tasks are correctly stopped when multiple tasks are active on a particular bus. The test is carried out via the SocketCAN interface. Addresses #634
1 parent 8112d13 commit 1aa0bc6

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

test/test_cyclic_socketcan.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,56 @@ def test_modify_data_different_arbitration_id_than_original(self):
523523
with self.assertRaises(ValueError):
524524
task.modify_data(new_message)
525525

526+
def test_stop_all_periodic_tasks_and_remove_task(self):
527+
message_a = can.Message(
528+
arbitration_id=0x401,
529+
data=[0x11, 0x11, 0x11, 0x11, 0x11, 0x11],
530+
is_extended_id=False,
531+
)
532+
message_b = can.Message(
533+
arbitration_id=0x402,
534+
data=[0x22, 0x22, 0x22, 0x22, 0x22, 0x22],
535+
is_extended_id=False,
536+
)
537+
message_c = can.Message(
538+
arbitration_id=0x403,
539+
data=[0x33, 0x33, 0x33, 0x33, 0x33, 0x33],
540+
is_extended_id=False,
541+
)
542+
543+
# Start Tasks
544+
task_a = self._send_bus.send_periodic(message_a, self.PERIOD)
545+
task_b = self._send_bus.send_periodic(message_b, self.PERIOD)
546+
task_c = self._send_bus.send_periodic(message_c, self.PERIOD)
547+
548+
self.assertIsInstance(task_a, can.broadcastmanager.ModifiableCyclicTaskABC)
549+
self.assertIsInstance(task_b, can.broadcastmanager.ModifiableCyclicTaskABC)
550+
self.assertIsInstance(task_c, can.broadcastmanager.ModifiableCyclicTaskABC)
551+
552+
for _ in range(6):
553+
_ = self._recv_bus.recv(self.PERIOD)
554+
555+
# Stop all tasks and delete
556+
self._send_bus.stop_all_periodic_tasks(remove_tasks=True)
557+
558+
# Now wait for a few periods, after which we should definitely not
559+
# receive any CAN messages
560+
time.sleep(4 * self.PERIOD)
561+
562+
# If we successfully deleted everything, then we will eventually read
563+
# 0 messages.
564+
successfully_stopped = False
565+
for _ in range(6):
566+
rx_message = self._recv_bus.recv(self.PERIOD)
567+
568+
if rx_message is None:
569+
successfully_stopped = True
570+
break
571+
self.assertTrue(successfully_stopped, "Still received messages after stopping")
572+
573+
# None of the tasks should still be associated with the bus
574+
self.assertEqual(0, len(self._send_bus._periodic_tasks))
575+
526576

527577
if __name__ == "__main__":
528578
unittest.main()

0 commit comments

Comments
 (0)