Added a longer timeout to host job and host stat, as they do not
inherit from atest_list.

Added a --max-query option (default 20) to limit the number of jobs displayed.

Signed-off-by: Jean-Marc Eurin <jmeurin@google.com>



git-svn-id: http://test.kernel.org/svn/autotest/trunk@1977 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/cli/host.py b/cli/host.py
index a2de6d8..06826ed 100755
--- a/cli/host.py
+++ b/cli/host.py
@@ -27,7 +27,7 @@
 
 """
 
-import os, sys
+import os, sys, socket
 from autotest_lib.cli import topic_common, action_common
 
 
@@ -153,6 +153,7 @@
     usage_action = 'stat'
 
     def execute(self):
+        socket.setdefaulttimeout(topic_common.LIST_SOCKET_TIMEOUT)
         results = []
         # Convert wildcards into real host stats.
         existing_hosts = []
@@ -197,7 +198,23 @@
     """atest host jobs --mlist <file>|<hosts>"""
     usage_action = 'jobs'
 
+    def __init__(self):
+        super(host_jobs, self).__init__()
+        self.parser.add_option('-q', '--max-query',
+                               help='Limits the number of results '
+                               '(20 by default)',
+                               type='int', default=20)
+
+
+    def parse(self):
+        """Consume the specific options"""
+        (options, leftover) = super(host_jobs, self).parse(req_items=None)
+        self.max_queries = options.max_query
+        return (options, leftover)
+
+
     def execute(self):
+        socket.setdefaulttimeout(topic_common.LIST_SOCKET_TIMEOUT)
         results = []
         real_hosts = []
         for host in self.hosts:
@@ -213,7 +230,8 @@
 
         for host in real_hosts:
             queue_entries = self.execute_rpc('get_host_queue_entries',
-                                             host__hostname=host)
+                                             host__hostname=host,
+                                             query_limit=self.max_queries)
             queue_entries.sort(key=lambda qe: qe['job']['id'])
             queue_entries.reverse()
             jobs = []
diff --git a/cli/host_unittest.py b/cli/host_unittest.py
index ae564c5..ea782ef 100755
--- a/cli/host_unittest.py
+++ b/cli/host_unittest.py
@@ -654,7 +654,7 @@
         self.run_cmd(argv=['atest', 'host', 'jobs', 'host0',
                            '--ignore_site_file'],
                      rpcs=[('get_host_queue_entries',
-                            {'host__hostname': 'host0'},
+                            {'host__hostname': 'host0', 'query_limit': 20},
                             True,
                             [{u'status': u'Failed',
                               u'complete': 1,
@@ -743,7 +743,7 @@
                               u'platform': u'plat0',
                               u'id': 2}]),
                            ('get_host_queue_entries',
-                            {'host__hostname': 'host1'},
+                            {'host__hostname': 'host1', 'query_limit': 20},
                             True,
                             [{u'status': u'Failed',
                               u'complete': 1,
@@ -801,7 +801,7 @@
                                u'active': 0,
                                u'id': 3167}]),
                            ('get_host_queue_entries',
-                            {'host__hostname': 'host0'},
+                            {'host__hostname': 'host0', 'query_limit': 20},
                             True,
                             [{u'status': u'Failed',
                               u'complete': 1,
@@ -863,6 +863,74 @@
                                    '289', 'user1', 'Aborted',
                                    'testjob'])
 
+
+    def test_execute_jobs_one_host_limit(self):
+        self.run_cmd(argv=['atest', 'host', 'jobs', 'host0',
+                           '--ignore_site_file', '-q', '10'],
+                     rpcs=[('get_host_queue_entries',
+                            {'host__hostname': 'host0', 'query_limit': 10},
+                            True,
+                            [{u'status': u'Failed',
+                              u'complete': 1,
+                              u'host': {u'status': u'Ready',
+                                        u'locked': 1,
+                                        u'locked_by': 'user0',
+                                        u'hostname': u'host0',
+                                        u'invalid': 0,
+                                        u'id': 3232,
+                                        u'synch_id': None},
+                              u'priority': 0,
+                              u'meta_host': u'meta0',
+                              u'job': {u'control_file':
+                                       (u"def step_init():\n"
+                                        "\tjob.next_step([step_test])\n"
+                                        "\ttestkernel = job.kernel("
+                                        "'kernel-smp-2.6.xyz.x86_64.rpm')\n"
+                                        "\ttestkernel.install()\n"
+                                        "\ttestkernel.boot()\n\n"
+                                        "def step_test():\n"
+                                        "\tjob.run_test('kernbench')\n\n"),
+                                       u'name': u'kernel-smp-2.6.xyz.x86_64',
+                                       u'control_type': u'Client',
+                                       u'synchronizing': None,
+                                       u'priority': u'Low',
+                                       u'owner': u'user0',
+                                       u'created_on': u'2008-01-09 10:45:12',
+                                       u'synch_count': None,
+                                       u'synch_type': u'Asynchronous',
+                                       u'id': 216},
+                                       u'active': 0,
+                                       u'id': 2981},
+                              {u'status': u'Aborted',
+                               u'complete': 1,
+                               u'host': {u'status': u'Ready',
+                                         u'locked': 1,
+                                         u'locked_by': 'user0',
+                                         u'hostname': u'host0',
+                                         u'invalid': 0,
+                                         u'id': 3232,
+                                         u'synch_id': None},
+                               u'priority': 0,
+                               u'meta_host': None,
+                               u'job': {u'control_file':
+                                        u"job.run_test('sleeptest')\n\n",
+                                        u'name': u'testjob',
+                                        u'control_type': u'Client',
+                                        u'synchronizing': 0,
+                                        u'priority': u'Low',
+                                        u'owner': u'user1',
+                                        u'created_on': u'2008-01-17 15:04:53',
+                                        u'synch_count': None,
+                                        u'synch_type': u'Asynchronous',
+                                        u'id': 289},
+                               u'active': 0,
+                               u'id': 3167}])],
+                     out_words_ok=['216', 'user0', 'Failed',
+                                   'kernel-smp-2.6.xyz.x86_64', 'Aborted',
+                                   '289', 'user1', 'Aborted',
+                                   'testjob'])
+
+
 class host_mod_unittest(cli_mock.cli_unittest):
     def test_parse_ready_dead(self):
         sys.argv = ['atest', 'host', 'mod', '--ready', '--dead']