1- # Copyright 2001-2016 by Vinay Sajip. All Rights Reserved.
1+ # Copyright 2001-2017 by Vinay Sajip. All Rights Reserved.
22#
33# Permission to use, copy, modify, and distribute this software and its
44# documentation for any purpose and without fee is hereby granted,
1616
1717"""Test harness for the logging module. Run all tests.
1818
19- Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved.
19+ Copyright (C) 2001-2017 Vinay Sajip. All Rights Reserved.
2020"""
2121
2222import logging
@@ -1440,9 +1440,17 @@ def setUp(self):
14401440 """Set up a TCP server to receive log messages, and a SocketHandler
14411441 pointing to that server's address and port."""
14421442 BaseTest .setUp (self )
1443- self .server = server = self .server_class (self .address ,
1444- self .handle_socket , 0.01 )
1445- server .start ()
1443+ # Issue #29177: deal with errors that happen during setup
1444+ self .server = self .sock_hdlr = self .server_exception = None
1445+ try :
1446+ self .server = server = self .server_class (self .address ,
1447+ self .handle_socket , 0.01 )
1448+ server .start ()
1449+ # Uncomment next line to test error recovery in setUp()
1450+ # raise OSError('dummy error raised')
1451+ except OSError as e :
1452+ self .server_exception = e
1453+ return
14461454 server .ready .wait ()
14471455 hcls = logging .handlers .SocketHandler
14481456 if isinstance (server .server_address , tuple ):
@@ -1457,9 +1465,11 @@ def setUp(self):
14571465 def tearDown (self ):
14581466 """Shutdown the TCP server."""
14591467 try :
1460- self .server .stop (2.0 )
1461- self .root_logger .removeHandler (self .sock_hdlr )
1462- self .sock_hdlr .close ()
1468+ if self .server :
1469+ self .server .stop (2.0 )
1470+ if self .sock_hdlr :
1471+ self .root_logger .removeHandler (self .sock_hdlr )
1472+ self .sock_hdlr .close ()
14631473 finally :
14641474 BaseTest .tearDown (self )
14651475
@@ -1480,6 +1490,8 @@ def handle_socket(self, request):
14801490
14811491 def test_output (self ):
14821492 # The log message sent to the SocketHandler is properly received.
1493+ if self .server_exception :
1494+ self .skipTest (self .server_exception )
14831495 logger = logging .getLogger ("tcp" )
14841496 logger .error ("spam" )
14851497 self .handled .acquire ()
@@ -1488,6 +1500,8 @@ def test_output(self):
14881500 self .assertEqual (self .log_output , "spam\n eggs\n " )
14891501
14901502 def test_noserver (self ):
1503+ if self .server_exception :
1504+ self .skipTest (self .server_exception )
14911505 # Avoid timing-related failures due to SocketHandler's own hard-wired
14921506 # one-second timeout on socket.create_connection() (issue #16264).
14931507 self .sock_hdlr .retryStart = 2.5
@@ -1528,7 +1542,7 @@ def setUp(self):
15281542
15291543 def tearDown (self ):
15301544 SocketHandlerTest .tearDown (self )
1531- os . remove (self .address )
1545+ support . unlink (self .address )
15321546
15331547@unittest .skipUnless (threading , 'Threading required for this test.' )
15341548class DatagramHandlerTest (BaseTest ):
@@ -1543,9 +1557,17 @@ def setUp(self):
15431557 """Set up a UDP server to receive log messages, and a DatagramHandler
15441558 pointing to that server's address and port."""
15451559 BaseTest .setUp (self )
1546- self .server = server = self .server_class (self .address ,
1547- self .handle_datagram , 0.01 )
1548- server .start ()
1560+ # Issue #29177: deal with errors that happen during setup
1561+ self .server = self .sock_hdlr = self .server_exception = None
1562+ try :
1563+ self .server = server = self .server_class (self .address ,
1564+ self .handle_datagram , 0.01 )
1565+ server .start ()
1566+ # Uncomment next line to test error recovery in setUp()
1567+ # raise OSError('dummy error raised')
1568+ except OSError as e :
1569+ self .server_exception = e
1570+ return
15491571 server .ready .wait ()
15501572 hcls = logging .handlers .DatagramHandler
15511573 if isinstance (server .server_address , tuple ):
@@ -1560,9 +1582,11 @@ def setUp(self):
15601582 def tearDown (self ):
15611583 """Shutdown the UDP server."""
15621584 try :
1563- self .server .stop (2.0 )
1564- self .root_logger .removeHandler (self .sock_hdlr )
1565- self .sock_hdlr .close ()
1585+ if self .server :
1586+ self .server .stop (2.0 )
1587+ if self .sock_hdlr :
1588+ self .root_logger .removeHandler (self .sock_hdlr )
1589+ self .sock_hdlr .close ()
15661590 finally :
15671591 BaseTest .tearDown (self )
15681592
@@ -1576,6 +1600,8 @@ def handle_datagram(self, request):
15761600
15771601 def test_output (self ):
15781602 # The log message sent to the DatagramHandler is properly received.
1603+ if self .server_exception :
1604+ self .skipTest (self .server_exception )
15791605 logger = logging .getLogger ("udp" )
15801606 logger .error ("spam" )
15811607 self .handled .wait ()
@@ -1600,7 +1626,7 @@ def setUp(self):
16001626
16011627 def tearDown (self ):
16021628 DatagramHandlerTest .tearDown (self )
1603- os . remove (self .address )
1629+ support . unlink (self .address )
16041630
16051631@unittest .skipUnless (threading , 'Threading required for this test.' )
16061632class SysLogHandlerTest (BaseTest ):
@@ -1615,9 +1641,17 @@ def setUp(self):
16151641 """Set up a UDP server to receive log messages, and a SysLogHandler
16161642 pointing to that server's address and port."""
16171643 BaseTest .setUp (self )
1618- self .server = server = self .server_class (self .address ,
1619- self .handle_datagram , 0.01 )
1620- server .start ()
1644+ # Issue #29177: deal with errors that happen during setup
1645+ self .server = self .sl_hdlr = self .server_exception = None
1646+ try :
1647+ self .server = server = self .server_class (self .address ,
1648+ self .handle_datagram , 0.01 )
1649+ server .start ()
1650+ # Uncomment next line to test error recovery in setUp()
1651+ # raise OSError('dummy error raised')
1652+ except OSError as e :
1653+ self .server_exception = e
1654+ return
16211655 server .ready .wait ()
16221656 hcls = logging .handlers .SysLogHandler
16231657 if isinstance (server .server_address , tuple ):
@@ -1630,11 +1664,13 @@ def setUp(self):
16301664 self .handled = threading .Event ()
16311665
16321666 def tearDown (self ):
1633- """Shutdown the UDP server."""
1667+ """Shutdown the server."""
16341668 try :
1635- self .server .stop (2.0 )
1636- self .root_logger .removeHandler (self .sl_hdlr )
1637- self .sl_hdlr .close ()
1669+ if self .server :
1670+ self .server .stop (2.0 )
1671+ if self .sl_hdlr :
1672+ self .root_logger .removeHandler (self .sl_hdlr )
1673+ self .sl_hdlr .close ()
16381674 finally :
16391675 BaseTest .tearDown (self )
16401676
@@ -1643,6 +1679,8 @@ def handle_datagram(self, request):
16431679 self .handled .set ()
16441680
16451681 def test_output (self ):
1682+ if self .server_exception :
1683+ self .skipTest (self .server_exception )
16461684 # The log message sent to the SysLogHandler is properly received.
16471685 logger = logging .getLogger ("slh" )
16481686 logger .error ("sp\xe4 m" )
@@ -1675,7 +1713,7 @@ def setUp(self):
16751713
16761714 def tearDown (self ):
16771715 SysLogHandlerTest .tearDown (self )
1678- os . remove (self .address )
1716+ support . unlink (self .address )
16791717
16801718@unittest .skipUnless (threading , 'Threading required for this test.' )
16811719class HTTPHandlerTest (BaseTest ):
0 commit comments