def test_connect_using_sslcontext_verified(self):
        with support.transient_internet(self.testServer):
            can_verify = check_ssl_verifiy(self.testServer, self.remotePort)
            if not can_verify:
                self.skipTest("SSL certificate can't be verified")

        support.get_attribute(smtplib, 'SMTP_SSL')
        context = ssl.create_default_context()
        with support.transient_internet(self.testServer):
            server = smtplib.SMTP_SSL(self.testServer,
                                      self.remotePort,
                                      context=context)
            server.ehlo()
            server.quit()
 def test_http_basic(self):
     self.assertIsNone(socket.getdefaulttimeout())
     url = "http://www.example.com"
     with support.transient_internet(url, timeout=None):
         u = _urlopen_with_retry(url)
         self.addCleanup(u.close)
         self.assertIsNone(u.fp.raw._sock.gettimeout())
 def test_redirect_url_withfrag(self):
     redirect_url_with_frag = "http://www.pythontest.net/redir/with_frag/"
     with support.transient_internet(redirect_url_with_frag):
         req = urllib.request.Request(redirect_url_with_frag)
         res = urllib.request.urlopen(req)
         self.assertEqual(res.geturl(),
                          "http://www.pythontest.net/elsewhere/#frag")
 def test_urlwithfrag(self):
     urlwith_frag = "http://www.pythontest.net/index.html#frag"
     with support.transient_internet(urlwith_frag):
         req = urllib.request.Request(urlwith_frag)
         res = urllib.request.urlopen(req)
         self.assertEqual(res.geturl(),
                          "http://www.pythontest.net/index.html#frag")
예제 #5
0
 def urlretrieve(self, *args, **kwargs):
     resource = args[0]
     with support.transient_internet(resource):
         file_location, info = urllib.request.urlretrieve(*args, **kwargs)
         try:
             yield file_location, info
         finally:
             support.unlink(file_location)
예제 #6
0
 def urlopen(self, *args, **kwargs):
     resource = args[0]
     with support.transient_internet(resource):
         r = urllib.request.urlopen(*args, **kwargs)
         try:
             yield r
         finally:
             r.close()
 def test_logincapa(self):
     with transient_internet(self.host):
         for cap in self.server.capabilities:
             self.assertIsInstance(cap, str)
         self.assertIn('LOGINDISABLED', self.server.capabilities)
         self.assertIn('AUTH=ANONYMOUS', self.server.capabilities)
         rs = self.server.login(self.username, self.password)
         self.assertEqual(rs[0], 'OK')
 def test_ssl_context_certfile_exclusive(self):
     with transient_internet(self.host):
         self.assertRaises(ValueError,
                           self.imap_class,
                           self.host,
                           self.port,
                           certfile=CERTFILE,
                           ssl_context=self.create_ssl_context())
def resolve_address(host, port):
    """Resolve an (host, port) to an address.

    We must perform name resolution before timeout tests, otherwise it will be
    performed by connect().
    """
    with support.transient_internet(host):
        return socket.getaddrinfo(host, port, socket.AF_INET,
                                  socket.SOCK_STREAM)[0][4]
 def test_connect_using_sslcontext(self):
     context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
     support.get_attribute(smtplib, 'SMTP_SSL')
     with support.transient_internet(self.testServer):
         server = smtplib.SMTP_SSL(self.testServer,
                                   self.remotePort,
                                   context=context)
         server.ehlo()
         server.quit()
 def test_close(self):
     # calling .close() on urllib2's response objects should close the
     # underlying socket
     url = "http://www.example.com/"
     with support.transient_internet(url):
         response = _urlopen_with_retry(url)
         sock = response.fp
         self.assertFalse(sock.closed)
         response.close()
         self.assertTrue(sock.closed)
 def test_ftp_no_timeout(self):
     self.assertIsNone(socket.getdefaulttimeout())
     with support.transient_internet(self.FTP_HOST):
         socket.setdefaulttimeout(60)
         try:
             u = _urlopen_with_retry(self.FTP_HOST, timeout=None)
             self.addCleanup(u.close)
         finally:
             socket.setdefaulttimeout(None)
         self.assertIsNone(u.fp.fp.raw._sock.gettimeout())
 def test_http_default_timeout(self):
     self.assertIsNone(socket.getdefaulttimeout())
     url = "http://www.example.com"
     with support.transient_internet(url):
         socket.setdefaulttimeout(60)
         try:
             u = _urlopen_with_retry(url)
             self.addCleanup(u.close)
         finally:
             socket.setdefaulttimeout(None)
         self.assertEqual(u.fp.raw._sock.gettimeout(), 60)
