| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  | # test asynchat -- requires threading | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-14 14:35:43 +00:00
										 |  |  | import thread # If this fails, we can't test this module | 
					
						
							| 
									
										
										
										
											2001-04-06 16:43:49 +00:00
										 |  |  | import asyncore, asynchat, socket, threading, time | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | from test import test_support | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | HOST = "127.0.0.1" | 
					
						
							| 
									
										
										
										
											2005-06-20 13:45:34 +00:00
										 |  |  | PORT = 54322 | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class echo_server(threading.Thread): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def run(self): | 
					
						
							|  |  |  |         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | 
					
						
							| 
									
										
										
										
											2001-04-15 00:42:13 +00:00
										 |  |  |         sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | 
					
						
							| 
									
										
										
										
											2006-06-13 04:08:53 +00:00
										 |  |  |         global PORT | 
					
						
							|  |  |  |         PORT = test_support.bind_port(sock, HOST, PORT) | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  |         sock.listen(1) | 
					
						
							|  |  |  |         conn, client = sock.accept() | 
					
						
							|  |  |  |         buffer = "" | 
					
						
							|  |  |  |         while "\n" not in buffer: | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  |             data = conn.recv(1) | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  |             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): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  |     def __init__(self, terminator): | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  |         asynchat.async_chat.__init__(self) | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  |         self.contents = None | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  |         self.create_socket(socket.AF_INET, socket.SOCK_STREAM) | 
					
						
							|  |  |  |         self.connect((HOST, PORT)) | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  |         self.set_terminator(terminator) | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  |         self.buffer = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def handle_connect(self): | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  |         pass | 
					
						
							|  |  |  |         ##print "Connected" | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def collect_incoming_data(self, data): | 
					
						
							|  |  |  |         self.buffer = self.buffer + data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def found_terminator(self): | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  |         #print "Received:", repr(self.buffer) | 
					
						
							|  |  |  |         self.contents = self.buffer | 
					
						
							| 
									
										
										
										
											2001-04-06 16:32:22 +00:00
										 |  |  |         self.buffer = "" | 
					
						
							|  |  |  |         self.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  | 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() | 
					
						
							| 
									
										
										
										
											2005-06-20 13:45:34 +00:00
										 |  |  |         s.join() | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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() | 
					
						
							| 
									
										
										
										
											2005-06-20 13:45:34 +00:00
										 |  |  |         s.join() | 
					
						
							| 
									
										
										
										
											2005-06-09 14:56:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(c.contents, 'hello ') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_main(verbose=None): | 
					
						
							|  |  |  |     test_support.run_unittest(TestAsynchat) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     test_main(verbose=True) |