mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-05-31 01:32:00 -07:00
All tests now use 'jsonrpc--with-python-fixture' with a Python3
subprocess instead of the in-Emacs TCP server. Changed the "harakiri"
method to be a request instead of a notification for to reduce chance of
"Sentinel hasn't run" warning.
The two in-Emacs-RPC-specific error tests ('errors-with--32601' and
'signals-an--32603-JSONRPC-error') are dropped with the fixture itself,
as the error paths they exercise are internal to the Emacs Lisp
dispatcher and have no direct Python equivalent. They will have to be
re-done later on in other form.
* test/lisp/jsonrpc-resources/server-emacsrpc.py: New file.
* test/lisp/jsonrpc-resources/server-anxious-nested.py: Use new
harakiri.
* test/lisp/jsonrpc-resources/server-emacsrpc.py: Use new harakiri.
* test/lisp/jsonrpc-resources/server-harakiri.py: Use new harakiri.
* test/lisp/jsonrpc-resources/server-remote-during-sync-1.py: Use new
harakiri.
* test/lisp/jsonrpc-resources/server-remote-during-sync-2.py: Use new
harakiri.
* test/lisp/jsonrpc-resources/server-remote-error.py: Use new harakiri.
* test/lisp/jsonrpc-resources/common.py (harakiri): New definition.
* test/lisp/jsonrpc-tests.el
(jsonrpc--with-python-fixture): Rework, move up.
(jsonrpc-connection-ready-p): Move up.
(jsonrpc--call-with-emacsrpc-fixture)
(jsonrpc--with-emacsrpc-fixture)
(errors-with--32601)
(signals-an--32603-JSONRPC-error): Remove.
(returns-3, times-out, doesnt-time-out, stretching-it-but-works)
(deferred-action-toolate, deferred-action-intime)
(deferred-action-complex-tests): Migrate to Python fixture.
(scontrol-remote-during-sync-1, scontrol-remote-during-sync-2)
(scontrol-anxious-nested, scontrol-remote-error)
(shutdown-clean-after-notification): Tweak.
42 lines
1.4 KiB
Python
Executable file
42 lines
1.4 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
"""Test server for scontrol-remote-error.
|
|
|
|
Choreography (anxious continuation survives an rdispatcher error):
|
|
|
|
client -> server: LR1 (id=1)
|
|
server -> client: badMethod (id=1000)
|
|
server -> client: response LR1 "ok"
|
|
client -> server: error response badMethod {code: -32601}
|
|
|
|
Even though the remote-request dispatch produces an error reply, the
|
|
anxious continuation for LR1 must still fire and resolve to "ok".
|
|
"""
|
|
import os, sys
|
|
sys.path.insert(0, os.path.dirname(__file__))
|
|
from common import read_msg, write_msg, log, harakiri
|
|
|
|
|
|
def main():
|
|
while True:
|
|
msg = read_msg()
|
|
if msg is None:
|
|
break
|
|
mid = msg.get('id')
|
|
method = msg.get('method')
|
|
log(f'<- {method or "(response)"} id={mid}')
|
|
if harakiri(msg): break
|
|
elif method == 'LR1':
|
|
# Send badMethod BEFORE responding to LR1; the client
|
|
# rdispatcher will signal a jsonrpc-error for it.
|
|
write_msg({'jsonrpc': '2.0', 'id': 1000,
|
|
'method': 'badMethod', 'params': {}})
|
|
log('-> badMethod id=1000')
|
|
write_msg({'jsonrpc': '2.0', 'id': mid, 'result': 'ok'})
|
|
log(f'-> (response LR1) id={mid}')
|
|
# Collect the error response to badMethod.
|
|
err = read_msg()
|
|
log(f'<- (error response badMethod): {err}')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|