
On 09/18/2017 08:27 PM, Stephen Warren wrote:
On 09/17/2017 01:32 PM, Heinrich Schuchardt wrote:
The necessary parameters for running Python tests on qemu are tediouus to find.
Nit: tedious
Let's wrap the commit description to 72-74 characters; it's rather narrow right now.
The patch adds examples for u-boot-test-console and u-boot-test-reset.
diff --git a/test/py/README.md b/test/py/README.md index 829c7efbb2..f3ad10df5a 100644 --- a/test/py/README.md +++ b/test/py/README.md @@ -197,6 +197,23 @@ simulator includes a virtual reset button! If not, you can launch the simulator from `u-boot-test-reset` instead, while arranging for this console process to always communicate with the current simulator instance.
Rather that adding these examples into a section that details one of the individual hook scripts, let's create a new section "Simple qemu example" and put it right before or after the existing "Examples" section.
Ok
+With qemu you can use the parameter -monitor to connect the control console to a +Unix socket, e.g.
Let's state what filename the following example should be saved to; u-boot-test-console.
sure
+ #!/bin/sh + touch /tmp/u-boot-monitor-socket + qemu-system-x86_64 -bios build-qemu-x86/u-boot.rom -nographic -netdev \ + user,id=eth0,tftp=../tftp,net=192.168.76.0/24,dhcpstart=192.168.76.9 \
Let's indent the continuation lines so it's more obvious this is a multi-line command:
asdfsd fsjkl fsfj lssfjdasdfsjl \ asdfsd fsjkl fsfj lssfjdasdfsjl \ asdfsd fsjkl fsfj lssfjdasdfsjl \
I think this (and the other) script should "exec" the commands to avoid leaving the shell instance around.
Is this really needed? It just adds complexity. You cannot execute anything in the lines after exec, e.g. deleting the socket file.
This example seems to enable networking support in qemu, and a TFTP server. I believe you'll need to provide an example Python board configuration so that test/py knows to enable the network tests.
tftp is used for testing bootefi hello
Empty file __init__.py
u_boot_boardenv_qemu_x86.py env__net_dhcp_server = True env__efi_loader_helloworld_file = { "fn": "helloworld.efi", "size": 4298, "crc32": "55d96ef8", }
This is another file needed:
u-boot-test-quit #!/bin/sh echo quit | socat - UNIX-CONNECT:/tmp/u-boot-monitor-socket
The following script comes in handy to create the .py file:
#!/bin/bash echo env__efi_loader_$(basename $1 | sed 's/./_/g') = { echo ' "fn":' $(basename $1) echo ' "len":' $(stat --printf="%s" $1) echo ' "crc32":' $(crc32 $1) echo }
+ -device e1000,netdev=eth0 -machine pc-i440fx-2.8 \ + -monitor unix:/tmp/u-boot-monitor-socket,server,nowait
+In `u-boot-test-reset` call the socat command to send a system reset:
+ #!/bin/sh + echo system_reset | socat - UNIX-CONNECT:/tmp/u-boot-monitor-socket + sleep 1 + true
Why is the sleep needed?
This avoids race conditions. Qemu will need some milliseconds to actually shut down qemu. I want to be sure that Python does not execute any command before this is completed.
The true command shouldn't have any effect given set -e isn't in use.
man dash: The shell will return the exit status of the last command executed.
If the last command is false running the test suite fails.
I only see examples for u-boot-test-console and u-boot-test-reset. I believe you need to provide a dummy/empty u-boot-test-flash too.
Yes this is what I used:
#!/bin/sh echo ... u-boot-test-flash ...