#!/usr/bin/env python
import unittest
import common
from autotest.client import utils
from autotest.client.shared.mock import MagicMock, patch
import staging.service as service
[docs]class ConstantsTest(unittest.TestCase):
[docs] def test_ModuleLoad(self):
self.assertTrue(hasattr(service, 'COMMANDS'))
[docs]class SystemdGeneratorTest(unittest.TestCase):
[docs] def setUp(self):
helper = service.Factory.FactoryHelper()
helper.init_name = "systemd"
self.service_name = "fake_service"
self.cmd_generator = helper.get_generic_service_command_generator()
self.assertTrue(isinstance(self.cmd_generator,
service._ServiceCommandGenerator))
[docs] def test_all_command(self):
self.assertTrue(hasattr(self.cmd_generator, 'commands'))
for cmd in self.cmd_generator.commands:
self.assertTrue(hasattr(self.cmd_generator, cmd))
ret = getattr(self.cmd_generator, cmd)(self.service_name)
if cmd not in ["list", "set_target"]:
if cmd == "is_enabled":
cmd = "is-enabled"
elif cmd == "reset_failed":
cmd = "reset-failed"
elif cmd == "raw_status":
cmd = "status"
assert ret == ["systemctl", cmd, "%s.service" % self.service_name]
[docs] def test_list(self):
ret = getattr(self.cmd_generator, 'list')(self.service_name)
assert ret == ["systemctl", "list-unit-files", "--type=service",
"--no-pager", "--full"]
[docs] def test_set_target(self):
ret = getattr(self.cmd_generator, 'set_target')("multi-user.target")
assert ret == ["systemctl", "isolate", "multi-user.target"]
[docs]class SysVInitGeneratorTest(unittest.TestCase):
[docs] def setUp(self):
helper = service.Factory.FactoryHelper()
helper.init_name = "init"
self.service_name = "fake_service"
self.cmd_generator = helper.get_generic_service_command_generator()
self.assertTrue(isinstance(self.cmd_generator,
service._ServiceCommandGenerator))
[docs] def test_all_command(self):
self.assertTrue(hasattr(self.cmd_generator, 'commands'))
for cmd in self.cmd_generator.commands:
self.assertTrue(hasattr(self.cmd_generator, cmd))
if cmd not in ["list", "set_target", "reset_failed"]:
ret = getattr(self.cmd_generator, cmd)(self.service_name)
command_name = "service"
if cmd == "is_enabled":
command_name = "chkconfig"
cmd = ""
elif cmd == "enable":
command_name = "chkconfig"
cmd = "on"
elif cmd == "disable":
command_name = "chkconfig"
cmd = "off"
elif cmd == "raw_status":
cmd = "status"
assert ret == [command_name, self.service_name, cmd]
[docs] def test_set_target(self):
ret = getattr(self.cmd_generator, "set_target")("multi-user.target")
assert ret == ["telinit", "3"]
[docs]class ResultParserTest(unittest.TestCase):
[docs] def test_systemd_result_parser(self):
helper = service.Factory.FactoryHelper()
helper.init_name = "systemd"
result_parser = helper.get_generic_service_result_parser()
self.assertTrue(isinstance(result_parser,
service._ServiceResultParser))
self.assertTrue(hasattr(result_parser, 'commands'))
for cmd in result_parser.commands:
self.assertTrue(hasattr(result_parser, cmd))
# here just check status and list
self.assertEqual(result_parser.status,
service.systemd_status_parser)
self.assertEqual(result_parser.list,
service.systemd_list_parser)
del result_parser
del helper
[docs] def test_sysvinit_result_parser(self):
helper = service.Factory.FactoryHelper()
helper.init_name = "init"
result_parser = helper.get_generic_service_result_parser()
self.assertTrue(isinstance(result_parser,
service._ServiceResultParser))
self.assertTrue(hasattr(result_parser, 'commands'))
for cmd in result_parser.commands:
self.assertTrue(hasattr(result_parser, cmd))
# here just check status and list
self.assertEqual(result_parser.status,
service.sysvinit_status_parser)
self.assertEqual(result_parser.list,
service.sysvinit_list_parser)
del result_parser
del helper
[docs]class TestServiceManager(object):
def __init__(self, init_name, run_mock):
self.helper = service.Factory.FactoryHelper()
self.helper.init_name = init_name
self.helper.run = run_mock
[docs] def get_service_manager(self):
service_manager = self.helper.get_generic_service_manager_type()
# get command generator and result parser
command_generator = self.helper.get_generic_service_command_generator()
result_parser = self.helper.get_generic_service_result_parser()
return service_manager(command_generator, result_parser, self.helper.run)
[docs]class TestSystemdServiceManager(unittest.TestCase):
[docs] def setUp(self):
self.run_mock = MagicMock()
self.init_name = "systemd"
[docs] def test_start(self):
service = "lldpad"
service_manager = TestServiceManager(self.init_name,
self.run_mock).get_service_manager()
service_manager.start(service)
assert self.run_mock.call_args[0][
0] == "systemctl start %s.service" % service
del service_manager
[docs] def test_list(self):
list_result_mock = MagicMock(exit_status=0, stdout="sshd.service enabled\n"
"vsftpd.service disabled\n"
"systemd-sysctl.service static\n")
run_mock = MagicMock(return_value=list_result_mock)
service_manager = TestServiceManager(self.init_name,
run_mock).get_service_manager()
list_result = service_manager.list(ignore_status=False)
assert run_mock.call_args[0][
0] == "systemctl list-unit-files --type=service --no-pager --full"
assert list_result == {'sshd': "enabled",
'vsftpd': "disabled",
'systemd-sysctl': "static"}
[docs]class TestSysVInitServiceManager(unittest.TestCase):
[docs] def setUp(self):
self.run_mock = MagicMock()
self.init_name = "init"
[docs] def test_list(self):
list_result_mock = MagicMock(exit_status=0,
stdout="sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off\n"
"vsftpd 0:off 1:off 2:off 3:off 4:off 5:on 6:off\n"
"xinetd based services:\n"
" amanda: off\n"
" chargen-dgram: on\n")
run_mock = MagicMock(return_value=list_result_mock)
service_manager = TestServiceManager(self.init_name,
run_mock).get_service_manager()
list_result = service_manager.list(ignore_status=False)
assert run_mock.call_args[0][
0] == "chkconfig --list"
assert list_result == {'sshd': {0: "off", 1: "off", 2: "off", 3: "off", 4: "off", 5: "off", 6: "off"},
'vsftpd': {0: "off", 1: "off", 2: "off", 3: "off", 4: "off", 5: "on", 6: "off"},
'xinetd': {'amanda': "off", 'chargen-dgram': "on"}}
[docs] def test_enable(self):
service = "lldpad"
service_manager = TestServiceManager(self.init_name,
self.run_mock).get_service_manager()
service_manager.enable(service)
assert self.run_mock.call_args[0][0] == "chkconfig lldpad on"
[docs] def test_unknown_runlevel(self):
self.assertRaises(ValueError,
service.convert_sysv_runlevel, "unknown")
[docs] def test_runlevels(self):
assert service.convert_systemd_target_to_runlevel(
"poweroff.target") == '0'
assert service.convert_systemd_target_to_runlevel(
"rescue.target") == 's'
assert service.convert_systemd_target_to_runlevel(
"multi-user.target") == '3'
assert service.convert_systemd_target_to_runlevel(
"graphical.target") == '5'
assert service.convert_systemd_target_to_runlevel(
"reboot.target") == '6'
if __name__ == '__main__':
unittest.main()