Skip to content

ftp tests in test_urllib2net should skip on unreachable network #87730

Closed

Description

@carljm
BPO 43564
Nosy @orsenthil, @giampaolo, @carljm, @brandtbucher
PRs
  • bpo-43564: preserve original exception in args of FTP URLError #24938
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2021-03-19.21:21:09.420>
    labels = ['type-bug', 'tests', '3.10']
    title = 'ftp tests in test_urllib2net should skip on unreachable network'
    updated_at = <Date 2021-06-23.19:18:02.469>
    user = 'https://github.com/carljm'

    bugs.python.org fields:

    activity = <Date 2021-06-23.19:18:02.469>
    actor = 'brandtbucher'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Tests']
    creation = <Date 2021-03-19.21:21:09.420>
    creator = 'carljm'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 43564
    keywords = ['patch']
    message_count = 2.0
    messages = ['389115', '389116']
    nosy_count = 4.0
    nosy_names = ['orsenthil', 'giampaolo.rodola', 'carljm', 'brandtbucher']
    pr_nums = ['24938']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue43564'
    versions = ['Python 3.10']

    Activity

    1. carljm commented on Mar 19, 2021

      @carljm
      MemberAuthor

      In general it seems the CPython test suite takes care to skip instead of failing networked tests when the network is unavailable (c.f. support.transient_internet test helper).

      In this case of the 5 FTP tests in test_urllib2net (that is, test_ftp, test_ftp_basic, test_ftp_default_timeout, test_ftp_no_timeout, and test_ftp_timeout), even though they use support_transient_internet, they still fail if the network is unavailable.

      The reason is that they make calls which end up raising an exception in the form URLError("ftp error: OSError(101, 'Network is unreachable')" -- the original OSError is flattened into the exception string message, but is otherwise not in the exception args. This means that transient_network does not detect it as a suppressable exception.

      It seems like many uses of URLError in urllib pass the original OSError directly to URLError.__init__(), which means it ends up in args and the unwrapping code in transient_internet is able to find the original OSError. But the ftp code instead directly interpolates the OSError into a new message string.

    2. added
      testsTests in the Lib/test dir
      type-bugAn unexpected behavior, bug, or error
      on Mar 19, 2021
    3. changed the title [-]some tests in test_urllib2net fail instead of skipping on unreachable network[/-] [+]ftp tests in test_urllib2net fail instead of skipping on unreachable network[/+] on Mar 19, 2021
    4. changed the title [-]some tests in test_urllib2net fail instead of skipping on unreachable network[/-] [+]ftp tests in test_urllib2net fail instead of skipping on unreachable network[/+] on Mar 19, 2021
    5. carljm commented on Mar 19, 2021

      @carljm
      MemberAuthor

      Created a PR that fixes this by being more consistent in how urllib wraps network errors. If there are backward-compatibility concerns with this change, another option could be some really ugly regex-matching code in test.support.transient_internet.

    6. changed the title [-]ftp tests in test_urllib2net fail instead of skipping on unreachable network[/-] [+]ftp tests in test_urllib2net should skip on unreachable network[/+] on Mar 26, 2021
    7. changed the title [-]ftp tests in test_urllib2net fail instead of skipping on unreachable network[/-] [+]ftp tests in test_urllib2net should skip on unreachable network[/+] on Mar 26, 2021
    8. transferred this issue fromon Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      3.10 (EOL)end of lifetestsTests in the Lib/test dirtype-bugAn unexpected behavior, bug, or error

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions