[Python-checkins] r53631 - sandbox/trunk/import_in_py/test_controlled_importlib.py
brett.cannon
python-checkins at python.org
Sat Feb 3 23:44:49 CET 2007
Author: brett.cannon
Date: Sat Feb 3 23:44:47 2007
New Revision: 53631
Modified:
sandbox/trunk/import_in_py/test_controlled_importlib.py
Log:
Test whitelisting of frozen modules. Also use frozen modules to test that
inra-package relative importing does not break past whitelisting.
Modified: sandbox/trunk/import_in_py/test_controlled_importlib.py
==============================================================================
--- sandbox/trunk/import_in_py/test_controlled_importlib.py (original)
+++ sandbox/trunk/import_in_py/test_controlled_importlib.py Sat Feb 3 23:44:47 2007
@@ -1,7 +1,7 @@
import controlled_importlib
import mock_importlib
-from contextlib import contextmanager
+from contextlib import contextmanager, nested
import StringIO
import sys
import unittest
@@ -127,13 +127,25 @@
try:
cached = []
for name in modules:
- cached.append(sys.modules[name])
- del sys.modules[name]
+ if name in sys.modules:
+ cached.append(sys.modules[name])
+ del sys.modules[name]
yield
finally:
for name, module in zip(modules, cached):
sys.modules[name] = module
+ at contextmanager
+def temp_setattr(obj, attribute, value):
+ """Temporarily set an attribute on an object."""
+ try:
+ if hasattr(obj, attribute):
+ old_value = getattr(obj, attribute)
+ setattr(obj, attribute, value)
+ yield value
+ finally:
+ setattr(obj, attribute, old_value)
+
class ControlledImportMethodTests(unittest.TestCase):
@@ -171,19 +183,27 @@
module = mock_importlib.MockModule()
module_name = '.block'
with mutate_sys_modules(module, module_name):
- self.failUnlessRaises(ImportError, import_, module_name, {}, {}, 0)
+ self.failUnlessRaises(ImportError, import_, module_name, level=0)
def test_builtin_whitelisting(self):
whitelist = sys.builtin_module_names[0]
blacklist = sys.builtin_module_names[1]
with remove_from_sys_modules(whitelist, blacklist):
import_ = controlled_importlib.ControlledImport([whitelist])
- module = import_(whitelist, {}, {}, 0)
+ module = import_(whitelist, level=0)
self.failUnlessEqual(module.__name__, whitelist)
- self.failUnlessRaises(ImportError, import_, blacklist, {}, {}, 0)
+ self.failUnlessRaises(ImportError, import_, blacklist, level=0)
def test_frozen_whitelisting(self):
- pass
+ whitelist = '__phello__'
+ blacklist = ('__hello__', '__phello__.spam')
+ with nested(temp_setattr(sys, 'stdout', StringIO.StringIO()),
+ remove_from_sys_modules(whitelist, *blacklist)):
+ import_ = controlled_importlib.ControlledImport((), [whitelist])
+ module = import_(whitelist, level=0)
+ self.failUnlessEqual(module.__name__, whitelist)
+ for blacklisted in blacklist:
+ self.failUnlessRaises(ImportError, import_, blacklisted, level=0)
def test_extension_whitelisting(self):
pass
@@ -201,6 +221,20 @@
# XXX check both modules, packages, and submodules.
pass
+ def test_relative_import(self):
+ # A relative import within a package should not be able to circumvent
+ # whitelisting.
+ whitelist ='__phello__'
+ blacklist = '__phello__.spam'
+ blacklist_module = blacklist.split('.')[1]
+ with nested(temp_setattr(sys, 'stdout', StringIO.StringIO()),
+ remove_from_sys_modules(whitelist, blacklist)):
+ import_ = controlled_importlib.ControlledImport((), [whitelist])
+ pkg = import_(whitelist, level=0)
+ pkg_fromlist = import_('', pkg.__dict__, {}, [blacklist_module], 1)
+ assert pkg_fromlist.__name__ == whitelist
+ self.failUnless(not hasattr(pkg_fromlist, blacklist_module))
+
def test_main():
test_support.run_unittest(WhitelistTests,
More information about the Python-checkins
mailing list