blob: 31d41e621cd6d0e3af8670c3038cfbde08185169 [file] [log] [blame]
Barry Warsaw42faa552013-09-30 18:35:15 -04001import socket
2import threading
3import nntplib
4import time
5
6from unittest import TestCase
7from test import test_support
8
9HOST = test_support.HOST
10
11
12def server(evt, serv, evil=False):
13 serv.listen(5)
14 try:
15 conn, addr = serv.accept()
16 except socket.timeout:
17 pass
18 else:
19 if evil:
20 conn.send("1 I'm too long response" * 3000 + "\n")
21 else:
22 conn.send("1 I'm OK response\n")
23 conn.close()
24 finally:
25 serv.close()
26 evt.set()
27
28
29class BaseServerTest(TestCase):
30 def setUp(self):
31 self.evt = threading.Event()
32 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
33 self.sock.settimeout(3)
34 self.port = test_support.bind_port(self.sock)
35 threading.Thread(
36 target=server,
37 args=(self.evt, self.sock, self.evil)).start()
38 time.sleep(.1)
39
40 def tearDown(self):
41 self.evt.wait()
42
43
44class ServerTests(BaseServerTest):
45 evil = False
46
47 def test_basic_connect(self):
48 nntp = nntplib.NNTP('localhost', self.port)
49 nntp.sock.close()
50
51
52class EvilServerTests(BaseServerTest):
53 evil = True
54
55 def test_too_long_line(self):
56 self.assertRaises(nntplib.NNTPDataError,
57 nntplib.NNTP, 'localhost', self.port)
58
59
60def test_main(verbose=None):
61 test_support.run_unittest(EvilServerTests)
62 test_support.run_unittest(ServerTests)
63
64if __name__ == '__main__':
65 test_main()