| import socket | |
| import nntplib | |
| import time | |
| import unittest | |
| try: | |
| import threading | |
| except ImportError: | |
| threading = None | |
| from unittest import TestCase | |
| from test import test_support | |
| HOST = test_support.HOST | |
| def server(evt, serv, evil=False): | |
| serv.listen(5) | |
| try: | |
| conn, addr = serv.accept() | |
| except socket.timeout: | |
| pass | |
| else: | |
| if evil: | |
| conn.send("1 I'm too long response" * 3000 + "\n") | |
| else: | |
| conn.send("1 I'm OK response\n") | |
| conn.close() | |
| finally: | |
| serv.close() | |
| evt.set() | |
| class BaseServerTest(TestCase): | |
| def setUp(self): | |
| self.evt = threading.Event() | |
| self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
| self.sock.settimeout(3) | |
| self.port = test_support.bind_port(self.sock) | |
| threading.Thread( | |
| target=server, | |
| args=(self.evt, self.sock, self.evil)).start() | |
| time.sleep(.1) | |
| def tearDown(self): | |
| self.evt.wait() | |
| @unittest.skipUnless(threading, 'threading required') | |
| class ServerTests(BaseServerTest): | |
| evil = False | |
| def test_basic_connect(self): | |
| nntp = nntplib.NNTP('localhost', self.port) | |
| nntp.sock.close() | |
| @unittest.skipUnless(threading, 'threading required') | |
| class EvilServerTests(BaseServerTest): | |
| evil = True | |
| def test_too_long_line(self): | |
| self.assertRaises(nntplib.NNTPDataError, | |
| nntplib.NNTP, 'localhost', self.port) | |
| def test_main(verbose=None): | |
| test_support.run_unittest(EvilServerTests) | |
| test_support.run_unittest(ServerTests) | |
| if __name__ == '__main__': | |
| test_main() |