Implement 'get-last-error' ad-hoc command

darcs-hash:20071205172510-86b55-e013c564e730d9e979c4800f73fd9570a8aa7f74.gz
This commit is contained in:
David Rousselie
2007-12-05 18:25:10 +01:00
parent 40e18d3cea
commit 9fc62780bc
4 changed files with 119 additions and 0 deletions

View File

@@ -318,6 +318,7 @@ class JCLCommandManager(CommandManager):
(True, root_node_re)
self.commands["http://jabber.org/protocol/admin#shutdown"] = \
(True, root_node_re)
self.commands["jcl#get-last-error"] = (False, account_node_re)
def get_name_and_jid(self, mixed_name_and_jid):
return mixed_name_and_jid.split("/", 1)[:2]
@@ -1219,6 +1220,24 @@ class JCLCommandManager(CommandManager):
restart_thread.start()
return (None, result)
def execute_get_last_error_1(self, info_query, session_context,
command_node, lang_class):
self.__logger.debug("Executing command 'get-last-error' step 1")
result_form = Form(xmlnode_or_type="result")
bare_from_jid = info_query.get_from().bare()
account_name = info_query.get_to().node
_account = account.get_account(bare_from_jid, account_name)
if _account is not None and _account.error is not None:
last_error = _account.error
else:
last_error = lang_class.account_no_error
result_form.add_field(field_type="text-single",
label=lang_class.field_last_error,
value=last_error)
result_form.as_xml(command_node)
command_node.setProp("status", STATUS_COMPLETED)
return (result_form, [])
class CommandRootDiscoGetInfoHandler(RootDiscoGetInfoHandler):
def handle(self, info_query, lang_class, node, disco_obj, data):

View File

@@ -3472,6 +3472,97 @@ class JCLCommandManager_TestCase(JCLTestCase):
self.assertFalse(self.comp.restart)
self.assertFalse(self.comp.running)
def test_execute_get_last_error_no_error(self):
self.comp.account_manager.account_classes = (Account,)
user1 = User(jid="test1@test.com")
user2 = User(jid="test2@test.com")
account11 = Account(user=user1,
name="account11",
jid="account11@" + unicode(self.comp.jid))
account12 = Account(user=user1,
name="account12",
jid="account12@" + unicode(self.comp.jid))
account21 = Account(user=user2,
name="account21",
jid="account21@" + unicode(self.comp.jid))
account22 = Account(user=user2,
name="account11",
jid="account11@" + unicode(self.comp.jid))
info_query = Iq(stanza_type="set",
from_jid="test1@test.com",
to_jid="account11@" + unicode(self.comp.jid))
command_node = info_query.set_new_content(command.COMMAND_NS, "command")
command_node.setProp("node", "jcl#get-last-error")
result = self.command_manager.apply_command_action(info_query,
"jcl#get-last-error",
"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.assertNotEquals(xml_command.prop("sessionid"), None)
self._check_actions(result[0])
x_data = result[0].xpath_eval("c:command/data:x",
{"c": "http://jabber.org/protocol/commands",
"data": "jabber:x:data"})
self.assertEquals(len(x_data), 1)
self.assertEquals(x_data[0].prop("type"), "result")
fields = result[0].xpath_eval("c:command/data:x/data:field",
{"c": "http://jabber.org/protocol/commands",
"data": "jabber:x:data"})
self.assertEquals(len(fields), 1)
self.assertEquals(fields[0].prop("type"), "text-single")
self.assertEquals(fields[0].prop("label"), Lang.en.field_last_error)
self.assertEquals(fields[0].children.name, "value")
self.assertEquals(fields[0].children.content, Lang.en.account_no_error)
def test_execute_get_last_error(self):
self.comp.account_manager.account_classes = (Account,)
user1 = User(jid="test1@test.com")
user2 = User(jid="test2@test.com")
account11 = Account(user=user1,
name="account11",
jid="account11@" + unicode(self.comp.jid))
account11.error = "Current error"
account12 = Account(user=user1,
name="account12",
jid="account12@" + unicode(self.comp.jid))
account21 = Account(user=user2,
name="account21",
jid="account21@" + unicode(self.comp.jid))
account22 = Account(user=user2,
name="account11",
jid="account11@" + unicode(self.comp.jid))
info_query = Iq(stanza_type="set",
from_jid="test1@test.com",
to_jid="account11@" + unicode(self.comp.jid))
command_node = info_query.set_new_content(command.COMMAND_NS, "command")
command_node.setProp("node", "jcl#get-last-error")
result = self.command_manager.apply_command_action(info_query,
"jcl#get-last-error",
"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.assertNotEquals(xml_command.prop("sessionid"), None)
self._check_actions(result[0])
x_data = result[0].xpath_eval("c:command/data:x",
{"c": "http://jabber.org/protocol/commands",
"data": "jabber:x:data"})
self.assertEquals(len(x_data), 1)
self.assertEquals(x_data[0].prop("type"), "result")
fields = result[0].xpath_eval("c:command/data:x/data:field",
{"c": "http://jabber.org/protocol/commands",
"data": "jabber:x:data"})
self.assertEquals(len(fields), 1)
self.assertEquals(fields[0].prop("type"), "text-single")
self.assertEquals(fields[0].prop("label"), Lang.en.field_last_error)
self.assertEquals(fields[0].children.name, "value")
self.assertEquals(fields[0].children.content, "Current error")
def suite():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(CommandManager_TestCase, 'test'))

View File

@@ -240,6 +240,9 @@ class Lang:
help_message_subject = u"Help"
help_message_body = u"No help"
field_last_error = u"Last error"
account_no_error = u"This account has no error"
class fr:
component_name = u"composant générique Jabber Component Library"
register_title = u"Enregistrement d'un nouveau compte"
@@ -425,6 +428,9 @@ class Lang:
help_message_subject = u"Aide"
help_message_body = u"Pas d'aide !"
field_last_error = u"Dernière erreur"
account_no_error = u"Ce compte n'a pas d'erreur"
class nl:
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line
register_title = u"Registratie van verbindingen voor Jabber Mail"

View File

@@ -242,6 +242,9 @@ class Language_TestCase(unittest.TestCase):
self.assertNotEquals(self.lang_class.help_message_subject, None)
self.assertNotEquals(self.lang_class.help_message_body, None)
self.assertNotEquals(self.lang_class.field_last_error, None)
self.assertNotEquals(self.lang_class.account_no_error, None)
class Language_fr_TestCase(Language_TestCase):
def setUp(self):
self.lang_class = Lang.fr