summaryrefslogtreecommitdiff
path: root/lib/igt_chamelium.c
diff options
context:
space:
mode:
authorArkadiusz Hiler <arkadiusz.hiler@intel.com>2019-08-16 11:18:04 +0300
committerArkadiusz Hiler <arkadiusz.hiler@intel.com>2019-08-20 07:52:04 +0300
commitce130a078c85ce3f2bdb02047cba5b72702a79c3 (patch)
treef63c34dd0bfa1ffe3f83caff19d54508be4fa6ec /lib/igt_chamelium.c
parentffa792ea29a0e19689b15c20173e3808422dea88 (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.c26
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