mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-11-19 01:43:36 +01:00
pylightning: Add a small test for async rpcmethods
Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
parent
cc4fbfca43
commit
571fb44d20
30
tests/plugins/asynctest.py
Executable file
30
tests/plugins/asynctest.py
Executable file
@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python3
|
||||
"""This plugin is used to check that async method calls are working correctly.
|
||||
|
||||
The plugin registers a method `callme` with an argument. All calls are
|
||||
stashed away, and are only resolved on the fifth invocation. All calls
|
||||
will then return the argument of the fifth call.
|
||||
|
||||
"""
|
||||
from lightning import Plugin
|
||||
|
||||
plugin = Plugin()
|
||||
|
||||
|
||||
@plugin.init()
|
||||
def init(configuration, options, plugin):
|
||||
plugin.requests = []
|
||||
|
||||
|
||||
@plugin.method('asyncqueue', sync=False)
|
||||
def async_queue(request, plugin):
|
||||
plugin.requests.append(request)
|
||||
|
||||
|
||||
@plugin.method('asyncflush')
|
||||
def async_flush(res, plugin):
|
||||
for r in plugin.requests:
|
||||
r.set_result(res)
|
||||
|
||||
|
||||
plugin.run()
|
@ -5,6 +5,7 @@ from utils import only_one
|
||||
|
||||
import pytest
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
|
||||
def test_option_passthrough(node_factory):
|
||||
@ -146,3 +147,27 @@ def test_plugin_connected_hook(node_factory):
|
||||
|
||||
peer = l1.rpc.listpeers(l3.info['id'])['peers']
|
||||
assert(peer == [] or not peer[0]['connected'])
|
||||
|
||||
|
||||
def test_async_rpcmethod(node_factory, executor):
|
||||
"""This tests the async rpcmethods.
|
||||
|
||||
It works in conjunction with the `asynctest` plugin which stashes
|
||||
requests and then resolves all of them on the fifth call.
|
||||
"""
|
||||
l1 = node_factory.get_node(options={'plugin': 'tests/plugins/asynctest.py'})
|
||||
|
||||
results = []
|
||||
for i in range(10):
|
||||
results.append(executor.submit(l1.rpc.asyncqueue))
|
||||
|
||||
time.sleep(3)
|
||||
|
||||
# None of these should have returned yet
|
||||
assert len([r for r in results if r.done()]) == 0
|
||||
|
||||
# This last one triggers the release and all results should be 42,
|
||||
# since the last number is returned for all
|
||||
l1.rpc.asyncflush(42)
|
||||
|
||||
assert [r.result() for r in results] == [42] * len(results)
|
||||
|
Loading…
Reference in New Issue
Block a user