|
1 | 1 | # coding: utf-8 |
2 | 2 | from __future__ import unicode_literals |
3 | 3 |
|
| 4 | +import os |
4 | 5 | import re |
5 | 6 | import json |
6 | 7 | import pickle |
7 | 8 | import textwrap |
8 | | -import unittest |
9 | 9 | import importlib |
| 10 | +import unittest.mock |
10 | 11 | import importlib_metadata |
11 | 12 |
|
12 | 13 | from . import fixtures |
@@ -193,6 +194,41 @@ def test_egg(self): |
193 | 194 | version('foo') |
194 | 195 |
|
195 | 196 |
|
| 197 | +class MissingSysPath(fixtures.OnSysPath, unittest.TestCase): |
| 198 | + site_dir = '/does-not-exist' |
| 199 | + |
| 200 | + def test_discovery(self): |
| 201 | + """ |
| 202 | + Discovering distributions should succeed even if |
| 203 | + there is an invalid path on sys.path. |
| 204 | + """ |
| 205 | + importlib_metadata.distributions() |
| 206 | + |
| 207 | + |
| 208 | +class InaccessibleSysPath(fixtures.OnSysPath, unittest.TestCase): |
| 209 | + site_dir = '/access-denied' |
| 210 | + |
| 211 | + def listdir(self, target, orig=os.listdir): |
| 212 | + """ |
| 213 | + Fake listdir raising an exception when access is denied. |
| 214 | + """ |
| 215 | + if target == self.site_dir: |
| 216 | + raise OSError(13, 'Permission denied') |
| 217 | + return orig(target) |
| 218 | + |
| 219 | + def setUp(self): |
| 220 | + super(InaccessibleSysPath, self).setUp() |
| 221 | + self.fixtures.enter_context( |
| 222 | + unittest.mock.patch('os.listdir', self.listdir)) |
| 223 | + |
| 224 | + def test_discovery(self): |
| 225 | + """ |
| 226 | + Discovering distributions should succeed even if |
| 227 | + there is an invalid path on sys.path. |
| 228 | + """ |
| 229 | + importlib_metadata.distributions() |
| 230 | + |
| 231 | + |
196 | 232 | class TestEntryPoints(unittest.TestCase): |
197 | 233 | def __init__(self, *args): |
198 | 234 | super(TestEntryPoints, self).__init__(*args) |
|
0 commit comments