Skip to content

[Feature][Medium] Improve RPC and WebSocket test reliability and error handling #126

@numbers-official

Description

@numbers-official

Summary

The Python RPC and WebSocket test scripts have weak error handling patterns that can mask failures and cause test processes to hang indefinitely.

Affected Files

1. rpc/rpc_test.py (Lines 20-22, 34-36)

Issue: Generic exception catching with no response validation.

except Exception as e:
    print(f"Connection failed, Error: {str(e)}")
    # Does not validate response JSON structure or check for RPC error fields

Impact: Tests can report "pass" even when the RPC endpoint returns error responses, because only connection-level failures are caught. RPC-level errors (e.g., {"error": {"code": -32000}}) are silently ignored.

Suggested fix:

  • Validate response JSON has expected fields (result, not error)
  • Use assert statements or a proper test framework (pytest)
  • Check HTTP status codes explicitly

2. rpc/websocket_test.py (Lines 18-26)

Issue: Infinite loop with silent timeout swallowing.

while True:
    try:
        message = await asyncio.wait_for(ws.recv(), timeout=60)
        print(json.loads(message))
    except asyncio.TimeoutError:
        pass  # Silently continues — loop never exits naturally
    except Exception as e:
        break

Impact: If the WebSocket subscription produces no events, the test loops forever (each iteration waits 60 seconds then restarts). There is no maximum iteration count, no total timeout, and no success/failure exit criteria.

Suggested fix:

  • Add a maximum number of iterations or a total elapsed time limit
  • Define explicit success criteria (e.g., "received at least N events")
  • Exit with appropriate exit code (0 for success, 1 for timeout/failure)
  • Add --timeout CLI argument for configurable test duration

General Recommendations

  • Migrate both test files to use pytest with proper assertions
  • Add sys.exit(1) on failure so CI/CD pipelines can detect test failures
  • Add type checking for received JSON payloads
  • Document expected test behavior in docstrings

Generated by Health Monitor with Omni

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions