diff options
author | Arkadiusz Hiler <arkadiusz.hiler@intel.com> | 2019-08-16 11:18:04 +0300 |
---|---|---|
committer | Arkadiusz Hiler <arkadiusz.hiler@intel.com> | 2019-08-20 07:52:04 +0300 |
commit | ce130a078c85ce3f2bdb02047cba5b72702a79c3 (patch) | |
tree | f63c34dd0bfa1ffe3f83caff19d54508be4fa6ec /lib/igt_chamelium.c | |
parent | ffa792ea29a0e19689b15c20173e3808422dea88 (diff) |
tests/kms_chamelium: Wait for chamelium being reachable after a suspend
Getting network back after waking up from suspend takes some time.
If it's not quick enough, it may cause any following chamelium_rpc
to fail.
This includes the chamelium port reset in exit handler:
igt_chamelium-CRITICAL: Test assertion failure function chamelium_rpc,
file ../lib/igt_chamelium.c:349:
igt_chamelium-CRITICAL: Failed assertion: !chamelium->env.fault_occurred
igt_chamelium-CRITICAL: Last errno: 113, No route to host
igt_chamelium-CRITICAL: Chamelium RPC call failed: libcurl failed to execute
the HTTP POST transaction, explaining:
Failed to connect to 192.168.1.224 port 9992: No route to host
Stack trace:
#0 ../lib/igt_core.c:1674 __igt_fail_assert()
#1 [chamelium_rpc+0x1ea]
#2 ../lib/igt_chamelium.c:2274 chamelium_reset()
#3 ../lib/igt_chamelium.c:2361 chamelium_deinit()
#4 ../lib/igt_core.c:2124 call_exit_handlers()
So let's wait for Chamelium to be reachable after each suspend_autoresume.
v2: Bump the network timeout to 20s,
the slowest observed bring-up was 17s. (Petri)
Do not DECREF if we get NULL from __chmelium_rpc(). (Simon & CI)
Cc: Simon Ser <simon.ser@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109380
Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
Reviewed-by: Simon Ser <simon.ser@intel.com>
Diffstat (limited to 'lib/igt_chamelium.c')
-rw-r--r-- | lib/igt_chamelium.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c index 1c0e1b39..1b03a103 100644 --- a/lib/igt_chamelium.c +++ b/lib/igt_chamelium.c @@ -351,6 +351,32 @@ static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium, return res; } +static bool __chamelium_is_reachable(struct chamelium *chamelium) +{ + xmlrpc_value *res; + + /* GetSupportedInputs does not require a port and is harmless */ + res = __chamelium_rpc(chamelium, NULL, "GetSupportedInputs", "()"); + + if (res != NULL) + xmlrpc_DECREF(res); + + if (chamelium->env.fault_occurred) + igt_debug("Chamelium RPC call failed: %s\n", + chamelium->env.fault_string); + + return !chamelium->env.fault_occurred; +} + +void chamelium_wait_reachable(struct chamelium *chamelium, int timeout) +{ + bool chamelium_online = igt_wait(__chamelium_is_reachable(chamelium), + timeout * 1000, 100); + + igt_assert_f(chamelium_online, + "Couldn't connect to Chamelium for %ds", timeout); +} + /** * chamelium_plug: * @chamelium: The Chamelium instance to use |