Claudiu Popa 757438abf9 Add a method for obtaining the maximum password length
The patch adds `get_maximum_password_length` to osutils. The Windows
specific value which was used in setuserpassword and createuser plugins
is moved in the Windows implementation of get_maximum_password_length.

Change-Id: I08f999c750ac7e2858493072d41bb8f4927521ca
2015-02-17 17:09:36 +02:00

83 lines
3.3 KiB
Python

# Copyright 2013 Cloudbase Solutions Srl
#
# 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 unittest
try:
import unittest.mock as mock
except ImportError:
import mock
from oslo.config import cfg
from cloudbaseinit.plugins.common import base
from cloudbaseinit.plugins.common import createuser
from cloudbaseinit.tests import testutils
CONF = cfg.CONF
class CreateUserPluginTests(unittest.TestCase):
def setUp(self):
self._create_user = createuser.CreateUserPlugin()
def test_get_password(self):
mock_osutils = mock.MagicMock()
mock_osutils.generate_random_password.return_value = 'fake password'
response = self._create_user._get_password(mock_osutils)
mock_osutils.get_maximum_password_length.assert_called_once_with()
length = mock_osutils.get_maximum_password_length()
mock_osutils.generate_random_password.assert_called_once_with(length)
self.assertEqual('fake password', response)
@testutils.ConfPatcher('groups', ['Admins'])
@mock.patch('cloudbaseinit.osutils.factory.get_os_utils')
@mock.patch('cloudbaseinit.plugins.common.createuser.CreateUserPlugin'
'._get_password')
def _test_execute(self, mock_get_password, mock_get_os_utils,
user_exists=True):
shared_data = {}
mock_token = mock.MagicMock()
mock_osutils = mock.MagicMock()
mock_service = mock.MagicMock()
mock_get_password.return_value = 'password'
mock_get_os_utils.return_value = mock_osutils
mock_osutils.user_exists.return_value = user_exists
mock_osutils.create_user_logon_session.return_value = mock_token
response = self._create_user.execute(mock_service, shared_data)
mock_get_os_utils.assert_called_once_with()
mock_get_password.assert_called_once_with(mock_osutils)
mock_osutils.user_exists.assert_called_once_with(CONF.username)
if user_exists:
mock_osutils.set_user_password.assert_called_once_with(
CONF.username, 'password')
else:
mock_osutils.create_user.assert_called_once_with(CONF.username,
'password')
mock_osutils.create_user_logon_session.assert_called_once_with(
CONF.username, 'password', True)
mock_osutils.close_user_logon_session.assert_called_once_with(
mock_token)
mock_osutils.add_user_to_local_group.assert_called_once_with(
CONF.username, CONF.groups[0])
self.assertEqual((base.PLUGIN_EXECUTION_DONE, False), response)
def test_execute_user_exists(self):
self._test_execute(user_exists=True)
def test_execute_no_user(self):
self._test_execute(user_exists=False)