74 lines
1.6 KiB
Python
74 lines
1.6 KiB
Python
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()
|