[Avocado-devel] option --output-check-record behavior

Marcos E. Matsunaga Marcos.Matsunaga at oracle.com
Thu Sep 8 18:19:31 UTC 2016


Hi Cleber,

Sorry for being a pain. I've tried to use process.system to execute 
commands, but I got an error, that's why I kept the autotest libraries 
(I actually copied from one of the files in io-github-autotest-libvirt).

The error I'm getting is:

2016-09-08 13:49:25,844 sysinfo          L0371 INFO | Profiler disabled
2016-09-08 13:49:25,845 test             L0214 INFO | START 
1-/root/avocado-vt/io-fs-autotest-xen/xen/tests/xentest.py:xentest.test_xen_start_stop;1
2016-09-08 13:49:25,846 process          L0334 INFO | Running 'xl 
info|grep xen_version| awk '{print $3}''
2016-09-08 13:49:25,863 process          L0435 INFO | Command 'xl 
info|grep xen_version| awk '{print $3}'' finished with 1 after 
0.00377798080444s
2016-09-08 13:49:25,863 stacktrace       L0038 ERROR|
2016-09-08 13:49:25,863 stacktrace       L0041 ERROR| Reproduced 
traceback from: /usr/lib/python2.7/site-packages/avocado/core/test.py:448
2016-09-08 13:49:25,864 stacktrace       L0044 ERROR| Traceback (most 
recent call last):
2016-09-08 13:49:25,864 stacktrace       L0044 ERROR|   File 
"/root/avocado-vt/io-fs-autotest-xen/xen/tests/xentest.py", line 52, in 
test_xen_start_stop
2016-09-08 13:49:25,864 stacktrace       L0044 ERROR| xenversion = 
process.system_output(cmd, ignore_status=False)
2016-09-08 13:49:25,864 stacktrace       L0044 ERROR|   File 
"/usr/lib/python2.7/site-packages/avocado/utils/process.py", line 1139, 
in system_output
2016-09-08 13:49:25,864 stacktrace       L0044 ERROR| sudo=sudo)
2016-09-08 13:49:25,864 stacktrace       L0044 ERROR|   File 
"/usr/lib/python2.7/site-packages/avocado/utils/process.py", line 1046, 
in run
2016-09-08 13:49:25,864 stacktrace       L0044 ERROR|     raise 
CmdError(cmd, sp.result)
2016-09-08 13:49:25,864 stacktrace       L0044 ERROR| CmdError: Command 
'xl info|grep xen_version| awk '{print $3}'' failed (rc=1)
2016-09-08 13:49:25,864 stacktrace       L0045 ERROR|
2016-09-08 13:49:25,865 test             L0563 ERROR| Traceback (most 
recent call last):

2016-09-08 13:49:25,865 test             L0563 ERROR|   File 
"/usr/lib/python2.7/site-packages/avocado/core/test.py", line 503, in 
_run_avocado
     raise test_exception

2016-09-08 13:49:25,865 test             L0563 ERROR| CmdError: Command 
'xl info|grep xen_version| awk '{print $3}'' failed (rc=1)

I looked at "/usr/lib/python2.7/site-packages/avocado/utils/process.py", 
line 1139 and didn't see anything that could be causing the problem. I 
even tried to add "sudo=False" argument in process.system, but I get the 
same error.

Thanks again.

