 6bd93179a2
			
		
	
	6bd93179a2
	
	
	
		
			
			Move all the existing tests to the unit/ subdirectory. This gives us some room to add a functional/ directory later with other tests. Change-Id: I0fb8d5b628eb8ee1f35f05f42d0c0ac9f285e8c3 Implements: functional-testing
		
			
				
	
	
		
			533 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			533 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #    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 argparse
 | |
| import json
 | |
| import logging
 | |
| import os
 | |
| import sys
 | |
| import uuid
 | |
| 
 | |
| import fixtures
 | |
| import mock
 | |
| import six
 | |
| import testtools
 | |
| from testtools import matchers
 | |
| 
 | |
| from keystoneclient import exceptions
 | |
| from keystoneclient import session
 | |
| from keystoneclient import shell as openstack_shell
 | |
| from keystoneclient.tests.unit import utils
 | |
| from keystoneclient.v2_0 import shell as shell_v2_0
 | |
| 
 | |
| 
 | |
| 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/'
 | |
| 
 | |
| 
 | |
| # Make a fake shell object, a helping wrapper to call it
 | |
| def shell(cmd):
 | |
|     openstack_shell.OpenStackIdentityShell().main(cmd.split())
 | |
| 
 | |
| 
 | |
| class NoExitArgumentParser(argparse.ArgumentParser):
 | |
|     def error(self, message):
 | |
|         raise exceptions.CommandError(message)
 | |
| 
 | |
| 
 | |
| class ShellTest(utils.TestCase):
 | |
| 
 | |
|     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,
 | |
|     }
 | |
| 
 | |
|     def _tolerant_shell(self, cmd):
 | |
|         t_shell = openstack_shell.OpenStackIdentityShell(NoExitArgumentParser)
 | |
|         t_shell.main(cmd.split())
 | |
| 
 | |
|     # Patch os.environ to avoid required auth info.
 | |
|     def setUp(self):
 | |
| 
 | |
|         super(ShellTest, self).setUp()
 | |
|         for var in os.environ:
 | |
|             if var.startswith("OS_"):
 | |
|                 self.useFixture(fixtures.EnvironmentVariable(var, ""))
 | |
| 
 | |
|         for var in self.FAKE_ENV:
 | |
|             self.useFixture(fixtures.EnvironmentVariable(var,
 | |
|                             self.FAKE_ENV[var]))
 | |
| 
 | |
|     def test_help_unknown_command(self):
 | |
|         self.assertRaises(exceptions.CommandError, shell, 'help %s'
 | |
|                           % uuid.uuid4().hex)
 | |
| 
 | |
|     def shell(self, argstr):
 | |
|         orig = sys.stdout
 | |
|         clean_env = {}
 | |
|         _old_env, os.environ = os.environ, clean_env.copy()
 | |
|         try:
 | |
|             sys.stdout = six.StringIO()
 | |
|             _shell = openstack_shell.OpenStackIdentityShell()
 | |
|             _shell.main(argstr.split())
 | |
|         except SystemExit:
 | |
|             exc_type, exc_value, exc_traceback = sys.exc_info()
 | |
|             self.assertEqual(exc_value.code, 0)
 | |
|         finally:
 | |
|             out = sys.stdout.getvalue()
 | |
|             sys.stdout.close()
 | |
|             sys.stdout = orig
 | |
|             os.environ = _old_env
 | |
|         return out
 | |
| 
 | |
|     def test_help_no_args(self):
 | |
|         do_tenant_mock = mock.MagicMock()
 | |
|         with mock.patch('keystoneclient.shell.OpenStackIdentityShell.do_help',
 | |
|                         do_tenant_mock):
 | |
|             self.shell('')
 | |
|             assert do_tenant_mock.called
 | |
| 
 | |
|     def test_help(self):
 | |
|         required = 'usage:'
 | |
|         help_text = self.shell('help')
 | |
|         self.assertThat(help_text,
 | |
|                         matchers.MatchesRegex(required))
 | |
| 
 | |
|     def test_help_command(self):
 | |
|         required = 'usage: keystone user-create'
 | |
|         help_text = self.shell('help user-create')
 | |
|         self.assertThat(help_text,
 | |
|                         matchers.MatchesRegex(required))
 | |
| 
 | |
|     def test_help_command_with_no_action_choices(self):
 | |
|         required = 'usage: keystone user-update'
 | |
|         help_text = self.shell('help user-update')
 | |
|         self.assertThat(help_text,
 | |
|                         matchers.MatchesRegex(required))
 | |
| 
 | |
|     def test_auth_no_credentials(self):
 | |
|         with testtools.ExpectedException(
 | |
|                 exceptions.CommandError, 'Expecting'):
 | |
|             self.shell('user-list')
 | |
| 
 | |
|     def test_debug(self):
 | |
|         logging_mock = mock.MagicMock()
 | |
|         with mock.patch('logging.basicConfig', logging_mock):
 | |
|             self.assertRaises(exceptions.CommandError,
 | |
|                               self.shell, '--debug user-list')
 | |
|             self.assertTrue(logging_mock.called)
 | |
|             self.assertEqual([(), {'level': logging.DEBUG}],
 | |
|                              list(logging_mock.call_args))
 | |
