1 | import socket
|
---|
2 | import threading
|
---|
3 | import nntplib
|
---|
4 | import time
|
---|
5 |
|
---|
6 | from unittest import TestCase
|
---|
7 | from test import test_support
|
---|
8 |
|
---|
9 | HOST = test_support.HOST
|
---|
10 |
|
---|
11 |
|
---|
12 | def 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 |
|
---|
29 | class 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 |
|
---|
44 | class 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 |
|
---|
52 | class 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 |
|
---|
60 | def test_main(verbose=None):
|
---|
61 | test_support.run_unittest(EvilServerTests)
|
---|
62 | test_support.run_unittest(ServerTests)
|
---|
63 |
|
---|
64 | if __name__ == '__main__':
|
---|
65 | test_main()
|
---|