From: Stephen Warren <swarren@wwwdotorg.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V2 1/7] test/py: Implement pytest infrastructure
Date: Mon, 4 Jan 2016 14:16:43 -0700 [thread overview]
Message-ID: <568AE13B.6050805@wwwdotorg.org> (raw)
In-Reply-To: <CAPnjgZ0enK3+RMAWLzWzx0LgRNTyomHA9x6QOYPndMmLWwru6Q@mail.gmail.com>
On 12/19/2015 03:24 PM, Simon Glass wrote:
> Hi Stephen,
>
> On 2 December 2015 at 15:18, Stephen Warren <swarren@wwwdotorg.org> wrote:
>> This tool aims to test U-Boot by executing U-Boot shell commands using the
>> console interface. A single top-level script exists to execute or attach
>> to the U-Boot console, run the entire script of tests against it, and
>> summarize the results. Advantages of this approach are:
>>
>> - Testing is performed in the same way a user or script would interact
>> with U-Boot; there can be no disconnect.
>> - There is no need to write or embed test-related code into U-Boot itself.
>> It is asserted that writing test-related code in Python is simpler and
>> more flexible that writing it all in C.
>> - It is reasonably simple to interact with U-Boot in this way.
>>
>> A few simple tests are provided as examples. Soon, we should convert as
>> many as possible of the other tests in test/* and test/cmd_ut.c too.
>>
>> In the future, I hope to publish (out-of-tree) the hook scripts, relay
>> control utilities, and udev rules I will use for my own HW setup.
>>
>> See README.md for more details!
> This is a huge step forward for testing in U-Boot. Congratulations on
> putting this together!
>
> Tested on chromebook_link, sandbox
> Tested-by: Simon Glass <sjg@chromium.org>
>
> I've made various comments in the series as I think it needs a little
> tuning. I'm also interested in how we can arrange for the existing
> unit tests to be run (and results supported) by this framework.
>
> One concern I have is about the ease of running and writing tests. It
> is pretty easy at present to run a particular driver model test:
>
> ./u-boot -d test.dtb -c "ut dm uclass"
>
> and we can run this in gdb and figure out where things are going wrong
> (I do this quite a bit). Somehow we need to preserve this ease of use.
> The tests should be accessible. I'm not sure how you intend to make
> that work.
You can select which individual tests to run by passing "-k testname" on
the command-line. Assuming Python-level tests have the desired
granularity, that should be enough for test selection.
There's currently no support for running U-Boot under gdb. The acts of
running U-Boot under gdb, disabling stdout redirection, and removing
timeouts would be pretty easy to add. However, I'm not sure how you'd be
able to interact with the gdb console and U-Boot output without
interfering with the test script's need to capture the shell output in
order to run the tests and interpret the results. Perhaps simplest would
be to add some mechanism to pause the test process so that you could
manually attach a gdb process externally at the appropriate time,
perhaps along with the test process automatically spawning another
shell/terminal/... to host the gdb (in which case it could be made to
automatically attach to the correct process).
>> diff --git a/test/py/.gitignore b/test/py/.gitignore
>> +## Testing sandbox
>> +
>> +To run the testsuite on the sandbox port (U-Boot built as a native user-space
>> +application), simply execute:
>> +
>> +```
>> +./test/py/test.py --bd sandbox --build
>> +```
>> +
>> +The `--bd` option tells the test suite which board type is being tested. This
>> +lets the test suite know which features the board has, and hence exactly what
>> +can be tested.
>
> Can we use -b to fit in with buildman and patman?
pytest reserves all lower-case single-letter options for itself, so we
cannot use any of those. I suppose we could write a wrapper script to
translate from -b to --board etc., but that would be a bit messy and
prevent access to the shadowed pytest options.
>> diff --git a/test/py/conftest.py b/test/py/conftest.py
>> +def pytest_configure(config):
>
> This series should have function comments throughout on non-trivial
> functions - e.g. purpose of the function and a description of the
> parameters and return value.
I can see this makes sense in some cases, but this particular function
is a standard pytest function and already documented on
http://pytest.org/. Would you still want additional documentation even
for such functions?
>> diff --git a/test/py/uboot_console_base.py b/test/py/uboot_console_base.py
>> +class ConsoleBase(object):
>> + def ensure_spawned(self):
>> + if self.p:
>> + return
>> + try:
>> + self.at_prompt = False
>> + self.log.action("Starting U-Boot")
>> + self.p = self.get_spawn()
>> + # Real targets can take a long time to scroll large amounts of
>> + # text if LCD is enabled. This value may need tweaking in the
>> + # future, possibly per-test to be optimal. This works for "help"
>> + # on board "seaboard".
>> + self.p.timeout = 30000
>> + self.p.logfile_read = self.logstream
>
> Also I have found that tests fail on chromebook_link because it cannot
> keep up with the pace of keyboard input. I'm not sure what the
> solution is - maybe the best thing is to implement buffering in the
> serial uclass, assuming that fixes it. For now I disabled LCD output.
>
> I think it would be worth adding a test that checks for the banner and
> the prompt, so we know that other test failures are not due to this
> problem.
I had the same problem on Seaboard. I solved that by having the "expect"
code wait for command echo bit-by-bit so that the host's TX side could
never overflow the target's RX side FIFOs. Perhaps try lowering the
max_fifo_fill value in test/py/uboot_console_exec_attach.py; does that
solve the issue?
next prev parent reply other threads:[~2016-01-04 21:16 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-02 22:18 [U-Boot] [PATCH V2 1/7] test/py: Implement pytest infrastructure Stephen Warren
2015-12-02 22:18 ` [U-Boot] [PATCH V2 2/7] test/py: test that sandbox exits when asked Stephen Warren
2015-12-19 22:24 ` Simon Glass
2015-12-02 22:18 ` [U-Boot] [PATCH V2 3/7] test/py: add test of setenv/printenv/echo Stephen Warren
2015-12-18 13:50 ` Michal Simek
2015-12-18 18:09 ` Stephen Warren
2016-01-04 8:36 ` Michal Simek
2015-12-19 22:24 ` Simon Glass
2015-12-02 22:18 ` [U-Boot] [PATCH V2 4/7] test/py: test the md/mw commands Stephen Warren
2015-12-18 13:51 ` Michal Simek
2015-12-18 18:15 ` Stephen Warren
2015-12-19 22:24 ` Simon Glass
2015-12-02 22:18 ` [U-Boot] [PATCH V2 5/7] test/py: add test of basic shell functionality Stephen Warren
2015-12-19 22:24 ` Simon Glass
2015-12-02 22:18 ` [U-Boot] [PATCH V2 6/7] test/py: test the shell if command Stephen Warren
2015-12-19 22:24 ` Simon Glass
2016-01-04 21:18 ` Stephen Warren
2015-12-02 22:18 ` [U-Boot] [PATCH V2 7/7] test/py: test the ums command Stephen Warren
2015-12-19 22:24 ` Simon Glass
2016-01-04 21:19 ` Stephen Warren
2015-12-03 6:47 ` [U-Boot] [PATCH V2 1/7] test/py: Implement pytest infrastructure Heiko Schocher
2015-12-07 21:51 ` Stephen Warren
2015-12-08 5:42 ` Heiko Schocher
2015-12-09 16:32 ` Stephen Warren
2015-12-16 15:11 ` Michal Simek
2015-12-16 16:27 ` Stephen Warren
2015-12-16 17:43 ` Michal Simek
2015-12-16 18:09 ` Stephen Warren
2015-12-16 18:32 ` Michal Simek
2015-12-16 18:41 ` Stephen Warren
2015-12-18 14:50 ` Michal Simek
2015-12-18 18:33 ` Stephen Warren
2015-12-18 22:36 ` Stephen Warren
2016-01-04 8:50 ` Michal Simek
2016-01-04 12:41 ` Michal Simek
2016-01-04 20:34 ` Stephen Warren
2015-12-17 5:45 ` Heiko Schocher
2016-01-14 23:12 ` Simon Glass
2016-01-16 6:29 ` [U-Boot] U-Boot: using tbot for U-Boot tests was: " Heiko Schocher
2016-01-19 3:42 ` Simon Glass
2016-01-19 11:42 ` Heiko Schocher
2015-12-19 22:24 ` [U-Boot] " Simon Glass
2016-01-04 21:16 ` Stephen Warren [this message]
2016-01-04 22:23 ` Stephen Warren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=568AE13B.6050805@wwwdotorg.org \
--to=swarren@wwwdotorg.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.