ble-reticulum/tests
torlando-tech ff0b293006 fix(ble): Fix D-Bus disconnect monitoring with ObjectManager and polling fallback
The original D-Bus monitoring implementation (from peripheral disconnect fix)
wasn't receiving signals due to improper low-level API usage. This commit
replaces it with two reliable solutions:

Solution A: High-Level ObjectManager API
- Uses proper D-Bus proxy interface with automatic signal subscription
- Discovers and subscribes to all BlueZ devices (existing + new)
- PropertiesChanged callbacks properly integrated with asyncio event loop
- Signals now correctly delivered when centrals disconnect

Solution B: Timeout-Based Polling Fallback
- Polls BlueZ device state every 30 seconds as safety net
- Detects stale connections missed by D-Bus signals
- Uses sync dbus-python for simplicity and reliability
- Guaranteed cleanup within 30s even if signals fail

Implementation:
- Replaced _monitor_device_disconnections() with ObjectManager-based approach
- Added _poll_stale_connections() as polling fallback
- Both threads run concurrently for dual-layer monitoring
- Cleanup is idempotent (both detecting same disconnect is safe)

Testing:
- Added test_dbus_disconnect_monitoring.py (10 test cases)
- Added test_stale_connection_polling.py (8 test cases)
- Added 2 integration tests to test_peripheral_disconnect_cleanup.py
- All tests mock D-Bus libraries, no real D-Bus required
- Manual validation script (test_monitoring.py) verified locally

Impact:
- Peripheral disconnects now detected within ~1s (D-Bus) or 30s max (polling)
- Prevents "max peers (7) reached" blocking after multiple disconnect cycles
- System can handle unlimited connect/disconnect cycles without memory leaks

Reference: DBUS_MONITORING_FIX.md for complete analysis and troubleshooting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 20:10:44 -05:00
..
conftest.py Initial commit: BLE Reticulum interface 2025-10-26 19:14:14 -04:00
mock_ble_driver.py Refactor BLEInterface to driver-based architecture 2025-11-03 23:15:22 -05:00
test_ble_peer_interface.py Initial commit: BLE Reticulum interface 2025-10-26 19:14:14 -04:00
test_bleak_threading_hang.py Initial commit: BLE Reticulum interface 2025-10-26 19:14:14 -04:00
test_bleak_with_exec_loading.py Initial commit: BLE Reticulum interface 2025-10-26 19:14:14 -04:00
test_bluez_state_cleanup.py fix(ble): Add BlueZ state cleanup to prevent persistent "Operation already in progress" errors 2025-11-10 00:51:27 -05:00
test_breddr_fallback_prevention.py fix(ble): Clarify ConnectDevice() object path return as success 2025-11-10 19:47:34 -05:00
test_config_directory.py fix: support custom config directories via RNS.Reticulum.configdir 2025-10-28 19:09:48 -04:00
test_dbus_disconnect_monitoring.py fix(ble): Fix D-Bus disconnect monitoring with ObjectManager and polling fallback 2025-11-12 20:10:44 -05:00
test_error_recovery.py Initial commit: BLE Reticulum interface 2025-10-26 19:14:14 -04:00
test_fragmentation.py Initial commit: BLE Reticulum interface 2025-10-26 19:14:14 -04:00
test_gatt_server.py Initial commit: BLE Reticulum interface 2025-10-26 19:14:14 -04:00
test_gatt_server_readiness.py fix(ble): Add D-Bus verification to prevent GATT server initialization race 2025-11-10 19:51:23 -05:00
test_installer.sh refactor: make libffi-dev conditional for armhf (32-bit ARM) only 2025-10-29 11:02:51 -04:00
test_integration.py test: Add comprehensive v2.2 protocol test suites 2025-11-07 23:00:30 -05:00
test_multi_device_simulation.py Initial commit: BLE Reticulum interface 2025-10-26 19:14:14 -04:00
test_peripheral_disconnect_cleanup.py fix(ble): Fix D-Bus disconnect monitoring with ObjectManager and polling fallback 2025-11-12 20:10:44 -05:00
test_prioritization.py test: Update integration tests for driver abstraction refactor 2025-11-07 22:48:38 -05:00
test_scanner_connection_coordination.py fix(ble): Add scanner-connection coordination to prevent "InProgress" errors 2025-11-10 19:44:20 -05:00
test_stale_connection_polling.py fix(ble): Fix D-Bus disconnect monitoring with ObjectManager and polling fallback 2025-11-12 20:10:44 -05:00
test_v2_2_identity_handshake.py test: Add comprehensive v2.2 protocol test suites 2025-11-07 23:00:30 -05:00
test_v2_2_mac_sorting.py test: Add comprehensive v2.2 protocol test suites 2025-11-07 23:00:30 -05:00
test_v2_2_race_conditions.py test: Add comprehensive v2.2 protocol test suites 2025-11-07 23:00:30 -05:00