synergy-service/synergy/tests/unit/test_client_shell.py
Lisa Zangrando 51e6dde4e5 Fixes on the authorization mechanism
This commit fixes some errors introduced with the support for the
authorization in Synergy. The files involved are: service.py and
shell.py and related unit tests.

Change-Id: I84587e48927307d85b9a3f96ea49154805da7bcd
Sem-Ver: bugfix
2017-07-18 07:49:05 +00:00

197 lines
7.4 KiB
Python

# coding: utf-8
#
# 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.
"""
Test the shell.
"""
import mock
from argparse import Namespace
from synergy.client import keystone_v3
from synergy.client.shell import main
from synergy.tests import base
class TestHTTPCommand(base.TestCase):
def setUp(self):
super(TestHTTPCommand, self).setUp()
@mock.patch('synergy.client.command.ManagerCommand.execute')
@mock.patch('sys.argv')
def test_create_keystone_client(self, mock_argv, _mock_httpcmd):
"""Check success when all parameters are filled."""
args = [
'--os-username', 'username',
'--os-password', 'password',
'--os-user-domain-id', 'user_domain_id',
'--os-user-domain-name', 'user_domain_name',
'--os-project-name', 'project_name',
'--os-project-domain-id', 'project_domain_id',
'--os-project-domain-name', 'project_domain_name',
'--os-auth-url', 'auth_url',
'--os-cacert', 'cacert',
'manager', 'list']
mock_argv.__getitem__.return_value = args
with mock.patch.object(keystone_v3, 'KeystoneClient') as m:
main()
m.assert_called_once_with(
auth_url='auth_url',
username='username',
password='password',
ca_cert='cacert',
user_domain_id='user_domain_id',
user_domain_name='user_domain_name',
project_name='project_name',
project_domain_id='project_domain_id',
project_domain_name='project_domain_name')
@mock.patch('synergy.client.command.ManagerCommand.execute')
@mock.patch('sys.argv')
def test_no_username(self, mock_argv, _mock_httpcmd):
"""CLI should exit if no username is specified."""
args = [
'--os-password', 'password',
'--os-user-domain-id', 'user_domain_id',
'--os-user-domain-name', 'user_domain_name',
'--os-project-name', 'project_name',
'--os-project-domain-id', 'project_domain_id',
'--os-project-domain-name', 'project_domain_name',
'--os-auth-url', 'auth_url',
'--os-cacert', 'cacert',
'manager', 'list']
mock_argv.__getitem__.return_value = args
with mock.patch('sys.exit') as m:
main()
m.assert_called_once_with(1)
@mock.patch('synergy.client.command.ManagerCommand.execute')
@mock.patch('sys.argv')
def test_no_password(self, mock_argv, _mock_httpcmd):
"""CLI should exit if no password is specified."""
args = [
'--os-username', 'username',
'--os-user-domain-id', 'user_domain_id',
'--os-user-domain-name', 'user_domain_name',
'--os-project-name', 'project_name',
'--os-project-domain-id', 'project_domain_id',
'--os-project-domain-name', 'project_domain_name',
'--os-auth-url', 'auth_url',
'--os-cacert', 'cacert',
'manager', 'list']
mock_argv.__getitem__.return_value = args
with mock.patch('sys.exit') as m:
main()
m.assert_called_once_with(1)
@mock.patch('synergy.client.command.ManagerCommand.execute')
@mock.patch('sys.argv')
def test_no_project_name(self, mock_argv, _mock_httpcmd):
"""CLI should exit if no project name is specified."""
args = [
'--os-username', 'username',
'--os-password', 'password',
'--os-user-domain-id', 'user_domain_id',
'--os-user-domain-name', 'user_domain_name',
'--os-project-domain-id', 'project_domain_id',
'--os-project-domain-name', 'project_domain_name',
'--os-auth-url', 'auth_url',
'--os-cacert', 'cacert',
'manager', 'list']
mock_argv.__getitem__.return_value = args
with mock.patch('sys.exit') as m:
main()
m.assert_called_once_with(1)
@mock.patch('synergy.client.command.ManagerCommand.execute')
@mock.patch('sys.argv')
def test_no_auth_url(self, mock_argv, _mock_httpcmd):
"""CLI should exit if no auth URL is specified."""
args = [
'--os-username', 'username',
'--os-password', 'password',
'--os-user-domain-id', 'user_domain_id',
'--os-user-domain-name', 'user_domain_name',
'--os-project-name', 'project_name',
'--os-project-domain-id', 'project_domain_id',
'--os-project-domain-name', 'project_domain_name',
'--os-cacert', 'cacert',
'manager', 'list']
mock_argv.__getitem__.return_value = args
with mock.patch('sys.exit') as m:
main()
m.assert_called_once_with(1)
@mock.patch('synergy.client.command.ManagerCommand.execute')
@mock.patch('sys.argv')
def test_minimum_parameters(self, mock_argv, _mock_httpcmd):
"""CLI should not exit when the required parameters are filled."""
args = [
'--os-username', 'username',
'--os-password', 'password',
'--os-project-name', 'project_name',
'--os-auth-url', 'auth_url',
'manager', 'list']
mock_argv.__getitem__.return_value = args
# Bypass HTTP call
with mock.patch.object(keystone_v3, 'KeystoneClient'):
with mock.patch('sys.exit') as sys_exit:
main()
sys_exit.assert_not_called()
@mock.patch('synergy.client.command.ManagerCommand.execute')
@mock.patch('sys.argv')
def test_bypass_url(self, mock_argv, mock_httpcmd):
"""Filling bypass-url should set other params as defaults."""
args = [
'--os-username', 'username',
'--os-password', 'password',
'--os-user-domain-id', 'user_domain_id',
'--os-user-domain-name', 'user_domain_name',
'--os-project-name', 'project_name',
'--os-project-domain-id', 'project_domain_id',
'--os-project-domain-name', 'project_domain_name',
'--os-cacert', 'cacert',
'--os-auth-url', 'auth_url',
'--bypass-url', 'bypass_url',
'manager', 'list']
mock_argv.__getitem__.return_value = args
with mock.patch.object(keystone_v3, 'KeystoneClient'):
main()
ns = Namespace(
bypass_url='bypass_url',
command='list',
command_name='manager',
debug=False,
os_auth_url='auth_url',
os_cacert='cacert',
os_password='password',
os_project_domain_id='project_domain_id',
os_project_domain_name='project_domain_name',
os_project_id=None,
os_project_name='project_name',
os_user_domain_id='user_domain_id',
os_user_domain_name='user_domain_name',
os_username='username')
mock_httpcmd.assert_called_once_with("bypass_url", ns)