
There are many scenarios in different projects that end up needing this support. We should gently nudge everyone to move to Stevedore but can't mandate it by hiding these methods. Change-Id: Ie2783fabf52491a490c999728995da8e68e62cd8
119 lines
5.0 KiB
Python
119 lines
5.0 KiB
Python
# Copyright 2011 OpenStack Foundation.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import datetime
|
|
import sys
|
|
|
|
from oslotest import base as test_base
|
|
|
|
from oslo.utils import importutils
|
|
|
|
|
|
class ImportUtilsTest(test_base.BaseTestCase):
|
|
|
|
# NOTE(jkoelker) There has GOT to be a way to test this. But mocking
|
|
# __import__ is the devil. Right now we just make
|
|
# sure we can import something from the stdlib
|
|
def test_import_class(self):
|
|
dt = importutils.import_class('datetime.datetime')
|
|
self.assertEqual(sys.modules['datetime'].datetime, dt)
|
|
|
|
def test_import_bad_class(self):
|
|
self.assertRaises(ImportError, importutils.import_class,
|
|
'lol.u_mad.brah')
|
|
|
|
def test_import_module(self):
|
|
dt = importutils.import_module('datetime')
|
|
self.assertEqual(sys.modules['datetime'], dt)
|
|
|
|
def test_import_object_optional_arg_not_present(self):
|
|
obj = importutils.import_object('tests.fake.FakeDriver')
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver')
|
|
|
|
def test_import_object_optional_arg_present(self):
|
|
obj = importutils.import_object('tests.fake.FakeDriver',
|
|
first_arg=False)
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver')
|
|
|
|
def test_import_object_required_arg_not_present(self):
|
|
# arg 1 isn't optional here
|
|
self.assertRaises(TypeError, importutils.import_object,
|
|
'tests.fake.FakeDriver2')
|
|
|
|
def test_import_object_required_arg_present(self):
|
|
obj = importutils.import_object('tests.fake.FakeDriver2',
|
|
first_arg=False)
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver2')
|
|
|
|
# namespace tests
|
|
def test_import_object_ns_optional_arg_not_present(self):
|
|
obj = importutils.import_object_ns('tests', 'fake.FakeDriver')
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver')
|
|
|
|
def test_import_object_ns_optional_arg_present(self):
|
|
obj = importutils.import_object_ns('tests', 'fake.FakeDriver',
|
|
first_arg=False)
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver')
|
|
|
|
def test_import_object_ns_required_arg_not_present(self):
|
|
# arg 1 isn't optional here
|
|
self.assertRaises(TypeError, importutils.import_object_ns,
|
|
'tests', 'fake.FakeDriver2')
|
|
|
|
def test_import_object_ns_required_arg_present(self):
|
|
obj = importutils.import_object_ns('tests', 'fake.FakeDriver2',
|
|
first_arg=False)
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver2')
|
|
|
|
# namespace tests
|
|
def test_import_object_ns_full_optional_arg_not_present(self):
|
|
obj = importutils.import_object_ns('tests2',
|
|
'tests.fake.FakeDriver')
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver')
|
|
|
|
def test_import_object_ns_full_optional_arg_present(self):
|
|
obj = importutils.import_object_ns('tests2',
|
|
'tests.fake.FakeDriver',
|
|
first_arg=False)
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver')
|
|
|
|
def test_import_object_ns_full_required_arg_not_present(self):
|
|
# arg 1 isn't optional here
|
|
self.assertRaises(TypeError, importutils.import_object_ns,
|
|
'tests2', 'tests.fake.FakeDriver2')
|
|
|
|
def test_import_object_ns_full_required_arg_present(self):
|
|
obj = importutils.import_object_ns('tests2',
|
|
'tests.fake.FakeDriver2',
|
|
first_arg=False)
|
|
self.assertEqual(obj.__class__.__name__, 'FakeDriver2')
|
|
|
|
def test_import_object(self):
|
|
dt = importutils.import_object('datetime.time')
|
|
self.assertTrue(isinstance(dt, sys.modules['datetime'].time))
|
|
|
|
def test_import_object_with_args(self):
|
|
dt = importutils.import_object('datetime.datetime', 2012, 4, 5)
|
|
self.assertTrue(isinstance(dt, sys.modules['datetime'].datetime))
|
|
self.assertEqual(dt, datetime.datetime(2012, 4, 5))
|
|
|
|
def test_try_import(self):
|
|
dt = importutils.try_import('datetime')
|
|
self.assertEqual(sys.modules['datetime'], dt)
|
|
|
|
def test_try_import_returns_default(self):
|
|
foo = importutils.try_import('foo.bar')
|
|
self.assertIsNone(foo)
|