Repository: ambari Updated Branches: refs/heads/trunk 2ea37fbcd -> 04c986186
Revert "AMBARI-10491 [WinTP2] Ambari server: Ensure the service can be configured to run under a domain account" This reverts commit 962a8a006e35860d391d10781d0b911d7f602d9d. Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/04c98618 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/04c98618 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/04c98618 Branch: refs/heads/trunk Commit: 04c986186cacb34bdfca3266215da9f00aa93a18 Parents: 2ea37fb Author: Jayush Luniya <[email protected]> Authored: Thu Apr 16 22:34:30 2015 -0700 Committer: Jayush Luniya <[email protected]> Committed: Thu Apr 16 22:34:30 2015 -0700 ---------------------------------------------------------------------- .../main/python/ambari_commons/os_windows.py | 12 +- ambari-server/src/main/python/ambari-server.py | 17 +-- .../python/ambari_server/serverConfiguration.py | 3 + .../main/python/ambari_server/serverSetup.py | 150 +++++++------------ .../src/main/python/ambari_windows_service.py | 17 ++- .../resources/Ambari-DDL-SQLServer-CREATE.sql | 1 - .../src/test/python/TestAmbariServer.py | 142 +++++++++--------- 7 files changed, 142 insertions(+), 200 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/04c98618/ambari-common/src/main/python/ambari_commons/os_windows.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/ambari_commons/os_windows.py b/ambari-common/src/main/python/ambari_commons/os_windows.py index 38db310..edbcc7b 100644 --- a/ambari-common/src/main/python/ambari_commons/os_windows.py +++ b/ambari-common/src/main/python/ambari_commons/os_windows.py @@ -629,7 +629,7 @@ class WinService(win32serviceutil.ServiceFramework): installArgs.append("--perfmondll=" + perfMonDll) installArgs.append("install") - return win32serviceutil.HandleCommandLine(cls, classPath, installArgs) + win32serviceutil.HandleCommandLine(cls, classPath, installArgs) @classmethod def Start(cls, waitSecs = 30): @@ -740,16 +740,6 @@ class UserHelper(object): return UserHelper.ACTION_FAILED, e.strerror return UserHelper.ACTION_OK, "User created." - def find_user(self): - try: - user_info = win32net.NetUserGetInfo(self.dcName, self.userName, 0) - except pywintypes.error as e: - if e.winerror == 2221: - return False - else: - raise - return True - def add_user_privilege(self, privilege): try: acc_sid = win32security.LookupAccountName(self.dcName, self.userName)[0] http://git-wip-us.apache.org/repos/asf/ambari/blob/04c98618/ambari-server/src/main/python/ambari-server.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/python/ambari-server.py b/ambari-server/src/main/python/ambari-server.py index 749a965..f1f005d 100755 --- a/ambari-server/src/main/python/ambari-server.py +++ b/ambari-server/src/main/python/ambari-server.py @@ -69,6 +69,12 @@ class UserActionRestart(UserAction): self.need_restart = self.fn(*self.args, **self.kwargs) +def winsetup(options): + from ambari_windows_service import svcsetup + + setup(options) + svcsetup() + # # Starts the Ambari Server as a standalone process. # Ensures only one instance of the process is running. @@ -263,13 +269,6 @@ def restore(args): @OsFamilyFuncImpl(OSConst.WINSRV_FAMILY) def init_parser_options(parser): - parser.add_option('-k', '--service-user-name', dest="svc_user", - default=None, - help="User account under which the Ambari Server service will run") - parser.add_option('-x', '--service-user-password', dest="svc_password", - default=None, - help="Password for the Ambari Server service user account") - parser.add_option('-f', '--init-script-file', dest="init_db_script_file", default="resources" + os.sep + "Ambari-DDL-SQLServer-CREATE.sql", help="File with database setup script") @@ -303,7 +302,7 @@ def init_parser_options(parser): help="Database user password") parser.add_option('--jdbc-driver', default=None, dest="jdbc_driver", help="Specifies the path to the JDBC driver JAR file") - # -b and -i the remaining available short options + # -b, -i, -k and -x the remaining available short options # -h reserved for help @OsFamilyFuncImpl(OsFamilyImpl.DEFAULT) @@ -476,7 +475,7 @@ def fix_database_options(options, parser): @OsFamilyFuncImpl(OSConst.WINSRV_FAMILY) def create_user_action_map(args, options): action_map = { - SETUP_ACTION: UserAction(setup, options), + SETUP_ACTION: UserAction(winsetup, options), START_ACTION: UserAction(svcstart), PSTART_ACTION: UserAction(start, options), STOP_ACTION: UserAction(stop), http://git-wip-us.apache.org/repos/asf/ambari/blob/04c98618/ambari-server/src/main/python/ambari_server/serverConfiguration.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/python/ambari_server/serverConfiguration.py b/ambari-server/src/main/python/ambari_server/serverConfiguration.py index 26ee4b0..c13202c 100644 --- a/ambari-server/src/main/python/ambari_server/serverConfiguration.py +++ b/ambari-server/src/main/python/ambari_server/serverConfiguration.py @@ -126,6 +126,9 @@ JDBC_RCA_USE_INTEGRATED_AUTH_PROPERTY = "server.jdbc.rca.use.integrated.auth" ### # End Windows-specific # ### +SERVICE_USERNAME_KEY = "TMP_AMBARI_USERNAME" +SERVICE_PASSWORD_KEY = "TMP_AMBARI_PASSWORD" + # resources repo configuration RESOURCES_DIR_PROPERTY = "resources.dir" http://git-wip-us.apache.org/repos/asf/ambari/blob/04c98618/ambari-server/src/main/python/ambari_server/serverSetup.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/python/ambari_server/serverSetup.py b/ambari-server/src/main/python/ambari_server/serverSetup.py index 26e1292..ddb44fd 100644 --- a/ambari-server/src/main/python/ambari_server/serverSetup.py +++ b/ambari-server/src/main/python/ambari_server/serverSetup.py @@ -27,7 +27,7 @@ import sys from ambari_commons.exceptions import FatalException from ambari_commons.firewall import Firewall from ambari_commons.inet_utils import force_download_file, download_progress -from ambari_commons.logging_utils import get_silent, print_info_msg, print_warning_msg, print_error_msg, get_verbose +from ambari_commons.logging_utils import get_silent, print_info_msg, print_warning_msg, print_error_msg from ambari_commons.os_check import OSConst from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl from ambari_commons.os_utils import copy_files, run_os_command, is_root @@ -38,7 +38,7 @@ from ambari_server.serverConfiguration import configDefaults, JDKRelease, \ get_resources_location, get_value_from_properties, read_ambari_user, update_properties, validate_jdk, write_property, \ JAVA_HOME, JAVA_HOME_PROPERTY, JCE_NAME_PROPERTY, JDBC_RCA_URL_PROPERTY, JDBC_URL_PROPERTY, \ JDK_NAME_PROPERTY, JDK_RELEASES, NR_USER_PROPERTY, OS_FAMILY, OS_FAMILY_PROPERTY, OS_TYPE, OS_TYPE_PROPERTY, OS_VERSION, \ - VIEWS_DIR_PROPERTY, JDBC_DATABASE_PROPERTY + SERVICE_PASSWORD_KEY, SERVICE_USERNAME_KEY, VIEWS_DIR_PROPERTY, JDBC_DATABASE_PROPERTY from ambari_server.serverUtils import is_server_runing from ambari_server.setupSecurity import adjust_directory_permissions from ambari_server.userInput import get_YN_input, get_validated_string_input @@ -161,34 +161,29 @@ class AmbariUserChecks(object): self.NR_DEFAULT_USER = "" self.NR_USER_COMMENT = "Ambari user" - self.register_service = False - self.user = None - self.password = None - def do_checks(self): try: user = read_ambari_user() - if not user: - user = self.NR_DEFAULT_USER - - if self.user is not None: #Command-line parameter is the default - update_user_setting = True - prompt_msg = self.NR_USER_CUSTOMIZE_PROMPT.format('y') - else: - update_user_setting = False - if user != self.NR_DEFAULT_USER: - prompt_msg = self.NR_USER_CHANGE_PROMPT.format(user, 'n') - else: - prompt_msg = self.NR_USER_CUSTOMIZE_PROMPT.format('n') - self.user = user if user else self.NR_DEFAULT_USER - - self.register_service = get_YN_input(prompt_msg, update_user_setting) - if self.register_service: - retcode = self._create_custom_user() + create_user = False + update_user_setting = False + if user is not None: + create_user = get_YN_input(self.NR_USER_CHANGE_PROMPT.format(user), False) + update_user_setting = create_user # Only if we will create another user + else: # user is not configured yet + update_user_setting = True # Write configuration anyway + create_user = get_YN_input(self.NR_USER_CUSTOMIZE_PROMPT, False) + if not create_user: + user = self.NR_DEFAULT_USER + + if create_user: + (retcode, user) = self._create_custom_user() if retcode != 0: return retcode - adjust_directory_permissions(self.user) + if update_user_setting: + write_property(NR_USER_PROPERTY, user) + + adjust_directory_permissions(user) except OSError as e: print_error_msg("Failed: %s" % str(e)) return 4 @@ -202,79 +197,62 @@ class AmbariUserChecks(object): @OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY) class AmbariUserChecksWindows(AmbariUserChecks): - def __init__(self, options): + def __init__(self): super(AmbariUserChecksWindows, self).__init__() - self.NR_USER_CHANGE_PROMPT = "Ambari-server service is configured to run under user '{0}'. Change this setting [y/n] ({1})? " - self.NR_USER_CUSTOMIZE_PROMPT = "Customize user account for ambari-server service [y/n] ({0})? " + self.NR_USER_CHANGE_PROMPT = "Ambari-server service is configured to run under user '{0}'. Change this setting [y/n] (n)? " + self.NR_USER_CUSTOMIZE_PROMPT = "Customize user account for ambari-server service [y/n] (n)? " self.NR_DEFAULT_USER = "NT AUTHORITY\SYSTEM" - self.NR_SYSTEM_USERS = {"NT AUTHORITY\SYSTEM", "NT AUTHORITY\NetworkService", "NT AUTHORITY\LocalService"} - - self.user = options.svc_user - self.password = options.svc_password def _create_custom_user(self): user = get_validated_string_input( - "Enter user account for ambari-server service ({0}):".format(self.user), - self.user, None, + "Enter user account for ambari-server service ({0}):".format(self.NR_DEFAULT_USER), + self.NR_DEFAULT_USER, None, "Invalid username.", False ) - if user in self.NR_SYSTEM_USERS: - self.user = user - return 0 + if user == self.NR_DEFAULT_USER: + return 0, user + password = get_validated_string_input("Enter password for user {0}:".format(user), "", None, "Password", True, False) from ambari_commons.os_windows import UserHelper uh = UserHelper(user) - if not uh.find_user(): - if get_silent(): - password = self.password - else: - password = get_validated_string_input("Enter password for user {0}:".format(user), "", None, "Password", True, False) - - status, message = uh.create_user(password) - if status == UserHelper.USER_EXISTS: - print_info_msg("User {0} already exists, make sure that you typed correct password for user, " - "skipping user creation".format(user)) + status, message = uh.create_user(password) + if status == UserHelper.USER_EXISTS: + print_info_msg("User {0} already exists, make sure that you typed correct password for user, " + "skipping user creation".format(user)) - elif status == UserHelper.ACTION_FAILED: # fail - print_warning_msg("Can't create user {0}. Failed with message {1}".format(user, message)) - return UserHelper.ACTION_FAILED + elif status == UserHelper.ACTION_FAILED: # fail + print_warning_msg("Can't create user {0}. Failed with message {1}".format(user, message)) + return UserHelper.ACTION_FAILED, None - self.password = password + # setting SeServiceLogonRight to user - # setting SeServiceLogonRight and SeBatchLogonRight to user - #This is unconditional status, message = uh.add_user_privilege('SeServiceLogonRight') if status == UserHelper.ACTION_FAILED: print_warning_msg("Can't add SeServiceLogonRight to user {0}. Failed with message {1}".format(user, message)) - return UserHelper.ACTION_FAILED - - status, message = uh.add_user_privilege('SeBatchLogonRight') - if status == UserHelper.ACTION_FAILED: - print_warning_msg("Can't add SeServiceLogonRight to user {0}. Failed with message {1}".format(user, message)) - return UserHelper.ACTION_FAILED + return UserHelper.ACTION_FAILED, None print_info_msg("User configuration is done.") print_warning_msg("When using non SYSTEM user make sure that your user has read\write access to log directories and " "all server directories. In case of integrated authentication for SQL Server make sure that your " "user is properly configured to use the ambari database.") - - if user.find('\\') == -1: - self.user = '.\\' + user - else: - self.user = user - return 0 + #storing username and password in os.environ temporary to pass them to service + if uh.domainName: + user = uh.domainName + '\\' + user + os.environ[SERVICE_USERNAME_KEY] = user + os.environ[SERVICE_PASSWORD_KEY] = password + return 0, user @OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT) class AmbariUserChecksLinux(AmbariUserChecks): - def __init__(self, options): + def __init__(self): super(AmbariUserChecksLinux, self).__init__() - self.NR_USER_CHANGE_PROMPT = "Ambari-server daemon is configured to run under user '{0}'. Change this setting [y/n] ({1})? " - self.NR_USER_CUSTOMIZE_PROMPT = "Customize user account for ambari-server daemon [y/n] ({0})? " + self.NR_USER_CHANGE_PROMPT = "Ambari-server daemon is configured to run under user '{0}'. Change this setting [y/n] (n)? " + self.NR_USER_CUSTOMIZE_PROMPT = "Customize user account for ambari-server daemon [y/n] (n)? " self.NR_DEFAULT_USER = "root" self.NR_USERADD_CMD = 'useradd -M --comment "{1}" ' \ @@ -283,7 +261,7 @@ class AmbariUserChecksLinux(AmbariUserChecks): def _create_custom_user(self): user = get_validated_string_input( "Enter user account for ambari-server daemon (root):", - self.user, + "root", "^[a-z_][a-z0-9_-]{1,31}$", "Invalid username.", False @@ -299,36 +277,13 @@ class AmbariUserChecksLinux(AmbariUserChecks): elif retcode != 0: # fail print_warning_msg("Can't create user {0}. Command {1} " "finished with {2}: \n{3}".format(user, command, retcode, err)) - return retcode + return retcode, None print_info_msg("User configuration is done.") + return 0, user - self.user = user - - return 0 - -def check_ambari_user(options): - uc = AmbariUserChecks(options) - retcode = uc.do_checks() - return retcode, uc.register_service, uc.user, uc.password - - -# -# Windows service setup -# - -@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY) -def service_setup(register_service, svc_user, svc_password): - from ambari_windows_service import svcsetup - - result = svcsetup(register_service, svc_user, svc_password) - if result == 0: - write_property(NR_USER_PROPERTY, svc_user) - -@OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT) -def service_setup(register_service, svc_user, svc_password): - #Nothing else to do in Linux - write_property(NR_USER_PROPERTY, svc_user) +def check_ambari_user(): + return AmbariUserChecks().do_checks() # @@ -1016,7 +971,7 @@ def setup(options): raise FatalException(retcode, err) #Create ambari user, if needed - (retcode, register_service, svc_user, svc_password) = check_ambari_user(options) + retcode = check_ambari_user() if not retcode == 0: err = 'Failed to create user. Exiting.' raise FatalException(retcode, err) @@ -1057,9 +1012,8 @@ def setup(options): raise FatalException(retcode, err) # we've already done this, but new files were created so run it one time. - adjust_directory_permissions(svc_user) + adjust_directory_permissions(read_ambari_user()) - service_setup(register_service, svc_user, svc_password) # # Setup the JCE policy for Ambari Server. http://git-wip-us.apache.org/repos/asf/ambari/blob/04c98618/ambari-server/src/main/python/ambari_windows_service.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/python/ambari_windows_service.py b/ambari-server/src/main/python/ambari_windows_service.py index 502aeb9..8e86163 100644 --- a/ambari-server/src/main/python/ambari_windows_service.py +++ b/ambari-server/src/main/python/ambari_windows_service.py @@ -27,7 +27,8 @@ from ambari_commons.logging_utils import set_silent, set_verbose, print_info_msg from ambari_commons.os_utils import remove_file from ambari_commons.os_windows import SvcStatusCallback from ambari_server.serverConfiguration import configDefaults, get_ambari_properties, get_value_from_properties, \ - DEBUG_MODE_KEY, PID_NAME, SERVER_OUT_FILE_KEY, SUSPEND_START_MODE_KEY, VERBOSE_OUTPUT_KEY + DEBUG_MODE_KEY, PID_NAME, SERVER_OUT_FILE_KEY, SERVICE_PASSWORD_KEY, SERVICE_USERNAME_KEY, SUSPEND_START_MODE_KEY, \ + VERBOSE_OUTPUT_KEY class AmbariServerService(AmbariService): @@ -85,15 +86,15 @@ def ctrlHandler(ctrlType): AmbariServerService.DefCtrlCHandler() return True -def svcsetup(register_service, username=None, password=None): +def svcsetup(): AmbariServerService.set_ctrl_c_handler(ctrlHandler) scriptFile, ext = os.path.splitext(__file__.replace('/', os.sep)) classPath = scriptFile + "." + AmbariServerService.__name__ - # We don't save the password between 'setup' runs, so we can't run Install every time. We run Install only if the - # operator acknowledged changing the username or if the service is not yet installed - if (register_service or AmbariServerService.QueryStatus() == "not installed"): - return AmbariServerService.Install(classPath=classPath, username=username, password=password) - else: - return 0 + # we don't save password between 'setup' runs, so we can't run Install every time. We run 'setup' only if user and + # password provided or if service not installed + if (SERVICE_USERNAME_KEY in os.environ and SERVICE_PASSWORD_KEY in os.environ): + AmbariServerService.Install(classPath=classPath, username=os.environ[SERVICE_USERNAME_KEY], password=os.environ[SERVICE_PASSWORD_KEY]) + elif AmbariServerService.QueryStatus() == "not installed": + AmbariServerService.Install(classPath) http://git-wip-us.apache.org/repos/asf/ambari/blob/04c98618/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql index e38e2c5..a69e235 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql @@ -214,7 +214,6 @@ CREATE TABLE users ( create_time DATETIME DEFAULT GETDATE(), user_password VARCHAR(255), active INTEGER NOT NULL DEFAULT 1, - active_widget_layouts VARCHAR(1024) DEFAULT NULL, PRIMARY KEY CLUSTERED (user_id), UNIQUE ( ldap_user, http://git-wip-us.apache.org/repos/asf/ambari/blob/04c98618/ambari-server/src/test/python/TestAmbariServer.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/TestAmbariServer.py b/ambari-server/src/test/python/TestAmbariServer.py index 5c05ad3..17e8aea 100644 --- a/ambari-server/src/test/python/TestAmbariServer.py +++ b/ambari-server/src/test/python/TestAmbariServer.py @@ -1122,19 +1122,16 @@ class TestAmbariServer(TestCase): @patch("ambari_server.serverSetup.run_os_command") def test_create_custom_user(self, run_os_command_mock, print_warning_msg_mock, print_info_msg_mock, get_validated_string_input_mock): - options = MagicMock() - user = "dummy-user" get_validated_string_input_mock.return_value = user - userChecks = AmbariUserChecks(options) + userChecks = AmbariUserChecks() # Testing scenario: absent user run_os_command_mock.side_effect = [(0, "", "")] result = userChecks._create_custom_user() self.assertFalse(print_warning_msg_mock.called) - self.assertEquals(result, 0) - self.assertEquals(userChecks.user, user) + self.assertEquals(result, (0, user)) print_info_msg_mock.reset_mock() print_warning_msg_mock.reset_mock() @@ -1144,8 +1141,7 @@ class TestAmbariServer(TestCase): run_os_command_mock.side_effect = [(9, "", "")] result = userChecks._create_custom_user() self.assertTrue("User dummy-user already exists" in str(print_info_msg_mock.call_args_list[1][0])) - self.assertEquals(result, 0) - self.assertEquals(userChecks.user, user) + self.assertEquals(result, (0, user)) print_info_msg_mock.reset_mock() print_warning_msg_mock.reset_mock() @@ -1155,138 +1151,139 @@ class TestAmbariServer(TestCase): run_os_command_mock.side_effect = [(1, "", "")] result = userChecks._create_custom_user() self.assertTrue(print_warning_msg_mock.called) - self.assertEquals(result, 1) + self.assertEquals(result, (1, None)) pass @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value)) @patch("ambari_server.serverSetup.read_ambari_user") @patch("ambari_server.serverSetup.get_YN_input") - @patch("ambari_server.serverSetup.get_validated_string_input") + @patch.object(AmbariUserChecksLinux, "_create_custom_user") + @patch.object(AmbariUserChecksWindows, "_create_custom_user") + @patch("ambari_server.serverSetup.write_property") @patch("ambari_server.serverSetup.adjust_directory_permissions") - @patch("ambari_server.serverSetup.run_os_command") @patch("ambari_server.serverSetup.print_error_msg") - @patch("ambari_server.serverSetup.print_warning_msg") - @patch("ambari_server.serverSetup.print_info_msg") - def test_check_ambari_user(self, print_info_msg_mock, print_warning_msg_mock, print_error_msg_mock, - run_os_command_mock, adjust_directory_permissions_mock, - get_validated_string_input_mock, get_YN_input_mock, read_ambari_user_mock): - - options = MagicMock() - - run_os_command_mock.return_value = (0, "", "") + def test_check_ambari_user(self, print_error_msg_mock, + adjust_directory_permissions_mock, write_property_mock, + create_custom_user_mock, create_custom_user_2_mock, get_YN_input_mock, read_ambari_user_mock): # Scenario: user is already defined, user does not want to reconfigure it read_ambari_user_mock.return_value = "dummy-user" get_YN_input_mock.return_value = False - result = check_ambari_user(options) + result = check_ambari_user() self.assertTrue(get_YN_input_mock.called) - self.assertFalse(get_validated_string_input_mock.called) - self.assertFalse(run_os_command_mock.called) + self.assertFalse(write_property_mock.called) + self.assertFalse(create_custom_user_mock.called or create_custom_user_2_mock.called) self.assertTrue(adjust_directory_permissions_mock.called) - self.assertEqual(result[0], 0) + self.assertEqual(result, 0) get_YN_input_mock.reset_mock() - get_validated_string_input_mock.reset_mock() - run_os_command_mock.reset_mock() + write_property_mock.reset_mock() adjust_directory_permissions_mock.reset_mock() + create_custom_user_mock.reset_mock() + create_custom_user_2_mock.reset_mock() # Scenario: user is already defined, but user wants to reconfigure it read_ambari_user_mock.return_value = "dummy-user" - get_validated_string_input_mock.return_value = "new-dummy-user" + create_custom_user_2_mock.return_value = create_custom_user_mock.return_value = (0, "new-dummy-user") get_YN_input_mock.return_value = True - result = check_ambari_user(options) + result = check_ambari_user() self.assertTrue(get_YN_input_mock.called) - self.assertTrue(result[2] == "new-dummy-user") - self.assertTrue(get_validated_string_input_mock.called) + self.assertTrue(write_property_mock.called) + self.assertTrue(write_property_mock.call_args[0][1] == "new-dummy-user") + self.assertTrue(create_custom_user_mock.called or create_custom_user_2_mock.called) self.assertTrue(adjust_directory_permissions_mock.called) - self.assertEqual(result[0], 0) + self.assertEqual(result, 0) get_YN_input_mock.reset_mock() - get_validated_string_input_mock.reset_mock() - run_os_command_mock.reset_mock() + write_property_mock.reset_mock() adjust_directory_permissions_mock.reset_mock() + create_custom_user_mock.reset_mock() + create_custom_user_2_mock.reset_mock() # Negative scenario: user is already defined, but user wants # to reconfigure it, user creation failed read_ambari_user_mock.return_value = "dummy-user" - run_os_command_mock.return_value = (1, "", "") + create_custom_user_2_mock.return_value = create_custom_user_mock.return_value = (1, None) get_YN_input_mock.return_value = True - result = check_ambari_user(options) + result = check_ambari_user() self.assertTrue(get_YN_input_mock.called) - self.assertTrue(get_validated_string_input_mock.called) - self.assertTrue(run_os_command_mock.called) + self.assertTrue(create_custom_user_mock.called or create_custom_user_2_mock.called) + self.assertFalse(write_property_mock.called) self.assertFalse(adjust_directory_permissions_mock.called) - self.assertEqual(result[0], 1) + self.assertEqual(result, 1) get_YN_input_mock.reset_mock() - get_validated_string_input_mock.reset_mock() - run_os_command_mock.reset_mock() + create_custom_user_mock.reset_mock() + create_custom_user_2_mock.reset_mock() + write_property_mock.reset_mock() adjust_directory_permissions_mock.reset_mock() # Scenario: user is not defined (setup process) read_ambari_user_mock.return_value = None get_YN_input_mock.return_value = True - get_validated_string_input_mock.return_value = "dummy-user" - run_os_command_mock.return_value = (0, "", "") - result = check_ambari_user(options) + create_custom_user_2_mock.return_value = create_custom_user_mock.return_value = (0, "dummy-user") + result = check_ambari_user() self.assertTrue(get_YN_input_mock.called) - self.assertTrue(get_validated_string_input_mock.called) - self.assertTrue(run_os_command_mock.called) - self.assertTrue(result[2] == "dummy-user") + self.assertTrue(create_custom_user_mock.called or create_custom_user_2_mock.called) + self.assertTrue(write_property_mock.called) + self.assertTrue(write_property_mock.call_args[0][1] == "dummy-user") self.assertTrue(adjust_directory_permissions_mock.called) - self.assertEqual(result[0], 0) + self.assertEqual(result, 0) get_YN_input_mock.reset_mock() - get_validated_string_input_mock.reset_mock() - run_os_command_mock.reset_mock() + create_custom_user_mock.reset_mock() + create_custom_user_2_mock.reset_mock() + write_property_mock.reset_mock() adjust_directory_permissions_mock.reset_mock() # Scenario: user is not defined (setup process), user creation failed read_ambari_user_mock.return_value = None get_YN_input_mock.return_value = True - run_os_command_mock.return_value = (1, "", "") - result = check_ambari_user(options) + create_custom_user_2_mock.return_value = create_custom_user_mock.return_value = (1, None) + result = check_ambari_user() self.assertTrue(get_YN_input_mock.called) - self.assertTrue(get_validated_string_input_mock.called) - self.assertTrue(run_os_command_mock.called) + self.assertTrue(create_custom_user_mock.called or create_custom_user_2_mock.called) + self.assertFalse(write_property_mock.called) self.assertFalse(adjust_directory_permissions_mock.called) - self.assertEqual(result[0], 1) + self.assertEqual(result, 1) get_YN_input_mock.reset_mock() - get_validated_string_input_mock.reset_mock() - run_os_command_mock.reset_mock() + create_custom_user_mock.reset_mock() + create_custom_user_2_mock.reset_mock() + write_property_mock.reset_mock() adjust_directory_permissions_mock.reset_mock() # negative scenario: user is not defined (setup process), user creation failed read_ambari_user_mock.return_value = None get_YN_input_mock.return_value = True - run_os_command_mock.return_value = (1, "", "") - result = check_ambari_user(options) + create_custom_user_2_mock.return_value = create_custom_user_mock.return_value = (1, None) + result = check_ambari_user() self.assertTrue(get_YN_input_mock.called) - self.assertTrue(get_validated_string_input_mock.called) - self.assertTrue(run_os_command_mock.called) + self.assertTrue(create_custom_user_mock.called or create_custom_user_2_mock.called) + self.assertFalse(write_property_mock.called) self.assertFalse(adjust_directory_permissions_mock.called) - self.assertEqual(result[0], 1) + self.assertEqual(result, 1) get_YN_input_mock.reset_mock() - get_validated_string_input_mock.reset_mock() - run_os_command_mock.reset_mock() + create_custom_user_mock.reset_mock() + create_custom_user_2_mock.reset_mock() + write_property_mock.reset_mock() adjust_directory_permissions_mock.reset_mock() # Scenario: user is not defined and left to be root read_ambari_user_mock.return_value = None get_YN_input_mock.return_value = False - result = check_ambari_user(options) + result = check_ambari_user() self.assertTrue(get_YN_input_mock.called) - self.assertFalse(get_validated_string_input_mock.called) - self.assertFalse(run_os_command_mock.called) - self.assertTrue(result[2] == "root") + self.assertFalse(create_custom_user_mock.called or create_custom_user_2_mock.called) + self.assertTrue(write_property_mock.called) + self.assertTrue(write_property_mock.call_args[0][1] == "root") self.assertTrue(adjust_directory_permissions_mock.called) - self.assertEqual(result[0], 0) + self.assertEqual(result, 0) pass @patch("ambari_server.serverConfiguration.search_file") @@ -2869,11 +2866,10 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV @patch("ambari_server.serverSetup.proceedJDBCProperties") @patch("ambari_server.serverSetup.extract_views") @patch("ambari_server.serverSetup.adjust_directory_permissions") - @patch("ambari_server.serverSetup.service_setup") @patch("ambari_server.serverSetup.read_ambari_user") @patch("ambari_server.serverSetup.expand_jce_zip_file") - def test_setup(self, expand_jce_zip_file_mock, read_ambari_user_mock, - service_setup_mock, adjust_dirs_mock, extract_views_mock, proceedJDBCProperties_mock, is_root_mock, + def test_setup(self, expand_jce_zip_file_mock, + read_ambari_user_mock, adjust_dirs_mock, extract_views_mock, proceedJDBCProperties_mock, is_root_mock, disable_security_enhancements_mock, check_jdbc_drivers_mock, check_ambari_user_mock, download_jdk_mock, configure_os_settings_mock, get_ambari_properties_mock, get_YN_input_mock, gvsi_mock, gvsi_1_mock, @@ -2973,7 +2969,7 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV # remote case is_root_mock.return_value = True disable_security_enhancements_mock.return_value = (0, "") - check_ambari_user_mock.return_value = (0, False, 'user', None) + check_ambari_user_mock.return_value = 0 check_jdbc_drivers_mock.return_value = 0 download_jdk_mock.return_value = 0 configure_os_settings_mock.return_value = 0 @@ -4756,7 +4752,7 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV read_password_mock.return_value = "encrypted_bigdata" ensure_jdbc_driver_installed_mock.return_value = True check_jdbc_drivers_mock.return_value = 0 - check_ambari_user_mock.return_value = (0, False, 'user', None) + check_ambari_user_mock.return_value = 0 download_jdk_mock.return_value = 0 configure_os_settings_mock.return_value = 0 verify_setup_allowed_method.return_value = 0 @@ -6433,7 +6429,7 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV verify_setup_allowed_method.return_value = 0 is_root_mock.return_value = True check_selinux_mock.return_value = 0 - check_ambari_user_mock.return_value = (0, False, 'user', None) + check_ambari_user_mock.return_value = 0 check_jdbc_drivers_mock.return_value = 0 check_postgre_up_mock.return_value = "running", 0, "", "" #is_local_database_mock.return_value = True
