123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- # -*- coding: utf-8 -*-
- """
- :codeauthor: Nicole Thomas <nicole@saltstack.com>
- """
- from __future__ import absolute_import, print_function, unicode_literals
- import os
- import salt.ext.six as six
- import salt.utils.files
- from salt.exceptions import CommandExecutionError
- from tests.support.case import ModuleCase
- from tests.support.helpers import (
- destructiveTest,
- random_string,
- runs_on,
- skip_if_not_root,
- slowTest,
- )
- # Create user strings for tests
- ADD_USER = random_string("RS-", lowercase=False)
- DEL_USER = random_string("RS-", lowercase=False)
- PRIMARY_GROUP_USER = random_string("RS-", lowercase=False)
- CHANGE_USER = random_string("RS-", lowercase=False)
- @destructiveTest
- @skip_if_not_root
- @runs_on(kernel="Darwin")
- class MacUserModuleTest(ModuleCase):
- """
- Integration tests for the mac_user module
- """
- def setUp(self):
- """
- Sets up test requirements
- """
- super(MacUserModuleTest, self).setUp()
- os_grain = self.run_function("grains.item", ["kernel"])
- if os_grain["kernel"] not in "Darwin":
- self.skipTest("Test not applicable to '{kernel}' kernel".format(**os_grain))
- @slowTest
- def test_mac_user_add(self):
- """
- Tests the add function
- """
- try:
- self.run_function("user.add", [ADD_USER])
- user_info = self.run_function("user.info", [ADD_USER])
- self.assertEqual(ADD_USER, user_info["name"])
- except CommandExecutionError:
- self.run_function("user.delete", [ADD_USER])
- raise
- @slowTest
- def test_mac_user_delete(self):
- """
- Tests the delete function
- """
- # Create a user to delete - If unsuccessful, skip the test
- if self.run_function("user.add", [DEL_USER]) is not True:
- self.run_function("user.delete", [DEL_USER])
- self.skipTest("Failed to create a user to delete")
- # Now try to delete the added user
- ret = self.run_function("user.delete", [DEL_USER])
- self.assertTrue(ret)
- @slowTest
- def test_mac_user_primary_group(self):
- """
- Tests the primary_group function
- """
- # Create a user to test primary group function
- if self.run_function("user.add", [PRIMARY_GROUP_USER]) is not True:
- self.run_function("user.delete", [PRIMARY_GROUP_USER])
- self.skipTest("Failed to create a user")
- try:
- # Test mac_user.primary_group
- primary_group = self.run_function(
- "user.primary_group", [PRIMARY_GROUP_USER]
- )
- uid_info = self.run_function("user.info", [PRIMARY_GROUP_USER])
- self.assertIn(primary_group, uid_info["groups"])
- except AssertionError:
- self.run_function("user.delete", [PRIMARY_GROUP_USER])
- raise
- @slowTest
- def test_mac_user_changes(self):
- """
- Tests mac_user functions that change user properties
- """
- # Create a user to manipulate - if unsuccessful, skip the test
- if self.run_function("user.add", [CHANGE_USER]) is not True:
- self.run_function("user.delete", [CHANGE_USER])
- self.skipTest("Failed to create a user")
- try:
- # Test mac_user.chuid
- self.run_function("user.chuid", [CHANGE_USER, 4376])
- uid_info = self.run_function("user.info", [CHANGE_USER])
- self.assertEqual(uid_info["uid"], 4376)
- # Test mac_user.chgid
- self.run_function("user.chgid", [CHANGE_USER, 4376])
- gid_info = self.run_function("user.info", [CHANGE_USER])
- self.assertEqual(gid_info["gid"], 4376)
- # Test mac.user.chshell
- self.run_function("user.chshell", [CHANGE_USER, "/bin/zsh"])
- shell_info = self.run_function("user.info", [CHANGE_USER])
- self.assertEqual(shell_info["shell"], "/bin/zsh")
- # Test mac_user.chhome
- self.run_function("user.chhome", [CHANGE_USER, "/Users/foo"])
- home_info = self.run_function("user.info", [CHANGE_USER])
- self.assertEqual(home_info["home"], "/Users/foo")
- # Test mac_user.chfullname
- self.run_function("user.chfullname", [CHANGE_USER, "Foo Bar"])
- fullname_info = self.run_function("user.info", [CHANGE_USER])
- self.assertEqual(fullname_info["fullname"], "Foo Bar")
- # Test mac_user.chgroups
- self.run_function("user.chgroups", [CHANGE_USER, "wheel"])
- groups_info = self.run_function("user.info", [CHANGE_USER])
- self.assertEqual(groups_info["groups"], ["wheel"])
- except AssertionError:
- self.run_function("user.delete", [CHANGE_USER])
- raise
- @slowTest
- def test_mac_user_enable_auto_login(self):
- """
- Tests mac_user functions that enable auto login
- """
- # Make sure auto login is disabled before we start
- if self.run_function("user.get_auto_login"):
- self.skipTest("Auto login already enabled")
- try:
- # Does enable return True
- self.assertTrue(
- self.run_function(
- "user.enable_auto_login", ["Spongebob", "Squarepants"]
- )
- )
- # Did it set the user entry in the plist file
- self.assertEqual(self.run_function("user.get_auto_login"), "Spongebob")
- # Did it generate the `/etc/kcpassword` file
- self.assertTrue(os.path.exists("/etc/kcpassword"))
- # Are the contents of the file correct
- if six.PY2:
- test_data = b".\xf8'B\xa0\xd9\xad\x8b\xcd\xcdl"
- else:
- test_data = (
- b".\xc3\xb8'B\xc2\xa0\xc3\x99\xc2\xad\xc2\x8b\xc3\x8d\xc3\x8dl"
- )
- with salt.utils.files.fopen(
- "/etc/kcpassword", "r" if six.PY2 else "rb"
- ) as f:
- file_data = f.read()
- self.assertEqual(test_data, file_data)
- # Does disable return True
- self.assertTrue(self.run_function("user.disable_auto_login"))
- # Does it remove the user entry in the plist file
- self.assertFalse(self.run_function("user.get_auto_login"))
- # Is the `/etc/kcpassword` file removed
- self.assertFalse(os.path.exists("/etc/kcpassword"))
- finally:
- # Make sure auto_login is disabled
- self.assertTrue(self.run_function("user.disable_auto_login"))
- # Make sure autologin is disabled
- if self.run_function("user.get_auto_login"):
- raise Exception("Failed to disable auto login")
- @slowTest
- def test_mac_user_disable_auto_login(self):
- """
- Tests mac_user functions that disable auto login
- """
- # Make sure auto login is enabled before we start
- # Is there an existing setting
- if self.run_function("user.get_auto_login"):
- self.skipTest("Auto login already enabled")
- try:
- # Enable auto login for the test
- self.run_function("user.enable_auto_login", ["Spongebob", "Squarepants"])
- # Make sure auto login got set up
- if not self.run_function("user.get_auto_login") == "Spongebob":
- raise Exception("Failed to enable auto login")
- # Does disable return True
- self.assertTrue(self.run_function("user.disable_auto_login"))
- # Does it remove the user entry in the plist file
- self.assertFalse(self.run_function("user.get_auto_login"))
- # Is the `/etc/kcpassword` file removed
- self.assertFalse(os.path.exists("/etc/kcpassword"))
- finally:
- # Make sure auto login is disabled
- self.assertTrue(self.run_function("user.disable_auto_login"))
- # Make sure auto login is disabled
- if self.run_function("user.get_auto_login"):
- raise Exception("Failed to disable auto login")
- def tearDown(self):
- """
- Clean up after tests
- """
- # Delete ADD_USER
- add_info = self.run_function("user.info", [ADD_USER])
- if add_info:
- self.run_function("user.delete", [ADD_USER])
- # Delete DEL_USER if something failed
- del_info = self.run_function("user.info", [DEL_USER])
- if del_info:
- self.run_function("user.delete", [DEL_USER])
- # Delete CHANGE_USER
- change_info = self.run_function("user.info", [CHANGE_USER])
- if change_info:
- self.run_function("user.delete", [CHANGE_USER])
|