| 
 | |
|     def test_auth_password_authurl_no_username(self):
 | |
|         with testtools.ExpectedException(
 | |
|                 exceptions.CommandError,
 | |
|                 'Expecting a username provided via either'):
 | |
|             self.shell('--os-password=%s --os-auth-url=%s user-list'
 | |
|                        % (uuid.uuid4().hex, uuid.uuid4().hex))
 | |
| 
 | |
|     def test_auth_username_password_no_authurl(self):
 | |
|         with testtools.ExpectedException(
 | |
|                 exceptions.CommandError, 'Expecting an auth URL via either'):
 | |
|             self.shell('--os-password=%s --os-username=%s user-list'
 | |
|                        % (uuid.uuid4().hex, uuid.uuid4().hex))
 | |
| 
 | |
|     def test_token_no_endpoint(self):
 | |
|         with testtools.ExpectedException(
 | |
|                 exceptions.CommandError, 'Expecting an endpoint provided'):
 | |
|             self.shell('--os-token=%s user-list' % uuid.uuid4().hex)
 | |
| 
 | |
|     def test_endpoint_no_token(self):
 | |
|         with testtools.ExpectedException(
 | |
|                 exceptions.CommandError, 'Expecting a token provided'):
 | |
|             self.shell('--os-endpoint=http://10.0.0.1:5000/v2.0/ user-list')
 | |
| 
 | |
|     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)]))
 | |
| 
 | |
|             # Test keyring 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 '
 | |
|                   '--os-cache '
 | |
|                   '--stale-duration 500 '
 | |
|                   '--force-new-token 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, b.os_cache,
 | |
|                       b.stale_duration, b.force_new_token)
 | |
|             expect = ('http://1.1.1.1:5000/', 'xyzpdq', '4321',
 | |
|                       'wilma', 'betty', '2.0', True, '500', True)
 | |
|             self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | |
| 
 | |
|             # Test os-identity-api-version fall back to 2.0
 | |
|             shell('--os-identity-api-version 3.0 user-list')
 | |
|             assert do_tenant_mock.called
 | |
|             self.assertTrue(b.os_identity_api_version, '2.0')
 | |
| 
 | |
|     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=secret --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', 'secret', 'true')
 | |
|             self.assertTrue(all([x == y for x, y in zip(actual, expect)]))
 | |
| 
 | |
|             # New-style options
 | |
|             # Test case with one --tenant args present: ec2 creds
 | |
|             shell('user-create --name=foo '
 | |
|                   '--pass=secret --tenant=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, b.name, b.passwd, b.enabled)
 | |
|             expect = ('BARRR', 'foo', 'secret', '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=secret --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, b.name, b.passwd, b.enabled)
 | |
|             expect = ('BARRR', 'foo', 'secret', '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=secret --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', 'secret', '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=secret --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, b.name, b.passwd, b.enabled)
 | |
|             expect = ('BARRR', 'foo', 'secret', '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_timeout_parse_invalid_type(self):
 | |
|         for f in ['foobar', 'xyz']:
 | |
|             cmd = '--timeout %s endpoint-create' % (f)
 | |
|             self.assertRaises(exceptions.CommandError,
 | |
|                               self._tolerant_shell, cmd)
 | |
| 
 | |
|     def test_timeout_parse_invalid_number(self):
 | |
|         for f in [-1, 0]:
 | |
|             cmd = '--timeout %s endpoint-create' % (f)
 | |
|             self.assertRaises(exceptions.CommandError,
 | |
|                               self._tolerant_shell, cmd)
 | |
| 
 | |
|     def test_do_timeout(self):
 | |
|         response_mock = mock.MagicMock()
 | |
|         response_mock.status_code = 200
 | |
|         response_mock.text = json.dumps({
 | |
|             'endpoints': [],
 | |
|         })
 | |
|         request_mock = mock.MagicMock(return_value=response_mock)
 | |
|         with mock.patch.object(session.requests, 'request',
 | |
|                                request_mock):
 | |
|             shell(('--timeout 2 --os-token=blah  --os-endpoint=blah'
 | |
|                    ' --os-auth-url=blah.com endpoint-list'))
 | |
|             request_mock.assert_called_with(mock.ANY, mock.ANY,
 | |
|                                             timeout=2,
 | |
|                                             allow_redirects=False,
 | |
|                                             headers=mock.ANY,
 | |
|                                             verify=mock.ANY)
 | |
| 
 | |
|     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, 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, 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)]))
 | |
| 
 | |
|             # New-style options
 | |
|             # Test create args
 | |
|             shell('endpoint-create '
 | |
|                   '--service=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, 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)]))
 | |
| 
 | |
|     def test_shell_keyboard_interrupt(self):
 | |
|         shell_mock = mock.MagicMock()
 | |
|         with mock.patch('keystoneclient.shell.OpenStackIdentityShell.main',
 | |
|                         shell_mock):
 | |
|             try:
 | |
|                 shell_mock.side_effect = KeyboardInterrupt()
 | |
|                 openstack_shell.main()
 | |
|             except SystemExit as ex:
 | |
|                 self.assertEqual(130, ex.code)
 |