Add unit tests for generic/shell.py
blueprint generic-shell-unittest Change-Id: I234c58d6e0dfa6402633f5f4f2149e7b1b9d36f2
This commit is contained in:
		
							
								
								
									
										0
									
								
								generic/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								generic/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										131
									
								
								generic/test_shell.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								generic/test_shell.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 | 
			
		||||
 | 
			
		||||
# Copyright 2014 OpenStack Foundation
 | 
			
		||||
# All Rights Reserved.
 | 
			
		||||
#
 | 
			
		||||
#    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 mock
 | 
			
		||||
from six import moves
 | 
			
		||||
 | 
			
		||||
from keystoneclient.generic import shell
 | 
			
		||||
from keystoneclient.tests import utils
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DoDiscoverTest(utils.TestCase):
 | 
			
		||||
    """Unit tests for do_discover function."""
 | 
			
		||||
    foo_version = {
 | 
			
		||||
        'id': 'foo_id',
 | 
			
		||||
        'status': 'foo_status',
 | 
			
		||||
        'url': 'http://foo/url',
 | 
			
		||||
    }
 | 
			
		||||
    bar_version = {
 | 
			
		||||
        'id': 'bar_id',
 | 
			
		||||
        'status': 'bar_status',
 | 
			
		||||
        'url': 'http://bar/url',
 | 
			
		||||
    }
 | 
			
		||||
    foo_extension = {
 | 
			
		||||
        'foo': 'foo_extension',
 | 
			
		||||
        'message': 'extension_message',
 | 
			
		||||
        'bar': 'bar_extension',
 | 
			
		||||
    }
 | 
			
		||||
    stub_message = 'This is a stub message'
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        super(DoDiscoverTest, self).setUp()
 | 
			
		||||
 | 
			
		||||
        self.client_mock = mock.Mock()
 | 
			
		||||
        self.client_mock.discover.return_value = {}
 | 
			
		||||
 | 
			
		||||
    def _execute_discover(self):
 | 
			
		||||
        """Call do_discover function and capture output
 | 
			
		||||
 | 
			
		||||
        :return: captured output is returned
 | 
			
		||||
        """
 | 
			
		||||
        with mock.patch('sys.stdout',
 | 
			
		||||
                        new_callable=moves.StringIO) as mock_stdout:
 | 
			
		||||
            shell.do_discover(self.client_mock, args=None)
 | 
			
		||||
            output = mock_stdout.getvalue()
 | 
			
		||||
        return output
 | 
			
		||||
 | 
			
		||||
    def _check_version_print(self, output, version):
 | 
			
		||||
        """Checks all api version's parameters are present in output."""
 | 
			
		||||
        self.assertIn(version['id'], output)
 | 
			
		||||
        self.assertIn(version['status'], output)
 | 
			
		||||
        self.assertIn(version['url'], output)
 | 
			
		||||
 | 
			
		||||
    def test_no_keystones(self):
 | 
			
		||||
        # No servers configured for client,
 | 
			
		||||
        # corresponding message should be printed
 | 
			
		||||
        output = self._execute_discover()
 | 
			
		||||
        self.assertIn('No Keystone-compatible endpoint found', output)
 | 
			
		||||
 | 
			
		||||
    def test_endpoint(self):
 | 
			
		||||
        # Endpoint is configured for client,
 | 
			
		||||
        # client's discover method should be called with that value
 | 
			
		||||
        self.client_mock.endpoint = 'Some non-empty value'
 | 
			
		||||
        shell.do_discover(self.client_mock, args=None)
 | 
			
		||||
        self.client_mock.discover.assert_called_with(self.client_mock.endpoint)
 | 
			
		||||
 | 
			
		||||
    def test_auth_url(self):
 | 
			
		||||
        # No endpoint provided for client, but there is an auth_url
 | 
			
		||||
        # client's discover method should be called with auth_url value
 | 
			
		||||
        self.client_mock.endpoint = False
 | 
			
		||||
        self.client_mock.auth_url = 'Some non-empty value'
 | 
			
		||||
        shell.do_discover(self.client_mock, args=None)
 | 
			
		||||
        self.client_mock.discover.assert_called_with(self.client_mock.auth_url)
 | 
			
		||||
 | 
			
		||||
    def test_empty(self):
 | 
			
		||||
        # No endpoint or auth_url is configured for client.
 | 
			
		||||
        # client.discover() should be called without parameters
 | 
			
		||||
        self.client_mock.endpoint = False
 | 
			
		||||
        self.client_mock.auth_url = False
 | 
			
		||||
        shell.do_discover(self.client_mock, args=None)
 | 
			
		||||
        self.client_mock.discover.assert_called_with()
 | 
			
		||||
 | 
			
		||||
    def test_message(self):
 | 
			
		||||
        # If client.discover() result contains message - it should be printed
 | 
			
		||||
        self.client_mock.discover.return_value = {'message': self.stub_message}
 | 
			
		||||
        output = self._execute_discover()
 | 
			
		||||
        self.assertIn(self.stub_message, output)
 | 
			
		||||
 | 
			
		||||
    def test_versions(self):
 | 
			
		||||
        # Every version in client.discover() result should be printed
 | 
			
		||||
        # and client.discover_extension() should be called on its url
 | 
			
		||||
        self.client_mock.discover.return_value = {
 | 
			
		||||
            'foo': self.foo_version,
 | 
			
		||||
            'bar': self.bar_version,
 | 
			
		||||
        }
 | 
			
		||||
        self.client_mock.discover_extensions.return_value = {}
 | 
			
		||||
        output = self._execute_discover()
 | 
			
		||||
        self._check_version_print(output, self.foo_version)
 | 
			
		||||
        self._check_version_print(output, self.bar_version)
 | 
			
		||||
 | 
			
		||||
        discover_extension_calls = [
 | 
			
		||||
            mock.call(self.foo_version['url']),
 | 
			
		||||
            mock.call(self.bar_version['url']),
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        self.client_mock.discover_extensions.assert_has_calls(
 | 
			
		||||
            discover_extension_calls,
 | 
			
		||||
            any_order=True)
 | 
			
		||||
 | 
			
		||||
    def test_extensions(self):
 | 
			
		||||
        # Every extension's parameters should be printed
 | 
			
		||||
        # Extension's message should be omitted
 | 
			
		||||
        self.client_mock.discover.return_value = {'foo': self.foo_version}
 | 
			
		||||
        self.client_mock.discover_extensions.return_value = self.foo_extension
 | 
			
		||||
        output = self._execute_discover()
 | 
			
		||||
        self.assertIn(self.foo_extension['foo'], output)
 | 
			
		||||
        self.assertIn(self.foo_extension['bar'], output)
 | 
			
		||||
        self.assertNotIn(self.foo_extension['message'], output)
 | 
			
		||||
		Reference in New Issue
	
	Block a user