Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/test/test_smtplib.py

    r2 r391  
    22import email.utils
    33import socket
    4 import threading
    54import smtpd
    65import smtplib
     
    109import select
    1110
    12 from unittest import TestCase
     11import unittest
    1312from test import test_support
     13
     14try:
     15    import threading
     16except ImportError:
     17    threading = None
    1418
    1519HOST = test_support.HOST
     
    3741        evt.set()
    3842
    39 class GeneralTests(TestCase):
     43@unittest.skipUnless(threading, 'Threading required for this test.')
     44class GeneralTests(unittest.TestCase):
    4045
    4146    def setUp(self):
     47        self._threads = test_support.threading_setup()
    4248        self.evt = threading.Event()
    4349        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    4551        self.port = test_support.bind_port(self.sock)
    4652        servargs = (self.evt, "220 Hola mundo\n", self.sock)
    47         threading.Thread(target=server, args=servargs).start()
     53        self.thread = threading.Thread(target=server, args=servargs)
     54        self.thread.start()
    4855        self.evt.wait()
    4956        self.evt.clear()
     
    5158    def tearDown(self):
    5259        self.evt.wait()
     60        self.thread.join()
     61        test_support.threading_cleanup(*self._threads)
    5362
    5463    def testBasic1(self):
     
    135144
    136145# Test behavior of smtpd.DebuggingServer
    137 class DebuggingServerTests(TestCase):
     146@unittest.skipUnless(threading, 'Threading required for this test.')
     147class DebuggingServerTests(unittest.TestCase):
    138148
    139149    def setUp(self):
     
    143153        sys.stdout = self.output
    144154
     155        self._threads = test_support.threading_setup()
    145156        self.serv_evt = threading.Event()
    146157        self.client_evt = threading.Event()
    147         self.port = test_support.find_unused_port()
    148         self.serv = smtpd.DebuggingServer((HOST, self.port), ('nowhere', -1))
     158        # Pick a random unused port by passing 0 for the port number
     159        self.serv = smtpd.DebuggingServer((HOST, 0), ('nowhere', -1))
     160        # Keep a note of what port was assigned
     161        self.port = self.serv.socket.getsockname()[1]
    149162        serv_args = (self.serv, self.serv_evt, self.client_evt)
    150         threading.Thread(target=debugging_server, args=serv_args).start()
     163        self.thread = threading.Thread(target=debugging_server, args=serv_args)
     164        self.thread.start()
    151165
    152166        # wait until server thread has assigned a port number
     
    159173        # wait for the server thread to terminate
    160174        self.serv_evt.wait()
     175        self.thread.join()
     176        test_support.threading_cleanup(*self._threads)
    161177        # restore sys.stdout
    162178        sys.stdout = self.old_stdout
     
    226242
    227243
    228 class NonConnectingTests(TestCase):
     244class NonConnectingTests(unittest.TestCase):
    229245
    230246    def testNotConnected(self):
     
    247263
    248264# test response of client to a non-successful HELO message
    249 class BadHELOServerTests(TestCase):
     265@unittest.skipUnless(threading, 'Threading required for this test.')
     266class BadHELOServerTests(unittest.TestCase):
    250267
    251268    def setUp(self):
     
    254271        sys.stdout = self.output
    255272
     273        self._threads = test_support.threading_setup()
    256274        self.evt = threading.Event()
    257275        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    259277        self.port = test_support.bind_port(self.sock)
    260278        servargs = (self.evt, "199 no hello for you!\n", self.sock)
    261         threading.Thread(target=server, args=servargs).start()
     279        self.thread = threading.Thread(target=server, args=servargs)
     280        self.thread.start()
    262281        self.evt.wait()
    263282        self.evt.clear()
     
    265284    def tearDown(self):
    266285        self.evt.wait()
     286        self.thread.join()
     287        test_support.threading_cleanup(*self._threads)
    267288        sys.stdout = self.old_stdout
    268289
     
    310331
    311332    def smtp_VRFY(self, arg):
    312         raw_addr = email.utils.parseaddr(arg)[1]
    313         quoted_addr = smtplib.quoteaddr(arg)
    314         if raw_addr in sim_users:
    315             self.push('250 %s %s' % (sim_users[raw_addr], quoted_addr))
     333        # For max compatibility smtplib should be sending the raw address.
     334        if arg in sim_users:
     335            self.push('250 %s %s' % (sim_users[arg], smtplib.quoteaddr(arg)))
    316336        else:
    317337            self.push('550 No such user: %s' % arg)
    318338
    319339    def smtp_EXPN(self, arg):
    320         list_name = email.utils.parseaddr(arg)[1].lower()
     340        list_name = arg.lower()
    321341        if list_name in sim_lists:
    322342            user_list = sim_lists[list_name]
     
    346366            self.push('550 No access for you!')
    347367
     368    def handle_error(self):
     369        raise
     370
    348371
    349372class SimSMTPServer(smtpd.SMTPServer):
     
    364387        self._extra_features.append(feature)
    365388
     389    def handle_error(self):
     390        raise
     391
    366392
    367393# Test various SMTP & ESMTP commands/behaviors that require a simulated server
    368394# (i.e., something with more features than DebuggingServer)
    369 class SMTPSimTests(TestCase):
     395@unittest.skipUnless(threading, 'Threading required for this test.')
     396class SMTPSimTests(unittest.TestCase):
    370397
    371398    def setUp(self):
     399        self._threads = test_support.threading_setup()
    372400        self.serv_evt = threading.Event()
    373401        self.client_evt = threading.Event()
    374         self.port = test_support.find_unused_port()
    375         self.serv = SimSMTPServer((HOST, self.port), ('nowhere', -1))
     402        # Pick a random unused port by passing 0 for the port number
     403        self.serv = SimSMTPServer((HOST, 0), ('nowhere', -1))
     404        # Keep a note of what port was assigned
     405        self.port = self.serv.socket.getsockname()[1]
    376406        serv_args = (self.serv, self.serv_evt, self.client_evt)
    377         threading.Thread(target=debugging_server, args=serv_args).start()
     407        self.thread = threading.Thread(target=debugging_server, args=serv_args)
     408        self.thread.start()
    378409
    379410        # wait until server thread has assigned a port number
     
    386417        # wait for the server thread to terminate
    387418        self.serv_evt.wait()
     419        self.thread.join()
     420        test_support.threading_cleanup(*self._threads)
    388421
    389422    def testBasic(self):
     
    421454
    422455        u = 'nobody@nowhere.com'
    423         expected_unknown = (550, 'No such user: %s' % smtplib.quoteaddr(u))
     456        expected_unknown = (550, 'No such user: %s' % u)
    424457        self.assertEqual(smtp.vrfy(u), expected_unknown)
    425458        smtp.quit()
Note: See TracChangeset for help on using the changeset viewer.