client.kernel_config: Normalize the result of utils.running_config

All the config path manipulation in kernel_config relies
in comparisons like:

if orig_file == ''

running_config() may return None, that might in turn,
sneak into the lower level functions generating an
error. So let's play safe and pass '' in case the
result of running_config is None.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
kernel: Fix unittest broken by f8586dbb8f

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
client.job: Consolidate tests output options in one

Turn client/[tests|site-tests] into read only directories,
make all the output that required those dirs to be
read write to go to a configurable location. Consolidate
all previous options that dealt with test output:

* test_tmp_dir
* pkg_dir
* state_dir

Into a single one:

* test_output_dir

If that variable is not set, use the client temporary
directory to write those files into.

Signed-off-by: Don Zickus <dzickus@redhat.com>
Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
client.test: Create test_dir config key

This is actually a rename from test_src_dir, as it's more
clear for the purpose. This is the place where we can
configure additional directories where we can look for
test modules

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
client.tests: Make test src dir configurable

test.srcdir was still writing into the test module directory,
breaking our assumptions of read only test modules. So
let's fix this by allowing the src dir to be in the
configurable test_output_dir, or default to the client
tmpdir if that is not set.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
Replacing the obsolete env variable of bridge with the new one: netdst.

Signed-off-by: Vimal Patel <vipatel@redhat.com>
boottool: Don't fail if can't parse an index entry

Running autotest on a OpenSUSE client (12.1), that is
grub-based, I've found that boottool would fail with:

Traceback (most recent call last):
  File "/usr/local/autotest/tools/boottool", line 1994, in <module>
    app.run()
  File "/usr/local/autotest/tools/boottool", line 1804, in run
    result = action_method()
  File "/usr/local/autotest/tools/boottool", line 1885, in action_info
    entries = self.grubby.get_entries()
  File "/usr/local/autotest/tools/boottool", line 1010, in get_entries
    entries[entry["index"]] = entry
KeyError: 'index'

Turns out that the code is assuming that we can always
parse an index from the raw grubby output, leading to
the above error when the assumption does not hold true.

Fortunately, this is easy to fix, just handle KeyErrors
and continue on to parse the rest of the split parts
of the raw output.

CC: Cleber Rosa <crosa@redhat.com>
Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
boottool: Search for installed grub in the system

Current boottool assumes a hardcoded path for grub,
/sbin/grub. Distros such as OpenSUSE install it on
/usr/sbin/grub, so this will cause a grub setup to
flat out fail on those distros.

So let's leverage find_executable, that is already
present, to take care of actually finding the
appropriate grub path.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
boottool: Find installed nvsetenv command rather than hardcode it

In the same vein of the grub path problem, nvsetenv's path
is hardcoded, while it doesn't need to. Fix that as well.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
client.kernel_config: Uncompress /proc/config.gz and use as cfg

For systems that support /proc/config.gz, we can use the
config only if it's properly uncompressed. So, uncompress
the config file, and then pass it to autotest.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
boottool: Analyze both stdout and stderr from grub's output

Turns out grub shipped by OpenSUSE 12.1 has the batch cmd
savedefault disabled:

linux-yk2o:~ # grub --batch

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the
possible
   completions of a device/filename. ]
grub> savedefault --default=0 --once
savedefault --default=0 --once

Error 27: Unrecognized command

Horray for great engineering decisions! Kudos to the OpenSUSE team.

Also, since this wasn't captured by our code, it means
it went to stdout rather than stderr. So let's capture
both stdout and stderr to look for errors instead.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
boottool: Use 'grubonce' if available in grub legacy distros

The command 'grubonce' is a custom method to boot a bootloader
entry once, found in OpenSUSE 12.1. Let's try to use it if
found, then fall back to the more standard (and sane) method.

This fixes an issue booting new kernels on OpenSUSE 12.1.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
[RFC] global_config.ini: Enable SSH connection sharing by default

The autotest server needs to execute a bunch of a commands
on a test client for a typical job; each one of those
commands needs to wait on a costly authentication process.

Fortunately, SSH does have mechanisms to make subsequent
ssh sessions to use a master connection if available.
Search for ControlMaster in

http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1

What's even better, the support for Master SSH connection
already exists in autotest, only that it is turned off
by default. What I am proposing here is that we turn
this on so people can benefit from the speed boost on
jobs executed from an autotest server, without even
thinking about it.

We believe most of the scenarios involving installing an
autotest server use distros sufficiently recent to support
the MasterControl feature.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
Adding site_tests to client directory

The directory site_tests was conceived long ago as a
place to store tests internal to organizations, that
could not become upstream. Now in Fedora installs,
the absence of this directory will make the code to
throw an exception due to its absence. So let's include
it in the source tree, and install it with setup.py.

CC: Martin Krizek <mkrizek@redhat.com>
Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
client.shared.base_job: Use autotest_top_path when no AUTODIR is set

During test of the next branch, I've realized the AUTODIR
environment variable is not set on autoserv jobs, hence,
failing any server job. So, when AUTODIR is not set
(server side job), use the global_config.ini value of
autotest_top_path.

This fixes a bug that was preventing server side jobs to
work on next.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
boottool: improve error detectiom when running grub --batch

As a matter of fact, grub outputs to stdout a lot of
stuff. As sometimes errors might be in both stdout
and stderr (talk about something annoying), it's
just not practical to stablish a whitelist of strings.
Let's then look for everything that has an 'error'
in the message.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
server.autotest_remote: Transfer and clean state files properly

The autotest_remote code assumes the state of remote
control files is simply path/to/control + ".state". This
causes problem with our patches moving state file creation
to the test output dir set on global_config.ini, with
fall back to the autotest tmpdir area.

Fix the code, creating new attributes for the _BaseRun
class, that will make it easier to control and keep
consistency of the state file locations.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
client job: Adjust runjob method of loading a control file

We had to standardize that the state files will be
always on a temp area on the autotest client, so,
let's enforce this policy on runjob.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
server.autotest_remote_unittest: Fix unittest broken with 2648c15

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
Improve virsh_cmd() to support logging output control.

Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>

This patch introduces a new parameter print_info with default
value False to support logging output control.