On 09/08/2016 06:36 PM, Cleber Rosa wrote:
> On 09/08/2016 01:50 PM, Marcos E. Matsunaga wrote:
>> On 09/08/2016 05:44 PM, Cleber Rosa wrote:
>>> On 09/08/2016 11:34 AM, Marcos E. Matsunaga wrote:
>>>> Hi Cleber,
>>>>
>>>> Thanks for your quick reply. That's exactly what I understood, but here
>>>> is what is happening
>>>>
>>>> I have a directory ~/avocado/xen/tests where I have the xentest.py
>>>> script. When I execute it, it does create the directory
>>>> ~/avocado/xen/tests/xentest.py.data with stderr.expected and
>>>> stdout.expected (empty). It also creates the two files (stdout and
>>>> stderr) in the job-results/latest directory, but also empty.
>>>>
>>>> The weird thing is that instead of saving, it reports to the job.log as
>>>> an error "L0151 ERROR| [stderr] Parsing config from /VM/guest1/vm.cf".
>>>>
>>>> That's why I think I am missing something.
>>> Can you post the full test code and the resulting `job.log` file?
>> Sure.. It is attached.
>> And the multiplex file I am using is:
>>
>> xentest:
>>      guest1:
>>          action: !mux
>>              start:
>>                  run_action: "create"
>>                  domain_name: "perf1"
>>                  sleep_time: 1
>>              stop:
>>                  run_action: "shutdown"
>>                  domain_name: "perf1"
>>                  sleep_time: 60
>>          guest_cfg: /Repo/VM/perf1/vm.cfg
>>
>>>> Thanks again for your help.
>>>>
>>>> On 09/08/2016 02:59 PM, Cleber Rosa wrote:
>>>>> On 09/08/2016 10:25 AM, Marcos E. Matsunaga wrote:
>>>>>> Hi All,
>>>>>>
>>>>>> I am new to avocado and have just started to look into it.
>>>>>>
>>>>>> I have been playing with avocado on Fedora 24 for a few weeks. I
>>>>>> wrote a
>>>>>> small script to run commands and was exploring the option
>>>>>> "--output-check-record", but it never populate the files
>>>>>> stderr.expected
>>>>>> and stdout.expected. Instead, it prints an error with "[stderr]" in
>>>>>> the
>>>>>> job.log file. My understanding is that the output (stderr and stdout)
>>>>>> of commands/scripts executed by avocado would be captured and saved on
>>>>>> those files (like on synctest.py example), but it doesn't. I want to
>>>>>> know if I am doing something wrong or it is a bug.
>>>>>>
>>>>> Hi Marcos,
>>>>>
>>>>> Avocado creates the `stdout` and `stderr` files in the test result
>>>>> directory.  In the synctest example, for instance, my contains:
>>>>>
>>>>> $ avocado run examples/tests/synctest.py
>>>>> $ cat
>>>>> ~/avocado/job-results/latest/test-results/1-examples_tests_synctest.py\:SyncTest.test/stdout
>>>>>
>>>>>
>>>>>
>>>>> PAR : waiting
>>>>> PASS : sync interrupted
>>>>>
>>>>> `stderr` is actually empty for that test:
>>>>>
>>>>> $ wc -l
>>>>> ~/avocado/job-results/latest/test-results/1-examples_tests_synctest.py\:SyncTest.test/stderr
>>>>>
>>>>>
>>>>> 0
>>>>> /home/cleber/avocado/job-results/latest/test-results/1-examples_tests_synctest.py:SyncTest.test/stderr
>>>>>
>>>>>
>>>>>
>>>>> What you have to do is, once you're satisfied with those outputs, and
>>>>> they're considered "the gold standard", you'd move those to the test
>>>>> *data directory*.
>>>>>
>>>>> So, if you test is hosted at, `/tests/xl.py`, you'd created the
>>>>> `/tests/xl.py.data`, and put those files there, named `stdout.expected`
>>>>> and `stderr.expected`.
>>>>>
>>>>> Whenever you run `avocado run --output-check-record all /tests/xl.py`,
>>>>> those files will be used and the output of the *current* test execution
>>>>> will be compared to those "gold standards".
>>>>>
>>>>>> The script is very simple and the way I execute the command is:
>>>>>>
>>>>>> cmd = ('/usr/sbin/xl create /VM/guest1/vm.cfg')
>>>>>> if utils.system(cmd) == "0":
> The issue seems to be related to the fact that you're using old autotest
> libraries to execute your external commands.
>
> The output record/check support is built into Avocado's libraries,
> namely `avocado.utils.process`.
>
> Try to replace your code with:
>
>     from avocado.utils import process
>     ...
>     process.system(cmd)
>
> Also, mixing and matching autotest and avocado libraries in the same
> test code is not something I'd recommend.  Not that it's guaranteed to
> break. I'd recomend to (try to) move to avocado libraries, or keep an
> eye on strange behavior like this.
>
>>>>>>          pass
>>>>>> else:
>>>>>>          return False
>>>>>>
>>>>>> The command send to stdout:
>>>>>>
>>>>>> Parsing config from /VM/guest1/vm.cfg
>>>>>>
>>>>>> I run the test as:
>>>>>>
>>>>>> avocado run --output-check-record all xentest.py
>>>>>>
>>>>>> The job.log file contains:
>>>>>>
>>>>>> 2016-09-07 13:04:48,015 test             L0214 INFO | START
>>>>>> 1-/root/avocado-vt/io-fs-autotest-xen/xen/tests/xentest.py:xentest.test_xen_start_stop;1
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2016-09-07 13:04:48,051 xentest          L0033 INFO |
>>>>>> 1-/root/avocado-vt/io-fs-autotest-xen/xen/tests/xentest.py:xentest.test_xen_start_stop;1:
>>>>>>
>>>>>>
>>>>>> Running action create
>>>>>> 2016-09-07 13:04:49,067 utils            L0151 ERROR| [stderr] Parsing
>>>>>> config from /VM/guest1/vm.cfg
>>>>>> 2016-09-07 13:04:49,523 test             L0586 INFO | PASS
>>>>>> 1-/root/avocado-vt/io-fs-autotest-xen/xen/tests/xentest.py:xentest.test_xen_start_stop;1
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Thanks for your time and help.
>>>>> Let me know if it's clear now! And thanks for trying Avocado out!
>>>>>

-- 

Regards,

Marcos Eduardo Matsunaga

Oracle USA
Linux Engineering

“The statements and opinions expressed here are my own and do not
necessarily represent those of Oracle Corporation.”




More information about the Avocado-devel mailing list