support for no announcement when executing shutdown and restart ad-hoc commands
darcs-hash:20070913183045-86b55-8787f7f133b4d4a4be20279ddf5a6d3d81022fd3.gz
This commit is contained in:
@@ -1083,14 +1083,15 @@ class JCLCommandManager(CommandManager):
|
|||||||
def execute_restart_2(self, info_query, session_context,
|
def execute_restart_2(self, info_query, session_context,
|
||||||
command_node, lang_class):
|
command_node, lang_class):
|
||||||
self.__logger.debug("Executing command 'restart' step 2")
|
self.__logger.debug("Executing command 'restart' step 2")
|
||||||
announcement = session_context["announcement"][0]
|
|
||||||
delay = int(session_context["delay"][0])
|
delay = int(session_context["delay"][0])
|
||||||
|
result = []
|
||||||
|
if session_context.has_key("announcement"):
|
||||||
|
announcement = session_context["announcement"][0]
|
||||||
if announcement is not None and announcement != "":
|
if announcement is not None and announcement != "":
|
||||||
users = account.get_all_users(\
|
users = account.get_all_users(\
|
||||||
filter=AND(Account.q.userID == User.q.id,
|
filter=AND(Account.q.userID == User.q.id,
|
||||||
Account.q._status != account.OFFLINE),
|
Account.q._status != account.OFFLINE),
|
||||||
distinct=True)
|
distinct=True)
|
||||||
result = []
|
|
||||||
for user in users:
|
for user in users:
|
||||||
result.append(Message(from_jid=self.component.jid,
|
result.append(Message(from_jid=self.component.jid,
|
||||||
to_jid=user.jid,
|
to_jid=user.jid,
|
||||||
@@ -1143,14 +1144,15 @@ class JCLCommandManager(CommandManager):
|
|||||||
def execute_shutdown_2(self, info_query, session_context,
|
def execute_shutdown_2(self, info_query, session_context,
|
||||||
command_node, lang_class):
|
command_node, lang_class):
|
||||||
self.__logger.debug("Executing command 'shutdown' step 2")
|
self.__logger.debug("Executing command 'shutdown' step 2")
|
||||||
announcement = session_context["announcement"][0]
|
|
||||||
delay = int(session_context["delay"][0])
|
delay = int(session_context["delay"][0])
|
||||||
|
result = []
|
||||||
|
if session_context.has_key("announcement"):
|
||||||
|
announcement = session_context["announcement"][0]
|
||||||
if announcement is not None and announcement != "":
|
if announcement is not None and announcement != "":
|
||||||
users = account.get_all_users(\
|
users = account.get_all_users(\
|
||||||
filter=AND(Account.q.userID == User.q.id,
|
filter=AND(Account.q.userID == User.q.id,
|
||||||
Account.q._status != account.OFFLINE),
|
Account.q._status != account.OFFLINE),
|
||||||
distinct=True)
|
distinct=True)
|
||||||
result = []
|
|
||||||
for user in users:
|
for user in users:
|
||||||
result.append(Message(from_jid=self.component.jid,
|
result.append(Message(from_jid=self.component.jid,
|
||||||
to_jid=user.jid,
|
to_jid=user.jid,
|
||||||
|
|||||||
@@ -2849,7 +2849,7 @@ class JCLCommandManager_TestCase(JCLTestCase):
|
|||||||
self.assertEquals(self.comp.config.get("component", "admins"),
|
self.assertEquals(self.comp.config.get("component", "admins"),
|
||||||
"admin3@test.com,admin4@test.com")
|
"admin3@test.com,admin4@test.com")
|
||||||
|
|
||||||
def test_execute_restart(self):
|
def _common_execute_restart(self):
|
||||||
self.comp.account_manager.account_classes = (ExampleAccount,
|
self.comp.account_manager.account_classes = (ExampleAccount,
|
||||||
Example2Account)
|
Example2Account)
|
||||||
self.comp.running = True
|
self.comp.running = True
|
||||||
@@ -2930,6 +2930,11 @@ class JCLCommandManager_TestCase(JCLTestCase):
|
|||||||
submit_form.add_field(field_type="list-multi",
|
submit_form.add_field(field_type="list-multi",
|
||||||
name="delay",
|
name="delay",
|
||||||
value=[0])
|
value=[0])
|
||||||
|
return (submit_form, command_node, info_query, xml_command, session_id)
|
||||||
|
|
||||||
|
def test_execute_restart(self):
|
||||||
|
(submit_form, command_node, info_query,
|
||||||
|
xml_command, session_id) = self._common_execute_restart()
|
||||||
submit_form.add_field(field_type="text-multi",
|
submit_form.add_field(field_type="text-multi",
|
||||||
name="announcement",
|
name="announcement",
|
||||||
value=["service will be restarted in 0 second"])
|
value=["service will be restarted in 0 second"])
|
||||||
@@ -2966,7 +2971,36 @@ class JCLCommandManager_TestCase(JCLTestCase):
|
|||||||
self.assertTrue(self.comp.restart)
|
self.assertTrue(self.comp.restart)
|
||||||
self.assertFalse(self.comp.running)
|
self.assertFalse(self.comp.running)
|
||||||
|
|
||||||
def test_execute_shutdown(self):
|
def test_execute_restart_no_announcement(self):
|
||||||
|
(submit_form, command_node, info_query,
|
||||||
|
xml_command, session_id) = self._common_execute_restart()
|
||||||
|
submit_form.as_xml(command_node)
|
||||||
|
result = self.command_manager.apply_command_action(\
|
||||||
|
info_query,
|
||||||
|
"http://jabber.org/protocol/admin#restart",
|
||||||
|
"execute")
|
||||||
|
self.assertNotEquals(result, None)
|
||||||
|
self.assertEquals(len(result), 1)
|
||||||
|
xml_command = result[0].xpath_eval("c:command",
|
||||||
|
{"c": "http://jabber.org/protocol/commands"})[0]
|
||||||
|
self.assertEquals(xml_command.prop("status"), "completed")
|
||||||
|
self.assertEquals(xml_command.prop("sessionid"), session_id)
|
||||||
|
self.__check_actions(result[0])
|
||||||
|
context_session = self.command_manager.sessions[session_id][1]
|
||||||
|
self.assertFalse(context_session.has_key("announcement"))
|
||||||
|
self.assertEquals(context_session["delay"],
|
||||||
|
["0"])
|
||||||
|
self.assertFalse(self.comp.restart)
|
||||||
|
self.assertTrue(self.comp.running)
|
||||||
|
threads = threading.enumerate()
|
||||||
|
self.assertEquals(len(threads), 2)
|
||||||
|
threading.Event().wait(1)
|
||||||
|
threads = threading.enumerate()
|
||||||
|
self.assertEquals(len(threads), 1)
|
||||||
|
self.assertTrue(self.comp.restart)
|
||||||
|
self.assertFalse(self.comp.running)
|
||||||
|
|
||||||
|
def _common_execute_shutdown(self):
|
||||||
self.comp.account_manager.account_classes = (ExampleAccount,
|
self.comp.account_manager.account_classes = (ExampleAccount,
|
||||||
Example2Account)
|
Example2Account)
|
||||||
self.comp.running = True
|
self.comp.running = True
|
||||||
@@ -3047,6 +3081,11 @@ class JCLCommandManager_TestCase(JCLTestCase):
|
|||||||
submit_form.add_field(field_type="list-single",
|
submit_form.add_field(field_type="list-single",
|
||||||
name="delay",
|
name="delay",
|
||||||
value=0)
|
value=0)
|
||||||
|
return (submit_form, command_node, info_query, xml_command, session_id)
|
||||||
|
|
||||||
|
def test_execute_shutdown(self):
|
||||||
|
(submit_form, command_node, info_query,
|
||||||
|
xml_command, session_id) = self._common_execute_shutdown()
|
||||||
submit_form.add_field(field_type="text-multi",
|
submit_form.add_field(field_type="text-multi",
|
||||||
name="announcement",
|
name="announcement",
|
||||||
value=["service will be shut in 0 second"])
|
value=["service will be shut in 0 second"])
|
||||||
@@ -3083,6 +3122,35 @@ class JCLCommandManager_TestCase(JCLTestCase):
|
|||||||
self.assertFalse(self.comp.restart)
|
self.assertFalse(self.comp.restart)
|
||||||
self.assertFalse(self.comp.running)
|
self.assertFalse(self.comp.running)
|
||||||
|
|
||||||
|
def test_execute_shutdown_no_announcement(self):
|
||||||
|
(submit_form, command_node, info_query,
|
||||||
|
xml_command, session_id) = self._common_execute_shutdown()
|
||||||
|
submit_form.as_xml(command_node)
|
||||||
|
result = self.command_manager.apply_command_action(\
|
||||||
|
info_query,
|
||||||
|
"http://jabber.org/protocol/admin#shutdown",
|
||||||
|
"execute")
|
||||||
|
self.assertNotEquals(result, None)
|
||||||
|
self.assertEquals(len(result), 1)
|
||||||
|
xml_command = result[0].xpath_eval("c:command",
|
||||||
|
{"c": "http://jabber.org/protocol/commands"})[0]
|
||||||
|
self.assertEquals(xml_command.prop("status"), "completed")
|
||||||
|
self.assertEquals(xml_command.prop("sessionid"), session_id)
|
||||||
|
self.__check_actions(result[0])
|
||||||
|
context_session = self.command_manager.sessions[session_id][1]
|
||||||
|
self.assertFalse(context_session.has_key("announcement"))
|
||||||
|
self.assertEquals(context_session["delay"],
|
||||||
|
["0"])
|
||||||
|
self.assertFalse(self.comp.restart)
|
||||||
|
self.assertTrue(self.comp.running)
|
||||||
|
threads = threading.enumerate()
|
||||||
|
self.assertEquals(len(threads), 2)
|
||||||
|
threading.Event().wait(1)
|
||||||
|
threads = threading.enumerate()
|
||||||
|
self.assertEquals(len(threads), 1)
|
||||||
|
self.assertFalse(self.comp.restart)
|
||||||
|
self.assertFalse(self.comp.running)
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
test_suite = unittest.TestSuite()
|
test_suite = unittest.TestSuite()
|
||||||
test_suite.addTest(unittest.makeSuite(CommandManager_TestCase, 'test'))
|
test_suite.addTest(unittest.makeSuite(CommandManager_TestCase, 'test'))
|
||||||
|
|||||||
Reference in New Issue
Block a user