Implemented basic CLI.bootstrap(); added corresponding unit tests

This commit is contained in:
Jason Gerard DeRose
2008-10-27 15:19:49 -06:00
parent 17fd9cc431
commit e6254026fe
3 changed files with 35 additions and 29 deletions

View File

@@ -396,28 +396,19 @@ class CLI(object):
def bootstrap(self):
self.__doing('bootstrap')
self.parse_globals()
# if options.interactive == True:
# self.__all_interactive = True
# elif options.interactive == False:
# self.__not_interactive = True
# if options.verbose != None:
# self.api.env.verbose = True
# if options.environment:
# env_dict = {}
# for a in options.environment.split(','):
# a = a.split('=', 1)
# if len(a) < 2:
# parser.error('badly specified environment string,'\
# 'use var1=val1[,var2=val2]..')
# env_dict[a[0].strip()] = a[1].strip()
# self.api.env.update(env_dict, True)
# if options.config_file:
# self.api.env.update(read_config(options.config_file), True)
# else:
# self.api.env.update(read_config(), True)
# return args
self.api.env.verbose = self.options.verbose
if self.options.config_file:
self.api.env.conf = self.options.config_file
overrides = {}
if self.options.environment:
for a in self.options.environment.split(','):
a = a.split('=', 1)
if len(a) < 2:
parser.error('badly specified environment string,'\
'use var1=val1[,var2=val2]..')
overrides[a[0].strip()] = a[1].strip()
overrides['context'] = 'cli'
self.api.bootstrap(**overrides)
def get_usage(self, cmd):
return ' '.join(self.get_usage_iter(cmd))

View File

@@ -714,7 +714,7 @@ class API(DictProxy):
self.__d = dict()
self.__done = set()
self.register = Registrar(*allowed)
self.env = Env
self.env = Env()
super(API, self).__init__(self.__d)
def __doing(self, name):
@@ -736,6 +736,7 @@ class API(DictProxy):
Initialize environment variables needed by built-in plugins.
"""
self.__doing('bootstrap')
self.env._bootstrap(**overrides)
def load_plugins(self, dry_run=False):
"""

View File

@@ -22,6 +22,7 @@ Test the `ipalib.cli` module.
"""
from tests.util import raises, getitem, no_set, no_del, read_only, ClassChecker
from tests.util import TempHome
from ipalib import cli, plugable, frontend, backend
@@ -81,7 +82,8 @@ class test_CLI(ClassChecker):
"""
_cls = cli.CLI
def new(self, argv):
def new(self, argv=tuple()):
home = TempHome()
api = plugable.API(
frontend.Command,
frontend.Object,
@@ -90,17 +92,18 @@ class test_CLI(ClassChecker):
frontend.Application,
backend.Backend,
)
api.env.in_tree = True
o = self.cls(api, argv)
assert o.api is api
return o
return (o, api, home)
def test_init(self):
"""
Test the `ipalib.cli.CLI.__init__` method.
"""
argv = ['-v', 'user-add', '--first=Jonh', '--last=Doe']
o = self.new(argv)
assert type(o.api) is plugable.API
(o, api, home) = self.new(argv)
assert o.api is api
assert o.argv == tuple(argv)
def test_parse_globals(self):
@@ -108,7 +111,7 @@ class test_CLI(ClassChecker):
Test the `ipalib.cli.CLI.parse_globals` method.
"""
# Test with empty argv
o = self.new([])
(o, api, home) = self.new()
assert not hasattr(o, 'options')
assert not hasattr(o, 'cmd_argv')
assert o.isdone('parse_globals') is False
@@ -125,7 +128,7 @@ class test_CLI(ClassChecker):
# Test with a populated argv
argv = ('-a', '-n', '-v', '-c', '/my/config.conf', '-e', 'my_key=my_val')
cmd_argv = ('user-add', '--first', 'John', '--last', 'Doe')
o = self.new(argv + cmd_argv)
(o, api, home) = self.new(argv + cmd_argv)
assert not hasattr(o, 'options')
assert not hasattr(o, 'cmd_argv')
assert o.isdone('parse_globals') is False
@@ -144,3 +147,14 @@ class test_CLI(ClassChecker):
"""
Test the `ipalib.cli.CLI.bootstrap` method.
"""
(o, api, home) = self.new()
keys = tuple(api.env)
assert o.isdone('parse_globals') is False
assert o.isdone('bootstrap') is False
o.bootstrap()
assert o.isdone('parse_globals') is True
assert o.isdone('bootstrap') is True
e = raises(StandardError, o.bootstrap)
assert str(e) == 'CLI.bootstrap() already called'
assert api.env.verbose is False
assert api.env.context == 'cli'