102 lines
2.9 KiB
Python
102 lines
2.9 KiB
Python
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
|
|
import os
|
|
import sys
|
|
import threading
|
|
import unittest
|
|
import time
|
|
|
|
gen_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "gen-py")
|
|
sys.path.append(gen_path)
|
|
import _import_local_thrift # noqa
|
|
from TestServer import TestServer
|
|
from thrift.transport import TSocket, TTransport
|
|
from thrift.protocol import TBinaryProtocol
|
|
from thrift.server import TNonblockingServer
|
|
|
|
|
|
class Handler:
|
|
|
|
def add_and_get_msg(self, msg):
|
|
return msg
|
|
|
|
|
|
class Server:
|
|
|
|
def __init__(self):
|
|
handler = Handler()
|
|
processor = TestServer.Processor(handler)
|
|
transport = TSocket.TServerSocket("127.0.0.1", 30030)
|
|
self.server = TNonblockingServer.TNonblockingServer(processor, transport)
|
|
|
|
def start_server(self):
|
|
print("-------start server ------\n")
|
|
self.server.serve()
|
|
print("------stop server -----\n")
|
|
|
|
def close_server(self):
|
|
self.server.stop()
|
|
self.server.close()
|
|
|
|
|
|
class Client:
|
|
|
|
def start_client(self):
|
|
transport = TSocket.TSocket("127.0.0.1", 30030)
|
|
trans = TTransport.TFramedTransport(transport)
|
|
protocol = TBinaryProtocol.TBinaryProtocol(trans)
|
|
client = TestServer.Client(protocol)
|
|
trans.open()
|
|
self.msg = client.add_and_get_msg("hello thrift")
|
|
|
|
def get_message(self):
|
|
try:
|
|
msg = self.msg
|
|
return msg
|
|
except AttributeError as e:
|
|
raise e
|
|
print("self.msg not exit\n")
|
|
|
|
|
|
class TestNonblockingServer(unittest.TestCase):
|
|
|
|
def test_normalconnection(self):
|
|
serve = Server()
|
|
client = Client()
|
|
|
|
serve_thread = threading.Thread(target=serve.start_server)
|
|
client_thread = threading.Thread(target=client.start_client)
|
|
serve_thread.start()
|
|
time.sleep(10)
|
|
client_thread.start()
|
|
client_thread.join(0.5)
|
|
try:
|
|
msg = client.get_message()
|
|
self.assertEqual("hello thrift", msg)
|
|
except AssertionError as e:
|
|
raise e
|
|
print("assert failure")
|
|
finally:
|
|
serve.close_server()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|