Fixed bug with password prompt, added tests
Fixes: bug #1131237 Change-Id: Ifcd9543ed5ac9526e32025ff3acd51d36b27a224
This commit is contained in:
parent
39b6e00eed
commit
8ac304f7f5
@ -143,7 +143,7 @@ class SecretsHelper(object):
|
||||
return self.args.os_password
|
||||
if self._validate_string(self.args.apikey):
|
||||
return self.args.apikey
|
||||
verify_pass = utils.bool_from_str(utils.getenv("OS_VERIFY_PASSWORD"))
|
||||
verify_pass = utils.bool_from_str(utils.env("OS_VERIFY_PASSWORD"))
|
||||
return self._prompt_password(verify_pass)
|
||||
|
||||
@property
|
||||
|
@ -3,27 +3,35 @@ import re
|
||||
import sys
|
||||
|
||||
import fixtures
|
||||
import mock
|
||||
from testtools import matchers
|
||||
|
||||
import novaclient.client
|
||||
from novaclient import exceptions
|
||||
import novaclient.shell
|
||||
from tests import utils
|
||||
|
||||
FAKE_ENV = {'OS_USERNAME': 'username',
|
||||
'OS_PASSWORD': 'password',
|
||||
'OS_TENANT_NAME': 'tenant_name',
|
||||
'OS_AUTH_URL': 'http://no.where'}
|
||||
|
||||
|
||||
class ShellTest(utils.TestCase):
|
||||
|
||||
FAKE_ENV = {
|
||||
'OS_USERNAME': 'username',
|
||||
'OS_PASSWORD': 'password',
|
||||
'OS_TENANT_NAME': 'tenant_name',
|
||||
'OS_AUTH_URL': 'http://no.where',
|
||||
}
|
||||
def make_env(self, exclude=None):
|
||||
for var, val in FAKE_ENV.items():
|
||||
if var == exclude:
|
||||
continue
|
||||
self.useFixture(fixtures.EnvironmentVariable(var, val))
|
||||
|
||||
def setUp(self):
|
||||
super(ShellTest, self).setUp()
|
||||
for var in self.FAKE_ENV:
|
||||
self.useFixture(fixtures.EnvironmentVariable(var,
|
||||
self.FAKE_ENV[var]))
|
||||
self.useFixture(fixtures.MonkeyPatch(
|
||||
'novaclient.client.get_client_class',
|
||||
mock.MagicMock))
|
||||
self.nc_util = mock.patch('novaclient.utils.isunauthenticated').start()
|
||||
self.nc_util.return_value = False
|
||||
|
||||
def shell(self, argstr, exitcodes=(0,)):
|
||||
orig = sys.stdout
|
||||
@ -43,7 +51,6 @@ class ShellTest(utils.TestCase):
|
||||
stderr = sys.stderr.getvalue()
|
||||
sys.stderr.close()
|
||||
sys.stderr = orig_stderr
|
||||
|
||||
return (stdout, stderr)
|
||||
|
||||
def test_help_unknown_command(self):
|
||||
@ -80,3 +87,78 @@ class ShellTest(utils.TestCase):
|
||||
for r in required:
|
||||
self.assertThat((stdout + stderr),
|
||||
matchers.MatchesRegex(r, re.DOTALL | re.MULTILINE))
|
||||
|
||||
def test_help_no_options(self):
|
||||
required = [
|
||||
'.*?^usage: ',
|
||||
'.*?^\s+root-password\s+Change the root password',
|
||||
'.*?^See "nova help COMMAND" for help on a specific command',
|
||||
]
|
||||
stdout, stderr = self.shell('')
|
||||
for r in required:
|
||||
self.assertThat((stdout + stderr),
|
||||
matchers.MatchesRegex(r, re.DOTALL | re.MULTILINE))
|
||||
|
||||
def test_bash_completion(self):
|
||||
stdout, stderr = self.shell('bash-completion')
|
||||
# just check we have some output
|
||||
required = ['--matching help secgroup-delete-rule --priority']
|
||||
for r in required:
|
||||
self.assertThat((stdout + stderr),
|
||||
matchers.MatchesRegex(r, re.DOTALL | re.MULTILINE))
|
||||
|
||||
def test_no_username(self):
|
||||
required = ('You must provide a username'
|
||||
' via either --os-username or env[OS_USERNAME]',)
|
||||
self.make_env(exclude='OS_USERNAME')
|
||||
try:
|
||||
self.shell('list')
|
||||
except exceptions.CommandError, message:
|
||||
self.assertEqual(required, message.args)
|
||||
else:
|
||||
self.fail('CommandError not raised')
|
||||
|
||||
def test_no_tenant_name(self):
|
||||
required = ('You must provide a tenant name'
|
||||
' via either --os-tenant-name or env[OS_TENANT_NAME]',)
|
||||
self.make_env(exclude='OS_TENANT_NAME')
|
||||
try:
|
||||
self.shell('list')
|
||||
except exceptions.CommandError, message:
|
||||
self.assertEqual(required, message.args)
|
||||
else:
|
||||
self.fail('CommandError not raised')
|
||||
|
||||
def test_no_auth_url(self):
|
||||
required = ('You must provide an auth url'
|
||||
' via either --os-auth-url or env[OS_AUTH_URL] or'
|
||||
' specify an auth_system which defines a default url'
|
||||
' with --os-auth-system or env[OS_AUTH_SYSTEM',)
|
||||
self.make_env(exclude='OS_AUTH_URL')
|
||||
try:
|
||||
self.shell('list')
|
||||
except exceptions.CommandError, message:
|
||||
self.assertEqual(required, message.args)
|
||||
else:
|
||||
self.fail('CommandError not raised')
|
||||
|
||||
@mock.patch('sys.stdin', side_effect=mock.MagicMock)
|
||||
@mock.patch('getpass.getpass', return_value='password')
|
||||
def test_password(self, mock_getpass, mock_stdin):
|
||||
self.make_env(exclude='OS_PASSWORD')
|
||||
stdout, stderr = self.shell('list')
|
||||
self.assertEqual((stdout + stderr), '\n')
|
||||
|
||||
@mock.patch('sys.stdin', side_effect=mock.MagicMock)
|
||||
@mock.patch('getpass.getpass', side_effect=EOFError)
|
||||
def test_no_password(self, mock_getpass, mock_stdin):
|
||||
required = ('Expecting a password provided'
|
||||
' via either --os-password, env[OS_PASSWORD],'
|
||||
' or prompted response',)
|
||||
self.make_env(exclude='OS_PASSWORD')
|
||||
try:
|
||||
self.shell('list')
|
||||
except exceptions.CommandError, message:
|
||||
self.assertEqual(required, message.args)
|
||||
else:
|
||||
self.fail('CommandError not raised')
|
||||
|
Loading…
x
Reference in New Issue
Block a user