Change documented options to use dashes instead of underscores in option names. Continue to support old underscore names for backward compatibility for a release or two (TBD). Blueprint: command-options Change-Id: Ied0d325a9fdd32f80bf8c993887e1975aa6adf16
		
			
				
	
	
		
			325 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			325 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import os
 | 
						|
import mock
 | 
						|
import httplib2
 | 
						|
 | 
						|
from keystoneclient import shell as openstack_shell
 | 
						|
from keystoneclient.v2_0 import shell as shell_v2_0
 | 
						|
from keystoneclient import exceptions
 | 
						|
from tests import utils
 | 
						|
 | 
						|
 | 
						|
DEFAULT_USERNAME = 'username'
 | 
						|
DEFAULT_PASSWORD = 'password'
 | 
						|
DEFAULT_TENANT_ID = 'tenant_id'
 | 
						|
DEFAULT_TENANT_NAME = 'tenant_name'
 | 
						|
DEFAULT_AUTH_URL = 'http://127.0.0.1:5000/v2.0/'
 | 
						|
 | 
						|
 | 
						|
class ShellTest(utils.TestCase):
 | 
						|
 | 
						|
    # Patch os.environ to avoid required auth info.
 | 
						|
    def setUp(self):
 | 
						|
        global _old_env
 | 
						|
        fake_env = {
 | 
						|
            'OS_USERNAME': DEFAULT_USERNAME,
 | 
						|
            'OS_PASSWORD': DEFAULT_PASSWORD,
 | 
						|
            'OS_TENANT_ID': DEFAULT_TENANT_ID,
 | 
						|
            'OS_TENANT_NAME': DEFAULT_TENANT_NAME,
 | 
						|
            'OS_AUTH_URL': DEFAULT_AUTH_URL,
 | 
						|
        }
 | 
						|
        _old_env, os.environ = os.environ, fake_env.copy()
 | 
						|
 | 
						|
        # Make a fake shell object, a helping wrapper to call it, and a quick
 | 
						|
        # way of asserting that certain API calls were made.
 | 
						|
        global shell, _shell, assert_called, assert_called_anytime
 | 
						|
        _shell = openstack_shell.OpenStackIdentityShell()
 | 
						|
        shell = lambda cmd: _shell.main(cmd.split())
 | 
						|
 | 
						|
    def tearDown(self):
 | 
						|
        global _old_env
 | 
						|
        os.environ = _old_env
 | 
						|
 | 
						|
    def test_help_unknown_command(self):
 | 
						|
        self.assertRaises(exceptions.CommandError, shell, 'help foofoo')
 | 
						|
 | 
						|
    def test_debug(self):
 | 
						|
        httplib2.debuglevel = 0
 | 
						|
        shell('--debug help')
 | 
						|
        assert httplib2.debuglevel == 1
 | 
						|
 | 
						|
    def test_shell_args(self):
 | 
						|
        do_tenant_mock = mock.MagicMock()
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_user_list',
 | 
						|
                        do_tenant_mock):
 | 
						|
            shell('user-list')
 | 
						|
            assert do_tenant_mock.called
 | 
						|
            ((a, b), c) = do_tenant_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, DEFAULT_TENANT_ID,
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # Old_style options
 | 
						|
            shell('--os_auth_url http://0.0.0.0:5000/ --os_password xyzpdq '
 | 
						|
                  '--os_tenant_id 1234 --os_tenant_name fred '
 | 
						|
                  '--os_username barney '
 | 
						|
                  '--os_identity_api_version 2.0 user-list')
 | 
						|
            assert do_tenant_mock.called
 | 
						|
            ((a, b), c) = do_tenant_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = ('http://0.0.0.0:5000/', 'xyzpdq', '1234',
 | 
						|
                      'fred', 'barney', '2.0')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # New-style options
 | 
						|
            shell('--os-auth-url http://1.1.1.1:5000/ --os-password xyzpdq '
 | 
						|
                  '--os-tenant-id 4321 --os-tenant-name wilma '
 | 
						|
                  '--os-username betty '
 | 
						|
                  '--os-identity-api-version 2.0 user-list')
 | 
						|
            assert do_tenant_mock.called
 | 
						|
            ((a, b), c) = do_tenant_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = ('http://1.1.1.1:5000/', 'xyzpdq', '4321',
 | 
						|
                      'wilma', 'betty', '2.0')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
    def test_shell_user_create_args(self):
 | 
						|
        """Test user-create args"""
 | 
						|
        do_uc_mock = mock.MagicMock()
 | 
						|
        # grab the decorators for do_user_create
 | 
						|
        uc_func = getattr(shell_v2_0, 'do_user_create')
 | 
						|
        do_uc_mock.arguments = getattr(uc_func, 'arguments', [])
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_user_create',
 | 
						|
                        do_uc_mock):
 | 
						|
 | 
						|
            # Old_style options
 | 
						|
            # Test case with one --tenant_id args present: ec2 creds
 | 
						|
            shell('user-create --name=FOO '
 | 
						|
                  '--pass=secrete --tenant_id=barrr --enabled=true')
 | 
						|
            assert do_uc_mock.called
 | 
						|
            ((a, b), c) = do_uc_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, DEFAULT_TENANT_ID,
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.tenant_id, b.name, b.passwd, b.enabled)
 | 
						|
            expect = ('barrr', 'FOO', 'secrete', 'true')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # New-style options
 | 
						|
            # Test case with one --tenant-id args present: ec2 creds
 | 
						|
            shell('user-create --name=foo '
 | 
						|
                  '--pass=secrete --tenant-id=BARRR --enabled=true')
 | 
						|
            assert do_uc_mock.called
 | 
						|
            ((a, b), c) = do_uc_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, DEFAULT_TENANT_ID,
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.tenant_id, b.name, b.passwd, b.enabled)
 | 
						|
            expect = ('BARRR', 'foo', 'secrete', 'true')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # Old_style options
 | 
						|
            # Test case with --os_tenant_id and --tenant_id args present
 | 
						|
            shell('--os_tenant_id=os-tenant user-create --name=FOO '
 | 
						|
                  '--pass=secrete --tenant_id=barrr --enabled=true')
 | 
						|
            assert do_uc_mock.called
 | 
						|
            ((a, b), c) = do_uc_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, 'os-tenant',
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.tenant_id, b.name, b.passwd, b.enabled)
 | 
						|
            expect = ('barrr', 'FOO', 'secrete', 'true')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # New-style options
 | 
						|
            # Test case with --os-tenant-id and --tenant-id args present
 | 
						|
            shell('--os-tenant-id=ostenant user-create --name=foo '
 | 
						|
                  '--pass=secrete --tenant-id=BARRR --enabled=true')
 | 
						|
            assert do_uc_mock.called
 | 
						|
            ((a, b), c) = do_uc_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, 'ostenant',
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.tenant_id, b.name, b.passwd, b.enabled)
 | 
						|
            expect = ('BARRR', 'foo', 'secrete', 'true')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
    def test_do_tenant_create(self):
 | 
						|
        do_tenant_mock = mock.MagicMock()
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_tenant_create',
 | 
						|
                        do_tenant_mock):
 | 
						|
            shell('tenant-create')
 | 
						|
            assert do_tenant_mock.called
 | 
						|
            # FIXME(dtroyer): how do you test the decorators?
 | 
						|
            #shell('tenant-create --tenant-name wilma '
 | 
						|
            #        '--description "fred\'s wife"')
 | 
						|
            #assert do_tenant_mock.called
 | 
						|
 | 
						|
    def test_do_tenant_list(self):
 | 
						|
        do_tenant_mock = mock.MagicMock()
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_tenant_list',
 | 
						|
                        do_tenant_mock):
 | 
						|
            shell('tenant-list')
 | 
						|
            assert do_tenant_mock.called
 | 
						|
 | 
						|
    def test_shell_tenant_id_args(self):
 | 
						|
        """Test a corner case where --tenant_id appears on the
 | 
						|
           command-line twice"""
 | 
						|
        do_ec2_mock = mock.MagicMock()
 | 
						|
        # grab the decorators for do_ec2_create_credentials
 | 
						|
        ec2_func = getattr(shell_v2_0, 'do_ec2_credentials_create')
 | 
						|
        do_ec2_mock.arguments = getattr(ec2_func, 'arguments', [])
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_ec2_credentials_create',
 | 
						|
                        do_ec2_mock):
 | 
						|
 | 
						|
            # Old_style options
 | 
						|
            # Test case with one --tenant_id args present: ec2 creds
 | 
						|
            shell('ec2-credentials-create '
 | 
						|
                  '--tenant_id=ec2-tenant --user_id=ec2-user')
 | 
						|
            assert do_ec2_mock.called
 | 
						|
            ((a, b), c) = do_ec2_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, DEFAULT_TENANT_ID,
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.tenant_id, b.user_id)
 | 
						|
            expect = ('ec2-tenant', 'ec2-user')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # New-style options
 | 
						|
            # Test case with one --tenant-id args present: ec2 creds
 | 
						|
            shell('ec2-credentials-create '
 | 
						|
                  '--tenant-id=dash-tenant --user-id=dash-user')
 | 
						|
            assert do_ec2_mock.called
 | 
						|
            ((a, b), c) = do_ec2_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, DEFAULT_TENANT_ID,
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.tenant_id, b.user_id)
 | 
						|
            expect = ('dash-tenant', 'dash-user')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # Old_style options
 | 
						|
            # Test case with two --tenant_id args present
 | 
						|
            shell('--os_tenant_id=os-tenant ec2-credentials-create '
 | 
						|
                  '--tenant_id=ec2-tenant --user_id=ec2-user')
 | 
						|
            assert do_ec2_mock.called
 | 
						|
            ((a, b), c) = do_ec2_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, 'os-tenant',
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.tenant_id, b.user_id)
 | 
						|
            expect = ('ec2-tenant', 'ec2-user')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # New-style options
 | 
						|
            # Test case with two --tenant-id args present
 | 
						|
            shell('--os-tenant-id=ostenant ec2-credentials-create '
 | 
						|
                  '--tenant-id=dash-tenant --user-id=dash-user')
 | 
						|
            assert do_ec2_mock.called
 | 
						|
            ((a, b), c) = do_ec2_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, 'ostenant',
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.tenant_id, b.user_id)
 | 
						|
            expect = ('dash-tenant', 'dash-user')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
    def test_do_ec2_get(self):
 | 
						|
        do_shell_mock = mock.MagicMock()
 | 
						|
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_ec2_credentials_create',
 | 
						|
                        do_shell_mock):
 | 
						|
            shell('ec2-credentials-create')
 | 
						|
            assert do_shell_mock.called
 | 
						|
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_ec2_credentials_get',
 | 
						|
                        do_shell_mock):
 | 
						|
            shell('ec2-credentials-get')
 | 
						|
            assert do_shell_mock.called
 | 
						|
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_ec2_credentials_list',
 | 
						|
                        do_shell_mock):
 | 
						|
            shell('ec2-credentials-list')
 | 
						|
            assert do_shell_mock.called
 | 
						|
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_ec2_credentials_delete',
 | 
						|
                        do_shell_mock):
 | 
						|
            shell('ec2-credentials-delete')
 | 
						|
            assert do_shell_mock.called
 | 
						|
 | 
						|
    def test_do_endpoints(self):
 | 
						|
        do_shell_mock = mock.MagicMock()
 | 
						|
        # grab the decorators for do_endpoint_create
 | 
						|
        shell_func = getattr(shell_v2_0, 'do_endpoint_create')
 | 
						|
        do_shell_mock.arguments = getattr(shell_func, 'arguments', [])
 | 
						|
        with mock.patch('keystoneclient.v2_0.shell.do_endpoint_create',
 | 
						|
                        do_shell_mock):
 | 
						|
 | 
						|
            # Old_style options
 | 
						|
            # Test create args
 | 
						|
            shell('endpoint-create '
 | 
						|
                  '--service_id=2 --publicurl=http://example.com:1234/go '
 | 
						|
                  '--adminurl=http://example.com:9876/adm')
 | 
						|
            assert do_shell_mock.called
 | 
						|
            ((a, b), c) = do_shell_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, DEFAULT_TENANT_ID,
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.service_id, b.publicurl, b.adminurl)
 | 
						|
            expect = ('2',
 | 
						|
                      'http://example.com:1234/go',
 | 
						|
                      'http://example.com:9876/adm')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
 | 
						|
            # New-style options
 | 
						|
            # Test create args
 | 
						|
            shell('endpoint-create '
 | 
						|
                  '--service-id=3 --publicurl=http://example.com:4321/go '
 | 
						|
                  '--adminurl=http://example.com:9876/adm')
 | 
						|
            assert do_shell_mock.called
 | 
						|
            ((a, b), c) = do_shell_mock.call_args
 | 
						|
            actual = (b.os_auth_url, b.os_password, b.os_tenant_id,
 | 
						|
                      b.os_tenant_name, b.os_username,
 | 
						|
                      b.os_identity_api_version)
 | 
						|
            expect = (DEFAULT_AUTH_URL, DEFAULT_PASSWORD, DEFAULT_TENANT_ID,
 | 
						|
                      DEFAULT_TENANT_NAME, DEFAULT_USERNAME, '')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | 
						|
            actual = (b.service_id, b.publicurl, b.adminurl)
 | 
						|
            expect = ('3',
 | 
						|
                      'http://example.com:4321/go',
 | 
						|
                      'http://example.com:9876/adm')
 | 
						|
            self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 |