mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 23:24:27 +01:00
plugin: Add a test for timeout and broken manifest
Both of these plugins will fail in interesting ways, and we should still handle them correctly. Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
committed by
Rusty Russell
parent
bd6ce102e6
commit
f5a3f1f0a2
58
contrib/plugins/fail/failtimeout.py
Executable file
58
contrib/plugins/fail/failtimeout.py
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python3
|
||||
"""An example plugin that fails to answer to `getmanifest`
|
||||
|
||||
Used to test the `getmanifest` timeout.
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
|
||||
|
||||
def json_getmanifest(request):
|
||||
# Timeout is 10 seconds, so wait 11
|
||||
time.sleep(11)
|
||||
return {
|
||||
"options": [
|
||||
],
|
||||
"rpcmethods": [
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
methods = {
|
||||
'getmanifest': json_getmanifest,
|
||||
}
|
||||
|
||||
|
||||
partial = ""
|
||||
for l in sys.stdin:
|
||||
try:
|
||||
partial += l
|
||||
request = json.loads(partial)
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
result = None
|
||||
method = methods[request['method']]
|
||||
params = request['params']
|
||||
try:
|
||||
if isinstance(params, dict):
|
||||
result = method(request, **params)
|
||||
else:
|
||||
result = method(request, *params)
|
||||
result = {
|
||||
"jsonrpc": "2.0",
|
||||
"result": result,
|
||||
"id": request['id']
|
||||
}
|
||||
except Exception as e:
|
||||
result = {
|
||||
"jsonrpc": "2.0",
|
||||
"error": "Error while processing {}".format(request['method']),
|
||||
"id": request['id']
|
||||
}
|
||||
|
||||
json.dump(result, fp=sys.stdout)
|
||||
sys.stdout.write('\n')
|
||||
sys.stdout.flush()
|
||||
partial = ""
|
||||
Reference in New Issue
Block a user