Lib.test.test_asynchat.py Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython Show documentation
Show all versions of jython Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
# test asynchat -- requires threading
import thread # If this fails, we can't test this module
import asyncore, asynchat, socket, threading, time
import unittest
from test import test_support
HOST = "127.0.0.1"
PORT = 54322
class echo_server(threading.Thread):
def run(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
global PORT
PORT = test_support.bind_port(sock, HOST)
sock.listen(1)
conn, client = sock.accept()
buffer = ""
while "\n" not in buffer:
data = conn.recv(1)
if not data:
break
buffer = buffer + data
while buffer:
n = conn.send(buffer)
buffer = buffer[n:]
conn.close()
sock.close()
class echo_client(asynchat.async_chat):
def __init__(self, terminator):
asynchat.async_chat.__init__(self)
self.contents = None
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((HOST, PORT))
self.set_terminator(terminator)
self.buffer = ""
def handle_connect(self):
pass
##print "Connected"
def collect_incoming_data(self, data):
self.buffer = self.buffer + data
def found_terminator(self):
#print "Received:", repr(self.buffer)
self.contents = self.buffer
self.buffer = ""
self.close()
class TestAsynchat(unittest.TestCase):
def setUp (self):
pass
def tearDown (self):
pass
def test_line_terminator(self):
s = echo_server()
s.start()
time.sleep(1) # Give server time to initialize
c = echo_client('\n')
c.push("hello ")
c.push("world\n")
asyncore.loop()
s.join()
self.assertEqual(c.contents, 'hello world')
def test_numeric_terminator(self):
# Try reading a fixed number of bytes
s = echo_server()
s.start()
time.sleep(1) # Give server time to initialize
c = echo_client(6L)
c.push("hello ")
c.push("world\n")
asyncore.loop()
s.join()
self.assertEqual(c.contents, 'hello ')
def test_main(verbose=None):
test_support.run_unittest(TestAsynchat)
if __name__ == "__main__":
test_main(verbose=True)