aboutgitcodebugslistschat
path: root/test
Commit message (Collapse)AuthorAgeFilesLines
...
* test: Combine iperf3c and iperf3s into a single DSL commandDavid Gibson2022-09-075-197/+122
| | | | | | | | | | | | | | | | | These two commands in the DSL to run an iperf client and server are always used together, and some of the parameters must match between them. The iperf3s must also be run more or less immediately after iperf3c, since iperf3c will run a client in the background after a sleep and requires a server to be running before it will work. A bunch of things can be made cleaner if we make a single DSL command that runs both sides of the test. For now make the combined command work exactly like the two commands together did, warts and all. This does lose the ability for the DSL scripts to give additional options to the iperf3 server, but we weren't using that anyway. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Wait for systemd-resolved to be ready on Ubuntu 22.04 for s390xStefano Brivio2022-09-051-2/+6
| | | | | | | | | | | | | | On new Ubuntu 22.04 images, stopping systemd-resolved to get the dhclient script override resolv.conf doesn't work anymore. I originally used that hack to avoid introducing a delay which is needed when running it on TCG. Keep systemd-resolved running instead, and wait for it to be ready by retrying to resolve a domain a few times before installing packages, so that we don't add another ugly delay that might unnecessarily slow down things even further. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* test/README: Requirements for socket buffer sizes and hardware performance ↵Stefano Brivio2022-09-021-0/+16
| | | | | | | | | | | | | | | events Performance tests use iperf3(1) with large windows, and these sysctl entries are needed to run them unmodified. The passt demo uses perf(1) to report syscall overhead, and that needs access to hardware performance counters for unprivileged users. Reported-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
* test: debian: Export DEBIAN_FRONTEND=noninteractive for sid2022_08_20.f233d6cStefano Brivio2022-08-201-0/+3
| | | | | | | We start getting prompts about restarting outdated services: we're using daily images but they might have been cached for a while now. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* test: Kill qemu by pidfile rather than ^CDavid Gibson2022-08-201-8/+12
| | | | | | | | | | | | | Currently in at least some of the testcases we kill qemu processes we're done with by issuing a Control-C to the tmux panel it's running in. That makes things harder as we try to move towards allowing "headless" testing without tmux. So, instead always use an explicit kill on a pid derived from a pidfile for killing qemu. Note that we don't need to remove the pidfiles afterwards, because qemu does that itself when terminated. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Log debugging output from test scriptDavid Gibson2022-08-201-0/+2
| | | | | | | | | | | | | | | | | | | The test scripts run with sh -e, which means they will stop if any commands return an error. That's generally desirable, because we won't continue after things are hopeless due to an earlier step failing. Unfortunately, the tmux setup we run the script in means it's not obvious where any error messages related to such a failure will go. Depending on exactly where the error occurs they might go to the original terminal hidden behind tmux, or they might go to a tmux panel that's not visible in the normal layouts. To make it easier to find such error message, redirect direct output and errors from the test script itself to a 'script.log' file in the logs directory. When in DEBUG=1 mode, additionaly 'set -x' so we log all the commands we execute to that file. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Use shutdown test for pastaDavid Gibson2022-08-203-5/+4
| | | | | | | | | For the passt and passt_in_ns tests we have a "shutdown" testcase that checks for any errors from the passt process we were using (including valgrind warnings). Do the same for pasta tests, so that we catch any error codes from the pasta process. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Rename slightly misleading "valgrind" testsDavid Gibson2022-08-204-12/+13
| | | | | | | | | | | | | | | | | | | The "valgrind" test cases are designed to pick up errors reported when passt is running under valgrind. But what it actually does is just kill the passt process, then see if it had a non-zero exit code. That means it will equally well pick up any other problems which caused passt to exit with an error status: either something detected within passt or as a result of passt being killed by an unexpected signal. The fact that the "valgrind" test is actually responsible for shutting down the passt process is non-obvious and can lead to problems when selectively running tests during debugging. Rename the "valgrind" tests to "shutdown" tests and run it regardless of whether we're using valgrind or not. This allows us to remove an ugly speacial case in the passt_in_ns teardown code. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Only select a single interface or gateway in testsDavid Gibson2022-08-204-7/+7
| | | | | | | | | | The queries we use in the test scripts to locate the external interface or gateway can return multiple results. We get away with this because the way we parse command output only looks at the last line. It's not really correct, though, and improvements to our handling of command output will mean it breaks. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Split setup/teardown functions for build and distro testsDavid Gibson2022-08-202-0/+19
| | | | | | | | | | | | Currently the build tests and distro tests share a common setup function. That works for now, but changes we want to make will mean they need slightly different setup, so split the setup functions in preparation. Currently, neither build nor distro tests have any teardown function. Again, future changes are going to mean we need to do some teardown, so create some empty for now teardown functions in preparation. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Ignore video processing temporary filesDavid Gibson2022-08-201-0/+4
| | | | | | | | When recording tests or demos with asciinema we generate several temporary files during post-processing. Add these to the .gitignore file so they're not accidentally comitted. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Remove unused *_XTERM variablesDavid Gibson2022-08-201-4/+0
| | | | | | | The DEMO_XTERM and CI_XTERM variables defined in test/lib/term aren't used anywhere. Remove them. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Split cppcheck and clang-tidy tests into different filesDavid Gibson2022-08-203-5/+20
| | | | | | | | | | Both clang-tidy and cppcheck linting are handled by the same test file, test/build/static_checkers. The two linters are independent of each other though, and each one takes quite a long time. Split them into separate files to make it easier to control which are executed from the top level test script. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Convert distro tests to use socat instead of nc/ncatDavid Gibson2022-08-204-52/+74
| | | | | | | | | | | | | | | | | We've recently converted most of our tests to use socat instead of nc/netcat/ncat, because socat is more powerful and we don't need to deal with the several possible variants of netcat. We still use nc or ncat for the distro tests. Because there we control the guest environment and can pick our tools, there isn't the same reason to switch to socat. However, using socat here as well makes the tests a bit easier to read, and doesn't require people reading or modifying them to become familiar with an additional tool. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> [sbrivio: keep using netcat-openbsd in Ubuntu 16.04 ppc64 test, as socat is unavailable there] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* Makefile: Ugly hack to get a "plain" Markdown version of READMEStefano Brivio2022-08-203-3/+3
| | | | | | | | | | | | | | | | | | Distribution packages reasonably expect to have a human-readable Markdown version of the README under /usr/share/doc/, but all we have right now is a heavily web-oriented version. Introduce a ugly hack to strip web-oriented parts from the current README and install it. It should probably work the other way around: a human-readable README could be used as a source for the web page. But cgit needs a file that's in the tree, not something that can be built, and https://passt.top/ is based on cgit. It should eventually be doable to work around this in cgit, instead. Reported-by: Benson Muite <benson_muite@emailplus.org> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* contrib, test: Rebase Podman patch, enable three-way merge on git am in demo2022_08_04.b516d15Stefano Brivio2022-08-011-1/+1
| | | | | | | | Given that a three-way git merge was enough to cope with context changes in man pages, it's probably a good idea to enable that for 'git am' in the demo too. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* Separately locate external interfaces for IPv4 and IPv6David Gibson2022-07-304-5/+8
| | | | | | | | | | | | | | | | | Now that the back end allows passt/pasta to use different external interfaces for IPv4 and IPv6, use that to do the right thing in the case that the host has IPv4 and IPv6 connectivity via different interfaces. If the user hasn't explicitly chosen an interface, separately search for a suitable external interface for each protocol. As a bonus, this substantially simplifies the external interface probe. It also eliminates a subtle confusing case where in some circumstances we would pick the first interface in interface index order, and sometimes in order of routes returned from netlink. On some network configurations that could cause tests to fail, because the logic in the tests was subtly different (it always used route order). Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Correct determination of host interface name in testsDavid Gibson2022-07-302-2/+2
| | | | | | | | | | | | | By default, passt itself attaches to the first host interface with a default route. However, when determining the host interface name the tests implicitly select the *last* host interface: they use a jq expression which will list all interfaces with default routes, but the way output detection works in the scripts, it will only pick up the last line. If there are multiple interfaces with default routes on the host, and they each have a different address, this can cause spurious test failures. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Expand root partition of Debian sid amd64 and aarch64 imagesStefano Brivio2022-07-291-0/+12
| | | | | | | | | | | | | | | A couple of days ago, we started running out of space there as we're about to install gcc -- about 50 MiB are missing. Given that virt-resize (which could be conveniently invoked by the Makefile for tests) reorders partitions if we expand the first one, resize the image using qemu-img from the test script itself, and then take care of expanding root partition and filesystem online later. This is probably a temporary hack, so I'm not looking for a more generic or elegant solution at the moment. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* demo: Use git protocol downloadsDavid Gibson2022-07-222-2/+2
| | | | | | | | For some reason using https to clone from the passt git repo is very slow, at least from network-distant places. Use git protocol in the demo instead to avoid a tedious wait to get the source. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: No need to retrieve host ifname in ndp/pastaDavid Gibson2022-07-221-3/+2
| | | | | | | | | With pasta, the namespace interface name is generally the same as the host interface name. We already rely on this in the dhcp/pasta tests, but for no clear reason ndp/pasta separately determines the host interface name. Remove this unnecessary step. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Clean up better after iperf testsDavid Gibson2022-07-221-1/+1
| | | | | | | | | | | | | The iperf based test commands create a bunch of .bw and .pid files for each iperf client and server. The server side .bw files are cleaned up afterwards, but the pid files are not, and none of the client side files are cleaned up. The latter doesn't really matter when the client is run on ephemeral guests, but sometimes we run it in a namespace that shares the filesystem with the host. Clean up all of these files after the tests. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Use dhclient --no-pid for namespaces in two_guests testsDavid Gibson2022-07-221-4/+4
| | | | | | | | | | Before starting the guests, these tests configure addresses in a pasta namespace using dhclient. However, because it's a user namespace, it's not running as "real" root and can't write to the dhclient pid file. This doesn't stop it working, but causes an ugly error message which we can avoid by using the --no-pid option. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Remove unnecessary truncation of temporary files in udp testsDavid Gibson2022-07-223-18/+0
| | | | | | | | | All the UDP tests use :> to truncate some temporary data files. This appears to be so that they're empty before writing data to them with tee. However tee, by default, truncates its output file anyway (you need tee -a to append). So drop the unnecessary truncations. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Remove unnecessary ^D in passt_in_ns teardownDavid Gibson2022-07-221-2/+0
| | | | | | | | | | | | | | | | | teardown_passt_in_ns() sends a ^D to the NS pane, which appears to be intended to terminate the nsenter running there, leaving the namespace. However, we've also sent a ^D to the PASST pane which will exit the pasta instance which created the namespace. With the namespace destroyed the nsenter in the NS pane will be killed, so it does not need to be exited explicitly. In fact sending the extra ^D can be harmful, since it will exit the shell in which the nsenter was run, causing the whole pane to be closed. That can then mean that the "pane_wait NS" hangs indefinitely. I believe this will sometimes work, because there's a race between the various options here, but it should be more reliable without the extra ^D. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Use socat instead of netcatDavid Gibson2022-07-2211-200/+200
| | | | | | | | | | | | | | | Commit 41c02e10 ("tests: Use nmap-ncat instead of openbsd netcat for pasta tests") updated the pasta tests to use the nmap version of ncat instead of the openbsd version, for greater portability. For some upcoming changes, however, we'll be wanting to use socat. "socat" can do everything "ncat" can and more, so let's move all the tests using host tools (either directly on the host or via mbuto generated images) to using socat instead. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> [sbrivio: Fix a typo in port specification, 31337 instead of x31337] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* tests: Fix creation of test file in udp passt testsDavid Gibson2022-07-221-1/+1
| | | | | | | | | | In what looks like a copy-and-paste error from the TCP script, the udp/passt test script creates a test file called '__TEMP_BIG__', while the commands it use the variable __TEMP__. Correct this so that a) we actually transfer the data we created for the purpose and b) we don't leave a stale __TEMP_BIG__ file in the current directory. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Fix detection of empty 'hout' responses in passt{,_in_ns} testsDavid Gibson2022-07-221-0/+14
| | | | | | | | | | | | | | The dhcp/passt and dhcp/passt_in_ns tests at least, and maybe others use 'hout' commands that need to be able to detect empty output. However, we don't set PS1, which means the screen-scraping logic which detects this may not be reliable. In addition, if the host is using a recent bash, it will have bracketed paste mode enabled which will also add escape codes which will mess up the empty output detection. Set the prompt and disable bracketed paste mode from the passt and passt_in_ns setups to avoid these problems. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Correctly handle domain search list in dhclient-scriptDavid Gibson2022-07-221-3/+3
| | | | | | | | | | | Currently our small custom dhclient-script only handles the 'domain-name' option, which can just list a single domain, not the 'domain-search' option, which can handle several. Correct it to handle both. We also weren't emptying the resolv.conf file before we began, which could lead to surprising contents after multiple DHCP transactions. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Handle the case of a nameserver on host localhostDavid Gibson2022-07-221-2/+2
| | | | | | | | | | | | We previously introduced a change to passt to handle the case where the host machine is its own nameserver - so resolv.conf points to 127.0.0.1. In this case we advertize the gateway as the DNS server for the guest, which in turn will be redirected back to the host by existing passt logic. The dhcp/passt doesn't handle this case correctly, so add some logic to account for it. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: More robust parsing of resolv.conf for DHCP testsDavid Gibson2022-07-221-8/+8
| | | | | | | | | | | | | | | | | To check publishing of DNS information via DHCP, we need to extract a list of nameservers and/or search domains from resolv.conf in the test script. The current version (usually) leaves the result with a trailing ','. That's usually ok because it happens on both guest and host sides. However it's kind of confusing, and might stop working if the host had a resolv.conf without a trailing \n on the last line. It also makes some later changes we'll need more difficult. So, normalize the output from resolv.conf a bit further, removing any trailing ','. It turns out we can do this with a slightly less complex sed expression than the one we already have. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Add some extra dhclient support directories to mbuto.imgDavid Gibson2022-07-221-1/+1
| | | | | | | | Although it can operate without them, dhclient can issue errors if it doesn't have /var/run to write a pid file and /var/lib to write a leases file. Create those in mbuto.img to stop it complaining. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Add rudimentary debugging to dhclient-scriptDavid Gibson2022-07-221-1/+5
| | | | | | | | We now supply a minimal dhclient-script of our own in the mbuto boot image. There are some problems with it, so add some basic logging to help debug it. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Let Fedora find dhclient-script in /usr/sbinDavid Gibson2022-07-221-0/+1
| | | | | | | | | | | | Modern Fedora (and RHEL) systems have /sbin as a symlink to /usr/sbin (along with a number of similar links). Along with that it expects to find dhclient-script in /usr/sbin/dhclient-script rather than /sbin/dhclient-script. Link them together in our mbuto image so that the Fedora build of dhclient can find it. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Remove no longer needed /usr/bin/bash linkDavid Gibson2022-07-221-2/+1
| | | | | | | | | | | | AFAICT the symlink we created in mbuto from /usr/bin/bash to /bin/sh was for the benefit of a dhclient-script which used /usr/bin/bash as its interpreter (e.g. in Fedora). That was a bit risky if the script really did require bash and we linked it to dash or another shell. We now supply our own custom dhclient-script, so we don't need the link any more. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* test: Drop further ^D in passt demo teardownStefano Brivio2022-07-221-5/+1
| | | | | | | | | Similar case as the one fixed by David's patch "tests: Remove unnecessary ^D in passt_in_ns teardown": we happen to pseudo-randomly close panes by unnecessarily exiting the parent shells there, and subsequent pane_wait directives hang. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* test: Actually use pasta in Podman demo step with HTTP serviceStefano Brivio2022-07-221-1/+1
| | | | | | ...instead of slirp4netns. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* test: Fix Podman build in Podman demoStefano Brivio2022-07-221-0/+2
| | | | | | | For some reason, I now have to update some "vendored" dependencies on a fresh git clone, at least in my environment, before building. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* test: In pasta demo, issue /sbin/dhclient instead of dhclientStefano Brivio2022-07-221-2/+2
| | | | | | | | This was dependent on my own environment where I usually have /sbin in $PATH. If that's missing, given that we're running dhclient as user, we won't find it. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* test: In demos, use pgrep instead of pstree to find namespace PIDStefano Brivio2022-07-222-8/+6
| | | | | | | | | | | | Parsing pstree's output is somewhat unreliable: there might be multiple pasta instances running on the same host, and depending on the overall output width pstree might truncate some branches. Ask pasta to save its PID to file, and use that as parameter for pgrep to find the PID of the interactive shell whose user and network namespaces we want to join. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* test: In passt demo, bring up eth0 in guest, not in namespace paneStefano Brivio2022-07-211-1/+1
| | | | Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* demo/passt: Bring interface up before starting dhclient in guestStefano Brivio2022-07-141-0/+2
| | | | | | ...I forgot about one occurrence of this. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* tests: Remove unused DNS6 calculation from fedora testsDavid Gibson2022-07-143-4/+3
| | | | | | | | | | | | | | | | | | The Fedora test file extracts some information from the host resolv.conf into a DNS6 variable which is then never used. Remove this unnecessary step, which is presumably a leftover from an earlier iteration. This was the only user of 'head' and 'sed' in the test file, so those can also be removed from the required tools. The debian and ubuntu test files also listed 'head' and 'sed' as tools, although they don't use them, I'm guessing because of an earlier version which had the same DNS6 code. Remove those as well. The opensuse test file still actually uses DNS6, so leave it there for now. The DNS handling and network config handling for SuSE looks to be kind of broken, but fixing that is a job for another day. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Prepare distro images during asset build phaseDavid Gibson2022-07-146-325/+69
| | | | | | | | | | | | | | | | | | | | | | | Before booting the guest images, the distro test cases need to modify the guest images, using virt-edit and guestfish, to boot in the way we need. At present this gets repeated on every test run, even though it's not really doing anything we want to test for. In addition many of the images have the same preparation steps leading to a lot of duplicated stages in the tests. A number of additional images can be prepared using common steps, even if the ones used now have small differences. Therefore move the preparation of most of the guest images to the asset build phase, where they can be done a single time for multiple test runs, using a common preparation script. We can even avoid making a copy of the disk image for booting, by using qemu's -snapshot option. A few of the distros (openSUSE and older Ubuntu) do need different steps. For now we don't chage how they are run, they could possibly be handled more like this in future. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Move distro image download to asset build makefileDavid Gibson2022-07-146-46/+178
| | | | | | | | | | | | Rather than directly download distro images from the test scripts, handle all the downloads during the test asset build, then just clone them for the tests themselves. This avoids repeated downloads which can be very slow when debugging failing tests. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> [sbrivio: Add OPENSUSE_IMGS to DOWNLOAD_ASSETS in Makefile, and note that xzcat doesn't take a -O option in test/distro/opensuse] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
* tests: Explicitly list test files in test/run, remove "onlyfor" supportDavid Gibson2022-07-1423-67/+31
| | | | | | | | | | | | | | | | | Currently test/run uses wildcards to run all of the tests in a directory. However, that wildcard list is filtered down by the "onlyfor" directives in the test files... usually to a single file. Therefore, just explicitly list the files we *really* want to run for this test mode. This makes it easier to see at the top level what tests will be executed, and to change that list temporarily while debugging specific failures. This means the "onlyfor" directive no longer has any purpose, and we can remove it. "onlyfor" was also the only used of the $MODE variable, so we can remove that too. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Don't automatically traverse directories of test filesDavid Gibson2022-07-142-26/+26
| | | | | | | | | | | | | | | The top level listing control of which tests to run is in test/run, however it uses the test() function which runs an entire directory of test files, filtered by some criteria. This makes it awkward to narrow down to a subset of tests when debugging a specific failure. To make this easier, have test() take an explicit list of test files to run, and have the caller in test/run handle the directory traversal. The construct we use for this is pretty awkward to handle the fact that we're in the source tree root directory rather than test/ at this point in test/run. Later cleanups will improve that. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Remove not-very-useful "req" directiveDavid Gibson2022-07-143-53/+31
| | | | | | | | | | | | | | | | | The test scripts support a "req" directive which requires one test script to be run before another. It's implemented by doing a topological sort based on these directives in the runner scripts, which is about as awkward as you'd expect in Bourne shell. It turns out we only use this functionality in one place - to make the "make install" test run after the plain "make" test. We also already have a simpler way of making sure tests run in a specific order: just put them into the same test script file. So, remove support for the "req" directive and just fold the build/all and build/install test scripts together. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Remove unused set_mode() functionDavid Gibson2022-07-141-13/+0
| | | | | | This utility function is never called. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
* tests: Search multiple places for aarch64 EDK2 bios imageDavid Gibson2022-07-146-13/+30
| | | | | | | | | | | | | | | | | Apparently qemu's ARM virt machine needs to be explicitly given a firmware image, rather than just supplying a sane default. Unfortunately the EDK2 firmware image we need isn't in the same place on all host distros. Currently the test scripts hardcode the Debian location, meaning it will break on hosts that have it somewhere else. This patch searches multiple locations for the firmware, and creates a local link during the asset build phase, which the tests can then use. For now it only searches the locations used by Debian and Fedora, but that's a small improvement in robustness already, and can be later improved further if we need to. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>