Browse Source
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>plugin-6
committed by
Rusty Russell
2 changed files with 73 additions and 0 deletions
@ -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 = "" |
Loading…
Reference in new issue