예제 #14
0
 def test_getcode(self):
     # test getcode() with the fancy opener to get 404 error codes
     URL = self.url + "XXXinvalidXXX"
     with support.transient_internet(URL):
         with self.assertWarns(DeprecationWarning):
             open_url = urllib.request.FancyURLopener().open(URL)
         try:
             code = open_url.getcode()
         finally:
             open_url.close()
         self.assertEqual(code, 404)
 def test_custom_headers(self):
     url = "http://www.example.com"
     with support.transient_internet(url):
         opener = urllib.request.build_opener()
         request = urllib.request.Request(url)
         self.assertFalse(request.header_items())
         opener.open(request)
         self.assertTrue(request.header_items())
         self.assertTrue(request.has_header('User-agent'))
         request.add_header('User-Agent', 'Test-Agent')
         opener.open(request)
         self.assertEqual(request.get_header('User-agent'), 'Test-Agent')
 def test_connect_starttls(self):
     support.get_attribute(smtplib, 'SMTP_SSL')
     context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
     with support.transient_internet(self.testServer):
         server = smtplib.SMTP(self.testServer, self.remotePort)
         try:
             server.starttls(context=context)
         except smtplib.SMTPException as e:
             if e.args[0] == 'STARTTLS extension not supported by server.':
                 unittest.skip(e.args[0])
             else:
                 raise
         server.ehlo()
         server.quit()
    def test_sites_no_connection_close(self):
        # Some sites do not send Connection: close header.
        # Verify that those work properly. (#issue12576)

        URL = 'http://www.imdb.com'  # mangles Connection:close

        with support.transient_internet(URL):
            try:
                with urllib.request.urlopen(URL) as res:
                    pass
            except ValueError as e:
                self.fail("urlopen failed for site not sending \
                           Connection:close")
            else:
                self.assertTrue(res)

            req = urllib.request.urlopen(URL)
            res = req.read()
            self.assertTrue(res)
    def _test_urls(self, urls, handlers, retry=True):
        import time
        import logging
        debug = logging.getLogger("test_urllib2").debug

        urlopen = urllib.request.build_opener(*handlers).open
        if retry:
            urlopen = _wrap_with_retry_thrice(urlopen, urllib.error.URLError)

        for url in urls:
            with self.subTest(url=url):
                if isinstance(url, tuple):
                    url, req, expected_err = url
                else:
                    req = expected_err = None

                with support.transient_internet(url):
                    try:
                        f = urlopen(url, req, TIMEOUT)
                    # urllib.error.URLError is a subclass of OSError
                    except OSError as err:
                        if expected_err:
                            msg = (
                                "Didn't get expected error(s) %s for %s %s, got %s: %s"
                                % (expected_err, url, req, type(err), err))
                            self.assertIsInstance(err, expected_err, msg)
                        else:
                            raise
                    else:
                        try:
                            with support.time_out, \
                                 support.socket_peer_reset, \
                                 support.ioerror_peer_reset:
                                buf = f.read()
                                debug("read %d bytes" % len(buf))
                        except socket.timeout:
                            print("<timeout: %s>" % url, file=sys.stderr)
                        f.close()
                time.sleep(0.1)
    def testConnectTimeout(self):
        # Testing connect timeout is tricky: we need to have IP connectivity
        # to a host that silently drops our packets.  We can't simulate this
        # from Python because it's a function of the underlying TCP/IP stack.
        # So, the following Snakebite host has been defined:
        blackhole = resolve_address('blackhole.snakebite.net', 56666)

        # Blackhole has been configured to silently drop any incoming packets.
        # No RSTs (for TCP) or ICMP UNREACH (for UDP/ICMP) will be sent back
        # to hosts that attempt to connect to this address: which is exactly
        # what we need to confidently test connect timeout.

        # However, we want to prevent false positives.  It's not unreasonable
        # to expect certain hosts may not be able to reach the blackhole, due
        # to firewalling or general network configuration.  In order to improve
        # our confidence in testing the blackhole, a corresponding 'whitehole'
        # has also been set up using one port higher:
        whitehole = resolve_address('whitehole.snakebite.net', 56667)

        # This address has been configured to immediately drop any incoming
        # packets as well, but it does it respectfully with regards to the
        # incoming protocol.  RSTs are sent for TCP packets, and ICMP UNREACH
        # is sent for UDP/ICMP packets.  This means our attempts to connect to
        # it should be met immediately with ECONNREFUSED.  The test case has
        # been structured around this premise: if we get an ECONNREFUSED from
        # the whitehole, we proceed with testing connect timeout against the
        # blackhole.  If we don't, we skip the test (with a message about not
        # getting the required RST from the whitehole within the required
        # timeframe).

        # For the records, the whitehole/blackhole configuration has been set
        # up using the 'pf' firewall (available on BSDs), using the following:
        #
        #   ext_if="bge0"
        #
        #   blackhole_ip="35.8.247.6"
        #   whitehole_ip="35.8.247.6"
        #   blackhole_port="56666"
        #   whitehole_port="56667"
        #
        #   block return in log quick on $ext_if proto { tcp udp } \
        #       from any to $whitehole_ip port $whitehole_port
        #   block drop in log quick on $ext_if proto { tcp udp } \
        #       from any to $blackhole_ip port $blackhole_port
        #

        skip = True
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # Use a timeout of 3 seconds.  Why 3?  Because it's more than 1, and
        # less than 5.  i.e. no particular reason.  Feel free to tweak it if
        # you feel a different value would be more appropriate.
        timeout = 3
        sock.settimeout(timeout)
        try:
            sock.connect((whitehole))
        except socket.timeout:
            pass
        except OSError as err:
            if err.errno == errno.ECONNREFUSED:
                skip = False
        finally:
            sock.close()
            del sock

        if skip:
            self.skipTest(
                "We didn't receive a connection reset (RST) packet from "
                "{}:{} within {} seconds, so we're unable to test connect "
                "timeout against the corresponding {}:{} (which is "
                "configured to silently drop packets).".format(
                    whitehole[0],
                    whitehole[1],
                    timeout,
                    blackhole[0],
                    blackhole[1],
                ))

        # All that hard work just to test if connect times out in 0.001s ;-)
        self.addr_remote = blackhole
        with support.transient_internet(self.addr_remote[0]):
            self._sock_operation(1, 0.001, 'connect', self.addr_remote)
 def test_logout(self):
     with transient_internet(self.host):
         _server = self.imap_class(self.host, self.port)
         rs = _server.logout()
         self.assertEqual(rs[0], 'BYE')
 def test_logincapa(self):
     with transient_internet(self.host):
         _server = self.imap_class(self.host, self.port)
         self.check_logincapa(_server)
 def setUp(self):
     super().setUp()
     with transient_internet(self.host):
         rs = self.server.starttls()
         self.assertEqual(rs[0], 'OK')
 def test_logout(self):
     with transient_internet(self.host):
         rs = self.server.logout()
         self.server = None
         self.assertEqual(rs[0], 'BYE')
 def tearDown(self):
     if self.server is not None:
         with transient_internet(self.host):
             self.server.logout()
 def setUp(self):
     with transient_internet(self.host):
         self.server = self.imap_class(self.host, self.port)
예제 #26
0
 def setUpClass(cls):
     support.requires('network')
     with support.transient_internet(cls.base_url):
         cls.parser = urllib.robotparser.RobotFileParser(cls.robots_txt)
         cls.parser.read()
 def test_http_timeout(self):
     url = "http://www.example.com"
     with support.transient_internet(url):
         u = _urlopen_with_retry(url, timeout=120)
         self.addCleanup(u.close)
         self.assertEqual(u.fp.raw._sock.gettimeout(), 120)
예제 #28
0
 def testURLread(self):
     with support.transient_internet("www.example.com"):
         f = urllib.request.urlopen("http://www.example.com/")
         f.read()
 def test_ftp_timeout(self):
     with support.transient_internet(self.FTP_HOST):
         u = _urlopen_with_retry(self.FTP_HOST, timeout=60)
         self.addCleanup(u.close)
         self.assertEqual(u.fp.fp.raw._sock.gettimeout(), 60)
 def testRecvTimeout(self):
     # Test recv() timeout
     with support.transient_internet(self.addr_remote[0]):
         self.sock.connect(self.addr_remote)
         self._sock_operation(1, 1.5, 'recv', 1024)