diff --git a/test/test_rs232_driver_lifecycle.py b/test/test_rs232_driver_lifecycle.py index 8ae997552..e012483e9 100644 --- a/test/test_rs232_driver_lifecycle.py +++ b/test/test_rs232_driver_lifecycle.py @@ -37,6 +37,8 @@ struct RS232Bridge : BridgeBase { NodePrefs* _prefs; Stream* _serial; int16_t _rx_pin, _tx_pin; + uint16_t _rx_buffer_pos = 37; + bool _rx_packet_ready = true; RS232Bridge(NodePrefs& prefs, HardwareSerial& serial) : _prefs(&prefs), _serial(&serial), _rx_pin(5), _tx_pin(6) {} void begin(); @@ -48,30 +50,40 @@ int main() { NodePrefs prefs; HardwareSerial serial; RS232Bridge bridge(prefs, serial); + auto dirty_parser = [&]() { bridge._rx_buffer_pos = 37; bridge._rx_packet_ready = true; }; + auto assert_parser_reset = [&]() { assert(bridge._rx_buffer_pos == 0 && !bridge._rx_packet_ready); }; assert(!bridge.isRunning()); serial.pins_ok = false; bridge.begin(); assert(!bridge.isRunning() && serial.pin_calls == 1 && serial.begin_calls == 0); + assert_parser_reset(); serial.pins_ok = true; serial.begin_ok = false; + dirty_parser(); bridge.begin(); assert(!bridge.isRunning() && !serial.installed && serial.begin_calls == 1); + assert_parser_reset(); serial.begin_ok = true; + dirty_parser(); bridge.begin(); assert(bridge.isRunning() && serial.installed && serial.begin_calls == 2); + assert_parser_reset(); assert(serial.rx == 5 && serial.tx == 6 && serial.baud == 57600); + dirty_parser(); bridge.end(); assert(!bridge.isRunning() && !serial.installed && serial.end_calls == 1); + assert_parser_reset(); // A failed restart must clear its former state, and a later retry can recover. - bridge.begin(); assert(bridge.isRunning()); + dirty_parser(); bridge.begin(); assert(bridge.isRunning()); assert_parser_reset(); serial.pins_ok = false; - bridge.begin(); assert(!bridge.isRunning()); - bridge.end(); serial.pins_ok = true; prefs.bridge_baud = 19200; - bridge.begin(); assert(bridge.isRunning() && serial.baud == 19200); + dirty_parser(); bridge.begin(); assert(!bridge.isRunning()); assert_parser_reset(); + dirty_parser(); bridge.end(); assert_parser_reset(); + serial.pins_ok = true; prefs.bridge_baud = 19200; + dirty_parser(); bridge.begin(); assert(bridge.isRunning() && serial.baud == 19200); assert_parser_reset(); for (unsigned cycle = 0; cycle < 100; ++cycle) { - bridge.end(); assert(!bridge.isRunning()); - bridge.begin(); assert(bridge.isRunning()); + dirty_parser(); bridge.end(); assert(!bridge.isRunning()); assert_parser_reset(); + dirty_parser(); bridge.begin(); assert(bridge.isRunning()); assert_parser_reset(); } - bridge.end(); assert(!bridge.isRunning()); + dirty_parser(); bridge.end(); assert(!bridge.isRunning()); assert_parser_reset(); } ''' diff --git a/test/test_wifi_ap_lr_safety.py b/test/test_wifi_ap_lr_safety.py index 3f0c66787..4d8f0fa6e 100644 --- a/test/test_wifi_ap_lr_safety.py +++ b/test/test_wifi_ap_lr_safety.py @@ -16,6 +16,8 @@ public: int _active_format=0,_rx_mux=0,_rx_head=0,_rx_tail=0,_rx_count=0,_rx_dropped=0,_rx_dropped_reported=0; int _tx_mux=0,_tx_head=0,_tx_tail=0,_tx_count=0,_tx_waiting=0,_tx_callback_done=0; int _tx_callback_status=0,_tx_dropped=0,_tx_dropped_reported=0; + uint32_t _tx_started_at=0,_tx_retry_at=0; + bool _sdk_teardown_failed=false; mesh::espnow::ESPNowRawReassembler _raw_reassembler; struct QueuedTransmit {bool started=false;int packet=0;}; static constexpr int TX_QUEUE_DEPTH=2;