salt/tests/integration/modules/mac_service.py
Nicole Thomas 9942ea9319 [develop] Merge forward from 2016.3 to develop (#32636)
* Ensure rh_service not used on CloudLinux 7

Add CloudLinux to RHEL-derived distros excluded from rh_service use in osrelease >= 7

* Fix binary search and replace (#32542)

* Don't return None from eval_master (#32555)

Raise an exception instead. Because eval master if returns should return
a tuple.

* redact passwords and hashes from user.present updates

Fixes #32381

* Better log message on minion restart if master couldn't be reached. (#32576)

* Revert PR #32480 and apply #32314 with fixes / documentation (#32558)

* Revert "Fix loop in maint.flo"

This reverts commit 5196cd6a6e5db3c7b1a47b1740881bbd3e87ea3d.

* Revert "Clear VCS fsbackend and git_pillar locks on master start"

This reverts commit 7e3caa9bae1ac4de62db9924374e35a8b826937e.

* Revert "Add functions to remove VCS fsbackend update locks and git_pillar update/checkout locks"

This reverts commit 4c2db32419022501eae2a695ec488693e043d189.

* prevent eternal gitfs lock due to process crash

* Use salt.utils.fopen() instead of open()

* Make pid locking work for more than just gitfs

Also, make logging more descriptive, to aid in troubleshooting.

* Add git_pillar_global_lock config option default value

* Document proper usage of {gitfs,git_pillar}_global_lock

* Fix comments value in salt.states.pkgrepo example (#32604)

'comments' option adds '#' automatically. Example contains `#http://mirror.centos.org/centos/$releasever/os/$basearch/` string which becomes prefixed with '##' in generated file.

* alphabetize directories for dynamic modules (#32599)

Also add engines and proxy minions to the list.

* Expand on the open-source vs open-core FAQ

* Language clarification.

* Fix some mistakes in the salt-ssh thin shell script (#32583)

* [[ is bash, not compatible with /bin/sh

* check if python command exists before calling it

* Deprecate 'user' and 'group' in state cmd (#32613)

* Remove unused 'group' argument

* Fix unit testing of cmd.mod_run_check without group arg

* Deprecate 'user/group' in cmd.run

* Deprecate 'user'/'group' in cmd.script

* Deprecate 'user' in cmd.wait

* Deprecate 'user'/'group' in cmd.wait_script

* Fix mod_run_check without 'group'

* Push deprecation back one release

* Fix mac_service and mac_system modules (#32587)

* Fix mac_service module

* Add integration tests for new functions

* Start will not enable the service beforehand

* Remove unused variables
2016-04-18 08:40:20 -06:00

232 lines
6.8 KiB
Python

# -*- coding: utf-8 -*-
'''
integration tests for mac_service
'''
# Import python libs
from __future__ import absolute_import, print_function
# Import Salt Testing libs
from salttesting.helpers import ensure_in_syspath, destructiveTest
ensure_in_syspath('../../')
# Import salt libs
import integration
import salt.utils
class MacServiceModuleTest(integration.ModuleCase):
'''
Validate the mac_service module
'''
SERVICE_NAME = 'com.apple.apsd'
SERVICE_ENABLED = False
def setUp(self):
'''
Get current settings
'''
if not salt.utils.is_darwin():
self.skipTest('Test only available on Mac OS X')
if not salt.utils.which('launchctl'):
self.skipTest('Test requires launchctl binary')
if not salt.utils.which('plutil'):
self.skipTest('Test requires plutil binary')
if salt.utils.get_uid(salt.utils.get_user()) != 0:
self.skipTest('Test requires root')
self.SERVICE_ENABLED = self.run_function('service.enabled',
[self.SERVICE_NAME])
def tearDown(self):
'''
Reset to original settings
'''
if self.SERVICE_ENABLED:
self.run_function('service.start', [self.SERVICE_NAME])
else:
self.run_function('service.stop', [self.SERVICE_NAME])
def test_show(self):
'''
Test service.show
'''
# Existing Service
service_info = self.run_function('service.show', [self.SERVICE_NAME])
self.assertIsInstance(service_info, dict)
self.assertEqual(service_info['plist']['Label'], self.SERVICE_NAME)
# Missing Service
self.assertIn(
'Service not found',
self.run_function('service.show', ['spongebob']))
def test_launchctl(self):
'''
Test service.launchctl
'''
# Expected Functionality
self.assertTrue(
self.run_function('service.launchctl', ['error', 'bootstrap', 64]))
self.assertEqual(
self.run_function('service.launchctl',
['error', 'bootstrap', 64],
return_stdout=True),
'64: unknown error code')
# Raise an error
self.assertIn(
' Failed to error service',
self.run_function('service.launchctl', ['error']))
def test_list(self):
'''
Test service.list
'''
# Expected Functionality
self.assertIn('PID', self.run_function('service.list'))
self.assertIn(
'{',
self.run_function('service.list', ['com.apple.coreservicesd']))
# Service not found
self.assertIn(
'Service not found',
self.run_function('service.list', ['spongebob']))
@destructiveTest
def test_enable(self):
'''
Test service.enable
'''
self.assertTrue(
self.run_function('service.enable', [self.SERVICE_NAME]))
self.assertIn(
'Service not found',
self.run_function('service.enable', ['spongebob']))
@destructiveTest
def test_disable(self):
'''
Test service.disable
'''
self.assertTrue(
self.run_function('service.disable', [self.SERVICE_NAME]))
self.assertIn(
'Service not found',
self.run_function('service.disable', ['spongebob']))
@destructiveTest
def test_start(self):
'''
Test service.start
Test service.stop
Test service.status
'''
self.assertTrue(self.run_function('service.start', [self.SERVICE_NAME]))
self.assertIn(
'Service not found',
self.run_function('service.start', ['spongebob']))
@destructiveTest
def test_stop(self):
'''
Test service.stop
'''
self.assertTrue(self.run_function('service.stop', [self.SERVICE_NAME]))
self.assertIn(
'Service not found',
self.run_function('service.stop', ['spongebob']))
@destructiveTest
def test_status(self):
'''
Test service.status
'''
# A running service
self.assertTrue(self.run_function('service.start', [self.SERVICE_NAME]))
self.assertTrue(
self.run_function('service.status', [self.SERVICE_NAME]).isdigit())
# A stopped service
self.assertTrue(self.run_function('service.stop', [self.SERVICE_NAME]))
self.assertEqual(
'',
self.run_function('service.status', [self.SERVICE_NAME]))
# Service not found
self.assertEqual('', self.run_function('service.status', ['spongebob']))
def test_available(self):
'''
Test service.available
'''
self.assertTrue(
self.run_function('service.available', [self.SERVICE_NAME]))
self.assertFalse(self.run_function('service.available', ['spongebob']))
def test_missing(self):
'''
Test service.missing
'''
self.assertFalse(self.run_function('service.missing', [self.SERVICE_NAME]))
self.assertTrue(self.run_function('service.missing', ['spongebob']))
@destructiveTest
def test_enabled(self):
'''
Test service.enabled
'''
self.assertTrue(self.run_function('service.start', [self.SERVICE_NAME]))
self.assertTrue(
self.run_function('service.enabled', [self.SERVICE_NAME]))
self.assertTrue(self.run_function('service.stop', [self.SERVICE_NAME]))
self.assertFalse(
self.run_function('service.enabled', [self.SERVICE_NAME]))
self.assertFalse(self.run_function('service.enabled', ['spongebob']))
@destructiveTest
def test_disabled(self):
'''
Test service.disabled
'''
self.assertTrue(self.run_function('service.start', [self.SERVICE_NAME]))
self.assertFalse(
self.run_function('service.disabled', [self.SERVICE_NAME]))
self.assertTrue(self.run_function('service.stop', [self.SERVICE_NAME]))
self.assertTrue(
self.run_function('service.disabled', [self.SERVICE_NAME]))
self.assertTrue(self.run_function('service.disabled', ['spongebob']))
def test_get_all(self):
'''
Test service.get_all
'''
services = self.run_function('service.get_all')
self.assertIsInstance(services, list)
self.assertIn(self.SERVICE_NAME, services)
def test_get_enabled(self):
'''
Test service.get_enabled
'''
services = self.run_function('service.get_enabled')
self.assertIsInstance(services, list)
self.assertIn('com.apple.coreservicesd', services)
if __name__ == '__main__':
from integration import run_tests
run_tests(MacServiceModuleTest)