1
0
mirror of https://github.com/haiwen/libsearpc.git synced 2025-09-03 22:04:24 +00:00

pysearpc: implemented named pipe client (and server, for testing)

This commit is contained in:
Shuai Lin
2018-08-09 17:34:29 +08:00
parent 0bf8150137
commit 13f186c90d
6 changed files with 262 additions and 30 deletions

View File

@@ -2,6 +2,7 @@
#coding: UTF-8
import json
import logging
import os
import sys
import unittest
@@ -10,11 +11,13 @@ from operator import add, mul
os.chdir(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, '..')
from pysearpc import (
SearpcClient, SearpcError, SearpcTransport, searpc_func, searpc_server, NamedPipeTransport
NamedPipeClient, NamedPipeServer, SearpcClient, SearpcError,
SearpcTransport, searpc_func, searpc_server
)
SVCNAME = 'test-service'
def init_server():
searpc_server.create_service(SVCNAME)
searpc_server.register_function(SVCNAME, add, 'add')
@@ -22,18 +25,13 @@ def init_server():
class DummyTransport(SearpcTransport):
def send(self, fcall_str):
return searpc_server.call_function(SVCNAME, fcall_str)
def connect(self):
pass
def send(self, service, fcall_str):
return searpc_server.call_function(service, fcall_str)
class SampleRpcClient(SearpcClient):
def __init__(self):
self.transport = DummyTransport()
def call_remote_func_sync(self, fcall_str):
return self.transport.send(fcall_str)
class RpcMixin(object):
@searpc_func("int", ["int", "int"])
def add(self, x, y):
pass
@@ -42,28 +40,64 @@ class SampleRpcClient(SearpcClient):
def multi(self, x, y):
pass
class DummyRpcClient(SearpcClient, RpcMixin):
def __init__(self):
self.transport = DummyTransport()
def call_remote_func_sync(self, fcall_str):
return self.transport.send(SVCNAME, fcall_str)
class NamedPipeClientForTest(NamedPipeClient, RpcMixin):
pass
SOCKET_PATH = '/tmp/libsearpc-test.sock'
class SearpcTest(unittest.TestCase):
def setUp(self):
@classmethod
def setUpClass(cls):
init_server()
self.client = SampleRpcClient()
cls.client = DummyRpcClient()
cls.named_pipe_server = NamedPipeServer(SOCKET_PATH)
cls.named_pipe_server.start()
cls.named_pipe_client = NamedPipeClientForTest(SOCKET_PATH, SVCNAME)
@classmethod
def tearDownClass(cls):
cls.named_pipe_client.stop()
cls.named_pipe_server.stop()
def test_normal_transport(self):
self.run_common()
self.run_common(self.client)
@unittest.skip('not implemented yet')
# @unittest.skip('not implemented yet')
def test_pipe_transport(self):
self.client.transport = NamedPipeTransport('/tmp/libsearpc-test.sock')
self.run_common()
self.run_common(self.named_pipe_client)
def run_common(self):
v = self.client.add(1, 2)
def run_common(self, client):
v = client.add(1, 2)
self.assertEqual(v, 3)
v = self.client.multi(1, 2)
v = client.multi(1, 2)
self.assertEqual(v, 2)
v = self.client.multi('abc', 2)
v = client.multi('abc', 2)
self.assertEqual(v, 'abcabc')
def setup_logging(level=logging.INFO):
kw = {
# 'format': '[%(asctime)s][%(pathname)s]: %(message)s',
'format': '[%(asctime)s][%(module)s]: %(message)s',
'datefmt': '%m/%d/%Y %H:%M:%S',
'level': level,
'stream': sys.stdout
}
logging.basicConfig(**kw)
if __name__ == '__main__':
setup_logging()
unittest.main()