On 01/29/2013 07:08 PM, Vadim Bendebury wrote:
On Tue, Jan 29, 2013 at 12:27 PM, Lucas Meneghel Rodrigues
<[email protected]> wrote:
On 01/29/2013 04:44 PM, Vadim Bendebury wrote:

guys, I need to write an autotest which would do something with the
DUT, but will not require any DUT activity, in fact the DUT could be
down while this test is running.


Interesting, never faced such a situation before.

For people not familiar with the terminology, DUT is an acronym for Device
Under Test.


I can hack up some changes which prevent attempts to install on the
client and the test succeeds, but before going much further I am
wondering: is there maybe a suggested/approved way of doing it?


I remember you can create hostless jobs with the autotest server, but I'm
not sure if that's what you want. Is it possible to share some more details
on what this test does?


yes, basically this test re-images the DUT's firmware. The firmware
rolls hot off the build farm, sometimes it is defective and the DUT is
bricked after reimaging. So, there is some special external hardware
which allows to take control of the DUT and program the firmware image
"externally".

"hostless" seems exactly the right name for this mode, are there some
docs or examples of this?

I concocted some changes to suppress attempts to connect/copy stuff to
the client (they kick in if client_down=True is added to
job.run_test() arguments in the control file) :

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
diff --git a/server/test.py b/server/test.py
index 221962d..ad625ad 100644
--- a/server/test.py
+++ b/server/test.py
@@ -55,6 +55,9 @@ job.record('GOOD', '', 'sysinfo.iteration.%s')

  def install_autotest_and_run(func):
      def wrapper(self, mytest):
+        if self.client_down:
+            return
+
          host, at, outputdir = self._install()
          try:
              host.erase_dir_contents(outputdir)
@@ -69,9 +72,10 @@ def install_autotest_and_run(func):


  class _sysinfo_logger(object):
-    def __init__(self, job):
+    def __init__(self, job, client_down=False):
          self.job = job
          self.pickle = None
+        self.client_down = client_down

          # for now support a single host
          self.host = None
@@ -230,7 +234,8 @@ class _sysinfo_logger(object):

  def runtest(job, url, tag, args, dargs):
      if not dargs.pop('disable_sysinfo', False):
-        logger = _sysinfo_logger(job)
+        logger = _sysinfo_logger(
+            job, client_down=dargs.get('client_down', False))
          logging_args = [logger.before_hook, logger.after_hook,
                          logger.before_iteration_hook,
                          logger.after_iteration_hook]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

and it actually allows the test to run to completion, but then in the
end it throws this error:

13:01:13 INFO | Failed to copy /var/log/messages at startup: command
execution error
* Command:
     /usr/bin/ssh -a -x   -o StrictHostKeyChecking=no -o
     UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=30 -o
     ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ConnectionAttempts=4
     -o Protocol=2 -l root -p 22 192.168.1.4 "export LIBC_FATAL_STDERR_=1; rm
     -f /var/tmp/messages.autotest_start"
Exit status: 255
Duration: 12.0129139423

stderr:
ssh: connect to host 192.168.1.4 port 22: No route to host


which I am sure could also be avoided, but I don't want to reinvent
another wheel :)

Sure, I was searching for docs on how to use hostless jobs, but, alas, there's none whatsoever :( I know that you can select Hostless Job on a checkbox on the create job tab of the web UI, but I can't seem to figure how to use that from a control file, for example :(

Sorry for keeping you waiting, it's just that I really wanted to find out and be more helpful, but I just couldn't :(

Lucas

_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel

Reply via email to