test: update bridge lifecycle stand-ins for recovery state

This commit is contained in:
mikecarper committed 2026-10-09 20:07:06 -07:00
1 parent 617aacba42
commit 4b074e12c1
2 files changed
+21 -7

No files matched your search

+19 -7
View File
@@ -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();
}
'''
+2
View File
@@ -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;